diff options
Diffstat (limited to 'graphics/pgf')
219 files changed, 28324 insertions, 4028 deletions
diff --git a/graphics/pgf/contrib/aiplans/Aiplans-Introduction.pdf b/graphics/pgf/contrib/aiplans/Aiplans-Introduction.pdf Binary files differnew file mode 100644 index 0000000000..9c8cc89460 --- /dev/null +++ b/graphics/pgf/contrib/aiplans/Aiplans-Introduction.pdf diff --git a/graphics/pgf/contrib/aiplans/LICENSE.txt b/graphics/pgf/contrib/aiplans/LICENSE.txt new file mode 100644 index 0000000000..4db9b5af29 --- /dev/null +++ b/graphics/pgf/contrib/aiplans/LICENSE.txt @@ -0,0 +1,415 @@ +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. diff --git a/graphics/pgf/contrib/aiplans/README.md b/graphics/pgf/contrib/aiplans/README.md new file mode 100644 index 0000000000..7e50eef9c0 --- /dev/null +++ b/graphics/pgf/contrib/aiplans/README.md @@ -0,0 +1,80 @@ +# <aiplans>: A TikZ-Based Library for Drawing POCL Plans
+
+<aiplans> is a specialized LaTeX package designed to assist scientists, students, and professionals in creating high-quality graphical representations, particularly Partial Order Causal Link (POCL) plans. Built on the robust TikZ framework, this library simplifies the process of generating complex, precise diagrams that are essential for academic and scientific communication. Our package is especially useful in fields such as artificial intelligence and automated planned, where visualizing causal relationships and dependencies is fundamental.
+
+## Content
+
+- [Project Structure](#project-structure)
+- [License](#license)
+- [Future Improvements Plan](#future-improvements-plan)
+- [Contact Information](#contact-information)
+- [Team Members](#team-members)
+
+## Project Structure
+
+Aiplans/
+
+├── **README.md**
+
+├── **README.pdf**
+
+├── **Aiplans-Introdution-source-code.zip**
+
+├── **Aiplans-Introdution.pdf**
+
+├── **tikzlibraryaiplans.code.tex**
+
+└── **License.txt**
+
+
+### Explanation
+
+- **README**: This file provides an overview of the project, including installation instructions, system requirements, and other essential information.
+- **Aiplans-Introdution-source-code.zip**: Introduction file Latex source code.
+- **Aiplans-Introdution.pdf**: Detailed instructions on how to use the TikZ library included in this package. It covers the steps needed to generate diagrams using LaTeX.
+- **tikzlibraryaiplans.code.tex**: The core of the project, this file contains the TikZ library specifically designed for generating AI plan diagrams. This package is crucial for the functionality provided by this project.
+- **License.txt**: The license file outlines the terms under which the package can be used, modified, and distributed.
+
+
+## License
+
+This material is subject to the [LaTeX Project Public License 1.3c](https://ctan.org/license/lppl1.3).
+
+## Future Improvements Plan
+
+As we continue to improve and expand the `<aiplans>` package, the following developments are planned for the upcoming future:
+
+### In Scope
+
+1. **Extension Features for v1.0**:
+ - **Vertical Diagram Support**: We aim to enhance the package by introducing the ability to create vertical diagrams, which will provide more flexibility in visualizing POCL plans.
+ - **Dynamic Precondition/Effect Lengths**: After the package update, the lengths of the lines will be automatically adjusted based on the actual length of the text labels. In other words, if the label's text content is longer, the corresponding line will also be lengthened; if the label's text content is shorter, the line will be shortened accordingly. This dynamic adjustment allows the diagram to more flexibly adapt to various content requirements, resulting in a final diagram that is more visually appealing and clear.
+
+2. **Code Translator**:
+ - **PDDL/HDDL Code Translation**: We are developing a code translator that can accurately convert PDDL (Planning Domain Definition Language) and HDDL (Hierarchical Domain Definition Language) code into the schema format used by our `<aiplans>` library. This feature will streamline the process of diagram creation from existing codebases or at least allow to specify the tikz code in another syntax that might be more familiar to some.
+
+## Contact Information
+
+If you have any questions, feedback, or suggestions regarding this project, please feel free to reach out to us. We are always happy to assist and appreciate your input.
+
+**Email:** [u7166251@anu.edu.au](mailto:u7166251@anu.edu.au) (Yikai Ge)
+For reporting bugs or requesting features.
+
+We strive to respond to all inquiries as quickly as possible.
+
+## Team Members
+
+This project is developed by a team of students from the Australian National University (ANU), guided by our client. He provided us with the initial idea and relevant references, playing a crucial role in shaping the direction of our research.
+
+### Client
+- **Pascal Bercher**
+
+### Maintainers
+- **Yikai Ge**
+- **Chen Wang**
+- **Cheng Zhou**
+- **Lujia Li**
+- **Yinyin Chen**
+- **Xinni Song**
+
+We have worked closely with our client to ensure that the project meets their requirements and delivers high-quality results.
diff --git a/graphics/pgf/contrib/aiplans/README.pdf b/graphics/pgf/contrib/aiplans/README.pdf Binary files differnew file mode 100644 index 0000000000..cca41d75a7 --- /dev/null +++ b/graphics/pgf/contrib/aiplans/README.pdf diff --git a/graphics/pgf/contrib/aiplans/tikzlibraryaiplans.code.tex b/graphics/pgf/contrib/aiplans/tikzlibraryaiplans.code.tex new file mode 100644 index 0000000000..5b6d23860c --- /dev/null +++ b/graphics/pgf/contrib/aiplans/tikzlibraryaiplans.code.tex @@ -0,0 +1,121 @@ +\ProvidesPackage{aiplan} +\RequirePackage{tikz} +\RequirePackage{listofitems} +\usetikzlibrary{calc} +\usetikzlibrary{decorations.pathreplacing, decorations.markings} + + +\tikzset{ + action/.style n args={8}{ + draw, + minimum width=3cm, + fill=blue, + rounded corners, + minimum height={max(#1,#2)*\baseHeight cm + 0.5*\baseHeight cm}, + label={center:#7}, + append after command={ + \pgfextra{ + % Define the node name + \edef\nodename{\tikzlastnode} + \ifx#3\empty % Check if label list is empty + \else % Process only if not empty + % Read the label content + \setsepchar{,} + \readlist\nameparts{\nodename} + \setsepchar{,} + + \ifnum#8=0\relax + % Define positions for preconditions and effects relative to the node with shifts + \ifnum#1>0 + \readlist\labellist{#3} + \foreach \i in {1,...,#1} { + % Precondition coordinates and lines + \coordinate (\nodename-pre-\i) at ([xshift=-#5cm, yshift=(-\i + (#1)/2+0.25) * \baseHeight cm] \nodename.west); + \draw (\nodename.west |- \nodename-pre-\i) -- +(-#5,0) node [midway, above, sloped, font=\scriptsize] {\labellist[\i]}; + } + \fi; + \readlist\labellist{#4} + \ifnum#2>0 + \foreach \j in {1,...,#2} { + % Effect coordinates and lines + \coordinate (\nodename-eff-\j) at ([xshift=#6cm, yshift=(-\j + (#2)/2+0.25) * \baseHeight cm] \nodename.east); + \draw (\nodename.east |- \nodename-eff-\j) -- +(#6,0) node [midway, above, sloped, font=\scriptsize] {\labellist[\j]}; + } + \fi; + \else + \ifnum#1>0 + \readlist\labellist{#3} + \foreach \i in {1,...,#1} { + % Precondition coordinates and lines + \coordinate (\nodename-pre-\i) at ([xshift=-#5 cm, yshift=(-\i + (#1)/2+0.25) * \baseHeight cm] \nodename.west); + \draw (\nodename.west |- \nodename-pre-\i) -- +(-#5,0) node [midway, anchor=east, xshift=-0.5 cm, sloped, font=\scriptsize]{\labellist[\i]}; + } + \fi; + \readlist\labellist{#4} + \ifnum#2>0 + \foreach \j in {1,...,#2} { + % Effect coordinates and lines + \coordinate (\nodename-eff-\j) at ([xshift=#6 cm, yshift=(-\j + (#2)/2+0.25) * \baseHeight cm] \nodename.east); + \draw (\nodename.east |- \nodename-eff-\j) -- +(#6,0) node [midway,anchor=west, xshift=0.5 cm, font=\scriptsize] {\labellist[\j]}; + } + \fi; + \fi; + \fi; + } + }, + label content/.initial={#3} + } +} + + +% Common base style for nodes +\tikzset{ + % COMMENT MISSING + base/.style n args={5}{ + draw, + minimum width=0.05cm, + fill=black, + minimum height={#1*\baseHeight cm}, + append after command={ + \pgfextra{ + \edef\nodename{\tikzlastnode} + \setsepchar{,} + \readlist\labellist{#2} + \foreach \i in {1,...,#1} { + \coordinate (\nodename-#5-\i) at ([xshift=#3 cm, yshift=(-\i + (#1)/2+0.25) * \baseHeight cm] \nodename.#4); + \draw (\nodename.#4 |- \nodename-#5-\i) -- +(#3,0) + node [midway, above, sloped, font=\scriptsize] {\labellist[\i]}; + } + } + } + } +} + +\tikzset{ + % Init style + init/.style n args={3}{ + base={#1}{#2}{#3}{east}{eff} + } +} + +\tikzset{ + % Goal style + goal/.style n args={3}{ + base={#1}{#2}{-#3}{west}{pre} + } +} + + + +\tikzset{ + dot/.style={ + circle,fill,inner sep=0.1em + } +} + +\tikzset{ + causallink/.style={ + ->, shorten <= 0.2cm, shorten >= 0.1cm + } +} + diff --git a/graphics/pgf/contrib/argumentation/README.md b/graphics/pgf/contrib/argumentation/README.md index 3e6a97e5ec..b015ce3555 100644 --- a/graphics/pgf/contrib/argumentation/README.md +++ b/graphics/pgf/contrib/argumentation/README.md @@ -4,5 +4,5 @@ The argumentation package provides utility to create abstract argumentation fram For bug reports and feedback, please contact: Lars Bengel <lars.bengel@fernuni-hagen.de> -Version: 1.1 [2023/12/03] +Version: 1.4 [2024/11/03] This package is subject to the LaTeX Project Public License 1.3c
\ No newline at end of file diff --git a/graphics/pgf/contrib/argumentation/argumentation-doc.pdf b/graphics/pgf/contrib/argumentation/argumentation-doc.pdf Binary files differindex 39c89e37e3..f9c4defd43 100644 --- a/graphics/pgf/contrib/argumentation/argumentation-doc.pdf +++ b/graphics/pgf/contrib/argumentation/argumentation-doc.pdf diff --git a/graphics/pgf/contrib/argumentation/argumentation-doc.tex b/graphics/pgf/contrib/argumentation/argumentation-doc.tex index 128765d43c..58fa51c006 100644 --- a/graphics/pgf/contrib/argumentation/argumentation-doc.tex +++ b/graphics/pgf/contrib/argumentation/argumentation-doc.tex @@ -1,590 +1,1106 @@ -\documentclass{article} - -\title{The \argumentation Package} -\author{Lars Bengel\footnote{Please report any issues at \url{https://github.com/aig-hagen/tikz_argumentation}}\\\small lars.bengel@fernuni-hagen.de} -\date{Version 1.1 [2023/12/03]} - -%%%%%%%%% IMPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\usepackage[]{argumentation} % Main Package -\usepackage{amsmath} % For example environment -\usepackage{xspace} % For dynamic spacing after commands -\usepackage{xcolor} % Coloring -\usepackage[hidelinks]{hyperref} % Hyperlinks -\usepackage{subcaption} % For two-part figures - +\documentclass{scrartcl} + +\usepackage[top=1.35in, bottom=1.33in, left=1.35in, right=1.35in]{geometry} +\usepackage[macros,beamer]{argumentation} % Main Package +\usepackage[T1]{fontenc} % Font Encoding +\usepackage[utf8]{inputenc} % Input font encoding +\usepackage[english]{babel} % Language +\usepackage{subcaption} % Multi-part Figures +\usepackage[nohyperref]{doc} % Showing Commands (must load before tcolorbox) +\usepackage[breakable]{tcolorbox} % Fancier Examples +\usepackage{booktabs} % Fancier Tables +\usepackage{enumitem} % Fancier Enumeration +\usepackage[hidelinks, % Setting Meta-Data and hyperlinks + pdfauthor={Lars Bengel}, + pdftitle={The argumentation LaTeX-package}, + pdfsubject={Documentation of the argumentation LaTeX-package}, + pdfkeywords={argumentation,tikz,graphs}]{hyperref} + +%%% Document settings +\KOMAoptions{ + paper=a4, + fontsize=10pt, + cleardoublepage=empty, + footinclude=true +} + +%%% Various commands used in the document +\newcommand{\todo}[1]{\textcolor{magenta}{TODO: #1}} % for todos \newcommand{\tikzname}{Ti\emph{k}Z\xspace} \newcommand{\argumentation}{\texttt{argumentation}\xspace} -\newcommand{\opt}[2][red]{\ensuremath{\textcolor{#1}{\langle #2\rangle}}} \newtheorem{example}{Example} -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\tcolorboxenvironment{example}{colframe=aigblue,colback=aigyellow!30,breakable,before skip=10pt,after skip=10pt} +\newcommand{\mopt}[2][red]{\textcolor{#1}{\ttfamily \meta{#2}}} +\newcommand{\oopt}[2][orange]{\textcolor{#1}{\ttfamily \meta{#2}}} +\newcommand{\popt}[2][magenta]{\textcolor{#1}{\ttfamily \meta{#2}}} +\newcommand{\sopt}[2][green]{\textcolor{#1}{\ttfamily \meta{#2}}} + +%%% Taken from ltxdoc-class +\def\cmd#1{\cs{\expandafter\cmd@to@cs\string#1}} +\def\cmd@to@cs#1#2{\char\number`#2\relax} +\DeclareRobustCommand\cs[2][-1.6cm]{\hspace{#1}\texttt{\char`\\#2}} + +\title{The \argumentation Package} +\author{Lars Bengel\footnote{Please report any issues at \url{https://github.com/aig-hagen/tikz_argumentation}}\\\small lars.bengel@fernuni-hagen.de} +\date{Version 1.4 [2024/11/03]} \begin{document} \maketitle +\begin{minipage}{.26\textwidth} + \centering + \begin{af}[argumentstyle=gray,namestyle=monospace] + \argument{a} + \argument[right=of a1]{b} + \argument[below=of a1]{c} + \argument[right=of a3]{d} + + \attack{a1}{a2} + \attack{a2}{a3} + \attack[bend right]{a3}{a4} + \label{af:example} + \end{af} +\end{minipage} +\begin{minipage}{.5\textwidth} + \begin{small} + \begin{verbatim} + \begin{af}[argumentstyle=gray,namestyle=monospace] + \argument{a} + \argument[right=of a1]{b} + \argument[below=of a1]{c} + \argument[right=of a3]{d} + + \attack{a1}{a2} + \attack{a2}{a3} + \attack[bend right]{a3}{a4} + \label{af:example} + \end{af} + \end{verbatim} + \end{small} +\end{minipage} + + \tableofcontents \newpage -\section{Example} -\vspace{-0.7cm} +%\sffamily +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{Quick Guide}\label{sec:quick} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\noindent +To create an argumentation framework in your \LaTeX-document, you first have to import the \argumentation package in the preamble:\\ + +\noindent\cs[0cm]{usepackage\{argumentation\}}\\ + +You can then create a new \texttt{af} environment in which the argumentation framework can then be built:\\ + +\noindent\cs[0cm]{begin\{af\}} + +\quad\sopt{environment~contents} + +\noindent\cs[0cm]{end\{af\}}\\ + +You may want to wrap the \texttt{af} environment in a \texttt{figure} environment in order to add a caption and reference label. +You can also add a label inside the \texttt{af} environment via \verb|\label{|\sopt{label}\verb|}|. +Anywhere in your document, you can then reference the af with \verb|\ref{|\sopt{label}\verb|}|. + +Inside the \texttt{af} environment, you can then add an argument as follows:\\ + +\noindent\cs[0cm]{argument\{\mopt{name}\}}\\ + +Here, \mopt{name} is the name of the argument displayed in the graph and the argument is automatically assigned an \emph{identifier} of the form: $a1$, $a2$, \dots. + +To properly add further arguments, you also need to specify a position. +The \argumentation package offers two easy ways of doing that:\\ + +\noindent\cs[0cm]{argument[\mopt{dir}=of \mopt{argId}]\{\mopt{name}\}}\\ + +\noindent\cs[0cm]{argument\{\mopt{name}\} at (\popt{posX},\popt{posY})}\\ + +The first instance is \emph{relative positioning} where \mopt{dir} is the direction of placement relative to the argument with the identifier \mopt{argId}, with \mopt{dir} typically being one of: \textsf{right}, \textsf{left}, \textsf{above}, \textsf{below}. + +The second instance is \emph{absolute positioning} where \texttt{(\popt{posX}, \popt{posY})} is a set of coordinates, for example something like $\texttt{(2, 0)}$, $\texttt{(0, -2)}$ or $\texttt{(-1, 3.5)}$. + +The next step is adding attacks. +For that you can simply use the following command:\\ + +\noindent\cs[0cm]{attack\{\mopt{a1}\}\{\mopt{a2}\}}\\ + +\noindent +Substitute \mopt{a1} and \mopt{a2} with the identifier of the two arguments. +Alternatively, you can also directly create bidirectional attacks and self-attacks with the following two commands:\\ + +\noindent\cs[0cm]{dualattack\{\mopt{a1}\}\{\mopt{a2}\}}\\ +\noindent\cs[0cm]{selfattack\{\mopt{a1}\}}\\ + + +To customize the look of the arguments and attacks and for a detailed overview over all options and commands provided by this package, please refer to the following example or to the full documentation in Section~\ref{sec:documentation}. + + +\newpage +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{Example Usage}\label{sec:example} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\vspace{-0.5cm} \begin{figure}[ht] \centering - \begin{af} - \argument{args1}{a} - \argument[right=of args1]{args2}{b} - \argument[right=of args2]{args3}{c} - \argument[right=of args3]{args4}{d} - \argument[right=of args4,incomplete]{args5}{e} - \argument[below=of args1]{args6}{f} - \argument[inactive,right=of args6]{args7}{g} - \argument[inactive,argin,right=of args7]{args8}{h} - \argument[right=of args8]{args9}{i} - \argument[right=of args9]{args10}{j} - - %\annotation[right]{args5}{$a\lor b$} - - \afname[left of=args1,yshift=-0.8cm,xshift=-0.2cm]{cap}{\textbf{F:}} - - \selfattack{args1} - \dualattack{args1}{args6} - \dualattack[inactive]{args6}{args7} + \begin{af}[namestyle=math] + \argument{a} + \argument[right=of a1]{b} + \argument[right=of a2]{c} + \argument[rejected,right=of a3]{d} + \argument[right=of a4,incomplete]{e} + \argument[below=of a1]{f} + \argument[inactive,right=of a6]{g} + \argument[accepted,right=of a7]{h} + \argument[right=of a8]{i} + \argument[right=of a9]{j} + + \annotation[right,yshift=-0.4cm]{a5}{$a\lor b$} + + \afname{$F_{\ref{af:ex2}}$} at (-1,-1) + + \selfattack{a1} + \dualattack{a1}{a6} + \dualattack[inactive]{a6}{a7} - \attack[inactive]{args8}{args7} - \attack[inactive]{args7}{args2} - \annotatedattack{args3}{args2}{$3$} - \attack[incomplete]{args4}{args5} - \attack{args5}{args10} - \attack{args10}{args9} - \attack{args9}{args4} - - \support{args4}{args3} - \support{args9}{args3} + \attack[inactive]{a8}{a7} + \attack[inactive]{a7}{a2} + \annotatedattack[above]{a3}{a2}{$3$} + \annotatedattack[below,incomplete]{a4}{a5}{$x$} + \attack{a5}{a10} + \attack{a10}{a9} + \attack{a9}{a4} + + \support{a4}{a3} + \support{a9}{a3} + \label{af:ex2} \end{af} - \caption{An exemplary AF created with the \argumentation package.} + \caption{The AF $F_{\ref{af:ex2}}$ created with the \argumentation package.} \label{fig:example} \end{figure} -\vspace{-0.4cm} + \begin{verbatim} - \usepackage{argumentation} - \begin{figure}[ht] - \centering - \begin{af} - \argument{args1}{a} - \argument[right=of args1]{args2}{b} - \argument[right=of args2]{args3}{c} - \argument[right=of args3]{args4}{d} - \argument[right=of args4,incomplete]{args5}{e} - \argument[below=of args1]{args6}{f} - \argument[inactive,right=of args6]{args7}{g} - \argument[inactive,argin,right=of args7]{args8}{h} - \argument[right=of args8]{args9}{i} - \argument[right=of args9]{args10}{j} - - \afname[left of=args1,yshift=-0.8cm,xshift=-0.2cm]{cap}{\textbf{F:}} - - \selfattack{args1} - \dualattack{args1}{args6} - \dualattack[inactive]{args6}{args7} - - \attack[inactive]{args8}{args7} - \attack[inactive]{args7}{args2} - \annotatedattack{args3}{args2}{$3$} - \attack[incomplete]{args4}{args5} - \attack{args5}{args10} - \attack{args10}{args9} - \attack{args9}{args4} - - \support{args4}{args3} - \support{args9}{args3} - \end{af} - \caption{An exemplary AF created with the \argumentation package.} - \label{fig:example} - \end{figure} +\usepackage[namestyle=math]{argumentation} +... +\begin{document} +... +\begin{figure}[ht] + \centering + \begin{af} + \argument{a} + \argument[right=of a1]{b} + \argument[right=of a2]{c} + \argument[rejected,right=of a3]{d} + \argument[right=of a4,incomplete]{e} + \argument[below=of a1]{f} + \argument[inactive,right=of a6]{g} + \argument[accepted,right=of a7]{h} + \argument[right=of a8]{i} + \argument[right=of a9]{j} + + \annotation[right,yshift=-0.4cm]{a5}{$a\lor b$} + \afname{$F_{\ref{af:ex2}}$} at (-1,-1) + + \selfattack{a1} + \dualattack{a1}{a6} + \dualattack[inactive]{a6}{a7} + + \attack[inactive]{a8}{a7} + \attack[inactive]{a7}{a2} + \attack{a5}{a10} + \attack{a10}{a9} + \attack{a9}{a4} + + \annotatedattack[above]{a3}{a2}{$3$} + \annotatedattack[below,incomplete]{a4}{a5}{$x$} + \support{a4}{a3} + \support{a9}{a3} + \label{af:ex2} + \end{af} + \caption{The AF $F_{\ref{af:ex2}}$ created with the \argumentation package.} + \label{fig:example} +\end{figure} +... +\end{document} \end{verbatim} -\section{Documentation for Version 1.1 [2023/12/03]} -In the following, we give an overview over the functionality of the \argumentation package. -In general, the functionality provided by this package is fully compatible with \tikzname. -Meaning every command from this package can be used inside the \textsf{tikzpicture} environment and every \tikzname command or option can be used inside the \texttt{af} environment or in context of the argument nodes and attack edges. +\newpage +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{Documentation for Version 1.4 [2024/11/03]}\label{sec:documentation} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +The \argumentation package provides an easy way for creating argumentation frameworks\footnote{Dung, P. M. (1995). On the acceptability of arguments and its fundamental role in non-monotonic reasoning, logic programming and n-person games. Artificial intelligence.} in \LaTeX-documents. +It builds on the \tikzname package for drawing the argumentation graphs. +The \argumentation package provides simplified syntax while keeping the same customisation options and keeping full compatibility with all \tikzname features. +In addition to that, the \argumentation package provides the ability to label and reference the created argumentation frameworks as well as some other additional features. -\subsection{Package Options} - The \argumentation package can be imported via the command - - \noindent - \verb|\usepackage{argumentation}| +The \argumentation package can be imported via the command\\ - Alternatively, one can also adjust the appearance by providing some package options via +\noindent\cs{usepackage[\oopt{options}]\{argumentation\}}\\ - \noindent - \verb|\usepackage[|\opt{options}\verb|]{argumentation}| - - \begin{list}{}{\leftmargin=\parindent\rightmargin=0pt} - \item The package provides the following \emph{optional} options to customize the look of the argumentation frameworks. - \end{list} - \begin{align*} - \mathsf{namestyle} &\quad \text{Customizes the font of the argument names.}\\ - \mathsf{argumentstyle} &\quad \text{Customizes the appearance of the argument nodes.}\\ - \mathsf{attackstyle} &\quad \text{Customizes the appearance of the attack edges.}\\ - \mathsf{supportstyle} &\quad \text{Customizes the appearance of the support edges.}\\ - \end{align*} - - In the following, we list the available options for each of the style parameters.\\ - -\noindent\texttt{namestyle=}\opt{option} - - The \textsf{namestyle} parameter accepts three different options - \begin{align*} - \mathsf{normal} &\quad \text{(default) The argument name is rendered normally.}\\ - \mathsf{italics} &\quad \text{The argument name is rendered in \emph{italics}.}\\ - \mathsf{bold} &\quad \text{The argument name is rendered in \textbf{bold}.}\\ - \mathsf{bolditalics} &\quad \text{The argument name is rendered with \textbf{\emph{both}}.}\\ - \mathsf{monospace} &\quad \text{The argument name is rendered in \texttt{monospace} font.}\\ - \end{align*} - -\noindent\texttt{argumentstyle=}\opt{option} - - The \textsf{argumentstyle} parameter accepts two options - \begin{align*} - \mathsf{standard} &\quad \text{(default) Standard style for the argument nodes.}\\ - %\mathsf{retro} &\quad \text{Thicker outline and slightly larger nodes.}\\ - \end{align*} +\vspace{-0.2cm} +In the following, we give an overview over the functionality of the \argumentation package. +Most importantly, that includes the \texttt{af} environment to encapsulate the created argumentation frameworks, the command \verb|\argument{ }| to create argument nodes and the \verb|attack{ }{ }| command to create attack edges. +Options to customise the appearance of arguments and attacks are described in Section~\ref{sec:options}. -\newpage -\noindent\texttt{attackstyle=}\opt{option} - - The \textsf{attackstyle} parameter accepts two options - \begin{align*} - \mathsf{standard} &\quad \text{(default) Standard style for the attack arrow tips.}\\ - \mathsf{large} &\quad \text{Alternative style, arrow tip is larger and sharper.}\\ - \end{align*} +\vspace{-0.2cm} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\subsection{The \texttt{af} Environment} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +The \argumentation package provides an environment for creating argumentation frameworks in \LaTeX-documents.\\ -\noindent\texttt{supportstyle=}\opt{option} +\noindent\cs{begin\{af\} [\oopt{options}]} + + \hspace{-1cm}\sopt{environment~contents} - The \textsf{supportstyle} parameter accepts three options - \begin{align*} - \mathsf{standard} &\quad \text{(default) Standard style for the attack arrow tips.}\\ - \mathsf{dashed} &\quad \text{Dashed arrow line, same tip.}\\ - \mathsf{double} &\quad \text{Double arrow line and large flat tip.}\\ - \end{align*} +\noindent\cs[-1.6cm]{end\{af\}}\\ -You can override the \textsf{argumentstyle}, \textsf{attackstyle} and \textsf{supportstyle} parameters and set a custom style via the following commands respectively. +\vspace{-0.2cm} +The \texttt{af} environment supports referencing. +For that add the command \cs[0cm]{label\{\sopt{label}\}} anywhere inside an \texttt{af} environment. +The AFs are automatically numbered in ascending order of occurrence. +The \sopt{label} allows you to reference the corresponding AF via \cs[0cm]{ref\{\sopt{label}\}} anywhere in the document. -\noindent -\verb|\setargumentstyle{|\opt{style}\verb|}| +If you want to create an AF that is excluded from the automatic numbering, the \argumentation package provides the \texttt{af*} version of the environment, which has the same functionality otherwise:\\ -\noindent -\verb|\setattackstyle{|\opt{style}\verb|}| +\noindent\cs{begin\{af*\} [\oopt{options}]} -\noindent -\verb|\setsupportstyle{|\opt{style}\verb|}| + \hspace{-1cm}\sopt{environment~contents} + +\noindent\cs[-1.6cm]{end\{af*\}}\\ -\begin{list}{}{\leftmargin=\parindent\rightmargin=0pt} - \item - where \opt{style} is a list of \tikzname style parameters. -\end{list} +\vspace{-0.2cm} +The \texttt{af} (and \texttt{af*}) environment also accepts the package style options (see Section~\ref{sec:options}). +Locally set style options override defaults and the values set globally with the package import. -\subsection{The \texttt{af} Environment} -The \argumentation package provides an environment for creating abstract argumentation frameworks and bipolar argumentation frameworks in \LaTeX-documents.\\ +In general, the \texttt{af} environment extends the \texttt{tikzpicture} environment, meaning all \tikzname commands and parameters can be used for the \texttt{af} environment. +The \argumentation package also provides the options \textsf{small} or \textsf{tiny} for the \texttt{af} environment to create smaller AFs. +This is especially useful for two-column layout documents. -\noindent -\verb|\begin{af}[|\opt{options}\verb|]| -\opt[green]{environment~content} - -\noindent -\verb|\end{af}| - -\begin{list}{}{\leftmargin=\parindent\rightmargin=0pt} - \item - The \argumentation package provides the \texttt{af} environment for creating abstract argumentation framework. - The \texttt{af} environment extends the \textsf{tikzpicture} environment, meaning all \tikzname commands can be used inside the \texttt{af} environment as well. - Furthermore, all options for the \textsf{tikzpicture} environment can be used for the \texttt{af} environment as well. - For instance, the option parameter \verb|node distance|, which is set to \verb|1cm| per default. - - If you want to create an argumentation framework with limited space available, you can provide one of the following predefined options for the environment. This is especially useful for two-column layout documents. - \begin{align*} - \mathsf{tiny} &\quad \text{\textsf{node distance} is set to $0.35cm$ and nodes are smaller.}\\ - \mathsf{small} &\quad \text{\textsf{node distance} is set to $0.55cm$ and nodes are smaller.}\\ - \end{align*} - - \begin{example} - Consider the two AFs in Figure~\ref{fig:mini_afs} created with the \textsf{small} and \textsf{tiny} option respectively. - \end{example} -\end{list} - -\begin{figure}[ht] +\begin{figure}[!ht] \begin{subfigure}{0.48\textwidth} \centering - \begin{af}[small] - \argument{args1}{a} - \argument[right=of args1]{args2}{b} - \argument[right=of args2]{args3}{c} - \argument[right=of args3]{args4}{d} - \argument[right=of args4]{args5}{e} - \argument[below=of args1]{args6}{f} - \argument[inactive,right=of args6]{args7}{g} - \argument[inactive,argin,right=of args7]{args8}{h} - \argument[right=of args8]{args9}{i} - \argument[right=of args9]{args10}{j} - - \afname[left of=args1,yshift=-0.5cm,xshift=-0.2cm]{cap}{\textbf{F:}} - - \selfattack{args1} - \dualattack[]{args1}{args6} - \dualattack[inactive]{args6}{args7} - \attack[inactive]{args8}{args7} - - \attack[inactive]{args7}{args2} - \attack[]{args3}{args2} - - \support[]{args4}{args3} - \support[]{args9}{args3} - - \attack[]{args4}{args5} - \attack[]{args5}{args10} - \attack[]{args10}{args9} - \attack[]{args9}{args4} + \begin{af}[small,namestyle=math] + \label{af:small} + \argument{a} + \argument[right=of a1]{b} + \argument[right=of a2]{c} + \argument[right=of a3]{d} + \argument[right=of a4]{e} + \argument[below=of a1]{f} + \argument[inactive,right=of a6]{g} + \argument[inactive,argin,right=of a7]{h} + \argument[right=of a8]{i} + \argument[right=of a9]{j} + + \afname[left of=a1,yshift=-0.55cm,xshift=-0.2cm]{\afref{af:small}} + + \selfattack{a1} + \dualattack[]{a1}{a6} + \dualattack[inactive]{a6}{a7} + \attack[inactive]{a8}{a7} + + \attack[inactive]{a7}{a2} + \attack[]{a3}{a2} + + \support[]{a4}{a3} + \support[]{a9}{a3} + + \attack[]{a4}{a5} + \attack[]{a5}{a10} + \attack[]{a10}{a9} + \attack[]{a9}{a4} \end{af} - \caption{An exemplary AF created with the \textsf{small} option set.} + \caption{An AF created with the \textsf{small} option set.} \label{fig:example_small} \end{subfigure} \hfill \begin{subfigure}{0.48\textwidth} \centering - \begin{af}[tiny] - \argument{args1}{a} - \argument[right=of args1]{args2}{b} - \argument[right=of args2]{args3}{c} - \argument[right=of args3]{args4}{d} - \argument[right=of args4]{args5}{e} - \argument[below=of args1]{args6}{f} - \argument[inactive,right=of args6]{args7}{g} - \argument[inactive,argin,right=of args7]{args8}{h} - \argument[right=of args8]{args9}{i} - \argument[right=of args9]{args10}{j} - - \afname[left of=args1,yshift=-0.5cm,xshift=-0.2cm]{cap}{\textbf{F:}} - - \selfattack{args1} - \dualattack[]{args1}{args6} - \dualattack[inactive]{args6}{args7} - \attack[inactive]{args8}{args7} - - \attack[inactive]{args7}{args2} - \attack[]{args3}{args2} - - \support[]{args4}{args3} - \support[]{args9}{args3} - - \attack[]{args4}{args5} - \attack[]{args5}{args10} - \attack[]{args10}{args9} - \attack[]{args9}{args4} + \begin{af}[tiny,namestyle=math] + \label{af:tiny} + \argument{a} + \argument[right=of a1]{b} + \argument[right=of a2]{c} + \argument[right=of a3]{d} + \argument[right=of a4]{e} + \argument[below=of a1]{f} + \argument[inactive,right=of a6]{g} + \argument[inactive,argin,right=of a7]{h} + \argument[right=of a8]{i} + \argument[right=of a9]{j} + + \afname[left of=a1,yshift=-0.4cm,xshift=-0.2cm]{\afref{af:tiny}} + + \selfattack{a1} + \dualattack[]{a1}{a6} + \dualattack[inactive]{a6}{a7} + \attack[inactive]{a8}{a7} + + \attack[inactive]{a7}{a2} + \attack[]{a3}{a2} + + \support[]{a4}{a3} + \support[]{a9}{a3} + + \attack[]{a4}{a5} + \attack[]{a5}{a10} + \attack[]{a10}{a9} + \attack[]{a9}{a4} \end{af} - \caption{An exemplary AF created with the \textsf{tiny} option set.} + \caption{An AF created with the \textsf{tiny} option set.} \label{fig:example_tiny} \end{subfigure} - \caption{Two AFs with smaller nodes, created by using the \textsf{small} and \textsf{tiny} options of the \texttt{af} environment.} + \caption{Argumentation frameworks using the \textsf{small} and \textsf{tiny} option of the \texttt{af} environment.} \label{fig:mini_afs} - \end{figure} -While the following commands are intended to be used inside the \texttt{af} environment, they can also be used inside the \textsf{tikzpicture} environment. -\subsection{Arguments} - Arguments can be created with the following command\\ +\newpage +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\subsection{Creating Arguments}\label{sec:arguments} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - \noindent - \verb|\argument{|\opt{id}\verb|}{|\opt{name}\verb|}| - - \begin{list}{}{\leftmargin=\parindent\rightmargin=0pt} - \item\opt{id}~ is the identifier of the new argument - \item\opt{name}~ is the displayed name of the argument - \item To create an argument, you must provide a unique identifier and the name to be displayed in the picture. - The \opt{id} of an argument is then referred to when creating attacks as well as for the relative positioning of other arguments. +Inside an \texttt{af} (or \texttt{af*}) environment, you can create argument nodes for the argumentation framework with the following command\\ - \end{list} +\noindent\cs{argument [\oopt{options}] (\popt{id}) \{\mopt{name}\} at (\popt{posX},\popt{posY})} -\subsubsection{Relative Positioning} - This package supports relative placement of the arguments via the \tikzname-library \textsf{positioning}. - The relative positioning information is provided as an optional parameter via\\ +\begin{description} + \item[\oopt{options}] (optional) a list of \tikzname style parameters and/or relative positioning information. + \item[\popt{id}] (optional) the identifier of the new argument. Per default, when omitted, arguments will automatically be assigned an identifier of the form: $a1, a2, a3,...$. + \item[\mopt{name}] the displayed name of the argument. + \item[\popt{posX},\popt{posY}] (optional) the coordinates where the argument is placed. Must be omitted if relative positioning is used. +\end{description} - \noindent - \verb|\argument[|\opt{dir}\verb|=of |\opt{arg\_id}\verb|]{|\opt{id}\verb|}{|\opt{name}\verb|}| - - \begin{list}{}{\leftmargin=\parindent\rightmargin=0pt} - \item\opt{dir}~ has to be one of: \emph{right}, \emph{left}, \emph{below} and \emph{above} - \item\opt{arg\_id}~ is the identifier of another argument - \item Additionally, you can adjust the horizontal/vertical position of an argument via the options \verb|xshift=|\opt{v} and \verb|yshift=|\opt{v}. - The value \opt{v} is the horizontal/vertical offset, e.\,g., \verb|5pt|, \verb|-3ex| or \verb|0.2cm|. - \end{list} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\subsubsection{Positioning}\label{sec:positioning} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +The \argumentation package also provides the ability to use \emph{relative positioning} instead of absolute positioning via coordinates. +For that, it relies on relative placement via the \tikzname-library \textsf{positioning}. +The relative positioning information is provided as an optional parameter via \texttt{[\oopt{options}]} as follows\\ +\noindent\cs{argument[\mopt{dir}=of \mopt{argId}]\{\mopt{name}\}} - \begin{example}~ +\begin{description} + \item[\mopt{dir}] The direction of placement relative to the argument \mopt{argId}. Typically one of: \textsf{above}, \textsf{right}, \textsf{left} or \textsf{below}. + \item[\mopt{argId}] The identifier of another argument. + \item[\mopt{name}] The displayed name of the argument. +\end{description} - \begin{verbatim} - \begin{af} - \argument{arg1}{a} - \argument[below=of arg1]{arg2}{b} - \argument[right=of arg1, yshift=-24pt,xshift=-8pt]{arg3}{c} - \argument[right=of arg3, xshift=-0.5cm]{arg4}{d} - \argument[right=of arg4, yshift=5ex]{arg4}{e} - \end{af} - \end{verbatim} +Additionally, you can adjust the horizontal/vertical position of an argument by adding \verb|xshift=|\mopt{v} or \verb|yshift=|\mopt{v} inside the \texttt{[...]}. +The value \mopt{v} is hereby the horizontal/vertical offset, e.\,g., \verb|-6.6ex| or \verb|1cm|. - \begin{center} - \begin{af} - \argument{arg1}{a} - \argument[below=of arg1]{arg2}{b} - \argument[right=of arg1, yshift=-24pt,xshift=-8pt]{arg3}{c} - \argument[right=of arg3, xshift=-0.5cm]{arg4}{d} - \argument[right=of arg4, yshift=5ex]{arg4}{e} +In the following, we list some useful style options for the \verb|\argument| command, provided by the\argumentation package: + +\vspace{-0.15cm} +\begin{table}[ht] + \centering + \begin{tabular}{ll} + \textsf{inactive} &\quad \text{The argument is displayed with grey outline and text.}\\ + \textsf{incomplete} &\quad \text{The argument is displayed with a dotted outline.}\\ + \textsf{invisible} &\quad \text{The argument node is completely transparent.}\\ + \textsf{accepted} &\quad \text{The argument is displayed with green background color.}\\ + \textsf{rejected} &\quad \text{The argument is displayed with red background color.}\\ + \textsf{undecided} &\quad \text{The argument is displayed with cyan background color.}\\ + \textsf{highlight} &\quad \text{The argument is displayed with yellow background color.}\\ + \end{tabular} + \caption{Some style options for the \cs[0cm]{argument} command (for exact definition see Section~\ref{sec:parameters}).} + \label{tab:argument_style} +\end{table} + +\vspace{-0.4cm} +\begin{example}~ + + \vspace{-0.2cm} + \begin{minipage}{0.3\textwidth} + \centering + \begin{af}[namestyle=math] + \argument{a} + \argument{b} at (1,0) + \argument[below=of a1,accepted](c){c} + \argument(x){d} at (1,-1) + \argument[right=of x,yshift=0.5cm]{e} + \argument[inactive]{f} at (2,-1.5) \end{af} - \end{center} - - \end{example} - -\subsubsection{Argument Styling} - Furthermore, you can provide optional parameters to adjust the style of the argument node. - For that you can use all \tikzname-style options and additionally the following predefined style parameters: - \begin{align*} - \mathsf{inactive} &\quad \text{The argument is displayed with grey outline and text.}\\ - \mathsf{incomplete} &\quad \text{The argument is displayed with a dotted outline.}\\ - \mathsf{invisible} &\quad \text{The argument node is completely transparent.}\\ - \mathsf{argin} &\quad \text{The argument is displayed with green background color.}\\ - \mathsf{argout} &\quad \text{The argument is displayed with red background color.}\\ - \mathsf{argundec} &\quad \text{The argument is displayed with cyan background color.}\\ - \end{align*} - - %Some relevant \tikzname style-parameters are - %\begin{align*} - %\textsf{circle} &\quad \text{the shape of the argument.}\\ - % \textsf{minimum~size=0.75cm} &\quad \text{the minimum size of the circle, to ensure consistent}\\ - % &\quad \text{argument size.}\\ - % \textsf{draw=black} &\quad \text{outline and text color of the argument.}\\ - %\textsf{thick} &\quad \text{the outline of the circle is rendered in \textsf{thick} mode.}\\ - % \textsf{fill=white} &\quad \text{the background color of the argument.}\\ - % \textsf{font=large} &\quad \text{the font size of the argument name.}\\ - %\textsf{text~centered} &\quad \text{positioning of the argument name inside the circle.}\\ - % \textsf{inner~sep=0} &\quad \text{inner margins of the circle, set to \textsf{0} to optimize space.} - %\end{align*} - - -\subsection{Attacks} - Attacks between two arguments can be created with the command\\ + \end{minipage}% + \begin{minipage}{0.7\textwidth} + \begin{small} + \begin{verbatim} + \begin{af}[namestyle=math] + \argument{a} + \argument{b} at (1,0) + \argument[below=of a1,accepted](c){c} + \argument(x){d} at (1,-1) + \argument[right=of x,yshift=0.5cm]{e} + \argument[inactive]{f} at (2,-1.5) + \end{af} + \end{verbatim} + \end{small} + \end{minipage} + \vspace{-0.3cm} +\end{example} - \noindent - \verb|\attack{|\opt{arg1}\verb|}{|\opt{arg2}\verb|}| - \begin{list}{}{\leftmargin=\parindent\rightmargin=0pt} - \item where \opt{arg1} and \opt{arg2} are the identifiers of two previously defined arguments. - \end{list} +\newpage +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\subsection{Creating Attacks}\label{sec:attacks} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +To create an directed attack between two argument nodes, you can use the following command. +The parameters \mopt{arg1} and \mopt{arg2} are the identifiers of the two arguments.\\ + +\noindent\cs{attack [\oopt{options}] \{\mopt{argId1}\} \{\mopt{argId2}\}} +\begin{description} + \item[\oopt{options}] (optional) a list of \tikzname style parameters. + \item[\mopt{arg1}] Identifier of the attacking argument. + \item[\mopt{arg2}] Identifier of the attacked argument.\\ +\end{description} + +To simplify creating special types of attacks, like bidirectional attacks or self-attacks, the following two commands are provided.\\ + +\noindent\cs{dualattack [\oopt{options}] \{\mopt{argId1}\} \{\mopt{argId2}\}} +\begin{description} + \item[\oopt{options}] (optional) a list of \tikzname style parameters. + \item[\mopt{arg1}] Identifier of the first argument. + \item[\mopt{arg2}] Identifier of the second argument. +\end{description} + +\noindent\cs{selfattack [\oopt{options}] \{\mopt{argId}\}} +\begin{description} + \item[\oopt{options}] (optional) a list of \tikzname style parameters. + \item[\mopt{arg1}] Identifier of the self-attacking argument. +\end{description} + +For \verb|\selfattack| you might want to specify the position of the attack loop. +For that, you should provide the start and end point of the attack-edge (as a degree from \verb|0| to \verb|360|) via the optional \tikzname-parameters \texttt{in=\oopt{degree1}} and \texttt{out=\oopt{degree2}}. +The default values are \texttt{in=0} and \texttt{out=60}.\\ + +If you want to attach a value to an attack edge, you may use the following command.\\ + +\noindent\cs{annotatedattack [\oopt{options}] \{\mopt{argId1}\} \{\mopt{argId2}\} \{\mopt{value}\}} +\begin{description} + \item[\oopt{options}] Optional \tikzname parameters. Must also include one of the following parameters to specify placement of the annotation relative to the attack arrow: \textsf{above}, \textsf{below}, \textsf{left}, \textsf{right}. + \item[\mopt{arg1}] Identifier of the attacking argument. + \item[\mopt{arg2}] Identifier of the attacked argument. + \item[\mopt{value}] The text that is annotated.\\ +\end{description} + +As an alternative to the standard attack arrow, you can use the following command.\\ + +\noindent\cs{support [\oopt{options}] \{\mopt{argId1}\} \{\mopt{argId2}\}} +\begin{description} + \item[\oopt{options}] (optional) a list of \tikzname style parameters. + \item[\mopt{arg1}] Identifier of the supporting argument. + \item[\mopt{arg2}] Identifier of the supported argument.\\ +\end{description} - -\subsubsection{Attack Styling} - To customize an attack you can provide additional optional parameters: - \begin{align*} - \mathsf{inactive} &\quad \text{The attack is displayed in grey.}\\ - \mathsf{incomplete} &\quad \text{The attack is displayed with a dotted line.}\\ - \mathsf{invisible} &\quad \text{The attack is completely transparent.}\\ - \mathsf{selfattack} &\quad \text{Use if source and target of the attack are the same node.}\\ - \mathsf{bend~right} &\quad \text{The attack arrow is bent to the right.}\\ +\newpage +Some useful style options for the attacks (and other edges) are listed below: + +\begin{table}[ht] + \centering + \begin{tabular}{ll} + \textsf{inactive} &\quad \text{The attack is displayed in grey.}\\ + \textsf{incomplete} &\quad \text{The attack is displayed with a dotted line.}\\ + \textsf{invisible} &\quad \text{The attack is completely transparent.}\\ + \textsf{selfattack} &\quad \text{Use if source and target of the attack are the same node.}\\ + \textsf{bend~right} &\quad \text{The attack arrow is bent to the right.}\\ &\quad \text{Can additionally provide the angle, e.\,g., \textsf{bend~right=40}.}\\ - \mathsf{bend~left} &\quad \text{The attack arrow is bent to the left. Can also provide an angle.}\\ - \end{align*} - - Of course, all \tikzname style parameters can be used here as well. + \textsf{bend~left} &\quad \text{The attack arrow is bent to the left. Can also provide an angle.} + \end{tabular} + \caption{Some useful style options for the \cs[0cm]{attack} (and related) commands. For the exact definition see Section~\ref{sec:parameters}.} + \label{tab:attack_style} +\end{table} - \begin{example}~ - \begin{verbatim} - \begin{af} - \argument{arg1}{a} - \argument[right=of arg1]{arg2}{b} - \argument[right=of arg2]{arg3}{c} - \argument[right=of arg3]{arg4}{d} - - \attack{arg1}{arg2} - \attack[bend right]{arg2}{arg3} - \attack[bend left=10,inactive]{arg3}{arg4} - \end{af} - \end{verbatim} +\begin{example}~ - \begin{center} - \begin{af} - \argument{arg1}{a} - \argument[right=of arg1]{arg2}{b} - \argument[right=of arg2]{arg3}{c} - \argument[right=of arg3]{arg4}{d} - - \attack{arg1}{arg2} - \attack[bend right]{arg2}{arg3} - \attack[bend left=10,inactive]{arg3}{arg4} + \begin{minipage}{0.3\textwidth} + \centering + \begin{af}[namestyle=math] + \argument{a} + \argument[right=of a1]{b} + \argument[below=of a1]{c} + \argument[right=of a3]{d} + + \attack{a3}{a1} + \selfattack[incomplete]{a3} + \dualattack{a1}{a2} + \annotatedattack[right]{a2}{a4}{$x$} + \support[bend left]{a4}{a3} \end{af} - \end{center} - \end{example} - - Additionally, there is a shortcut for creating a symmetric attack between two arguments with + \end{minipage}% + \begin{minipage}{0.7\textwidth} + \begin{verbatim} + \begin{af}[namestyle=math] + ... + + \attack{a3}{a1} + \selfattack[incomplete]{a3} + \dualattack{a1}{a2} + \annotatedattack[right]{a2}{a4}{$x$} + \support[bend left]{a4}{a3} + \end{af} + \end{verbatim} + \end{minipage} +\end{example} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\subsection{Beamer}\label{sec:beamer} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +If you want to reuse (parts of) previously created argumentation frameworks in some form, the \argumentation package provides some useful commands that can be enabled via the package option $\textsf{beamer}{=}\textsf{true}$. +While primarily intended for the use inside the $\textsf{beamer}$ document class when creating presentations, the commands also work in any other document class. +Each command required the label of some argumentation framework and a list of argument IDs of that framework and then creates a copy of that framework, with some changes depending on the command.\\ + +\noindent\cs{aflabeling \{\mopt{af-label}\} \{\mopt{argument list}\}} \noindent - \verb|\dualattack{|\opt{arg1}\verb|}{|\opt{arg2}\verb|}|\\ + Applies the style parameter \textsf{accepted} to all arguments in \mopt{argument list}, the parameter \textsf{rejected} to those attacked by arguments in \mopt{argument list} and \textsf{undecided} to all other arguments.\\ + +\noindent\cs{afextension \{\mopt{af-label}\} \{\mopt{argument list}\}} \noindent - and a shortcut for a self-attack for an argument with + Applies the style parameter \textsf{accepted} to all arguments in \mopt{argument list}.\\ + +\noindent\cs{afreduct \{\mopt{af-label}\} \{\mopt{argument list}\}} \noindent - \verb|\selfattack{|\opt{arg1}\verb|}|\\ + Applies the style parameter \textsf{inactive} to all arguments in \mopt{argument list} and those attacked by them. + All attacks involving at least one such argument also receive the parameter \textsf{inactive}.\\ + +\noindent\cs{afrestriction \{\mopt{af-label}\} \{\mopt{argument list}\}} \noindent - For both commands, you can use the same optional parameters as for the \verb|\attack| command. + Applies the style parameter \textsf{invisible} to all arguments \emph{not} in \mopt{argument list}. + All attacks involving at least one such argument also receive the parameter \textsf{invisible}.\\ - \begin{example}~ - \begin{verbatim} - \begin{af} - \argument{arg1}{a} - \argument[right=of arg1]{arg2}{b} + +See Figure~\ref{fig:beamer} for some examples. + +\begin{figure}[!ht] + %\setafstyle{small} + \setargumentstyle{argument thick} + %\centering + \begin{subfigure}{0.48\textwidth} + \centering + \begin{af*}[namestyle=monospace] + \aflabeling{af:example}{a1} + \end{af*} + \caption{Result of \cs[0cm]{aflabeling\{af:example\}\{a1\}}.} + \end{subfigure} + \begin{subfigure}{0.48\textwidth} + \centering + \begin{af*}[namestyle=monospace] + \afextension{af:example}{a1,a3} + \end{af*} + \caption{Result of \cs[0cm]{afextension\{af:example\}\{a1,a3\}}.} + \end{subfigure} + + \par\bigskip - \selfattack{arg1} - \dualattack{arg1}{arg2} - \end{af} - \end{verbatim} + \begin{subfigure}{0.48\textwidth} + \centering + \begin{af*}[namestyle=monospace] + \afreduct{af:example}{a2} + \end{af*} + \caption{Result of \cs[0cm]{afreduct\{af:example\}\{a2\}}.} + \end{subfigure} + \begin{subfigure}{0.48\textwidth} + \centering + \begin{af*}[namestyle=monospace] + \afrestriction{af:example}{a3,a4} + \end{af*} + \caption{Result of \cs[0cm]{afrestriction\{af:example\}\{a3,a4\}}.} + \end{subfigure} + \caption{Example usage of the four commands provided by the \textsf{beamer} package option.} + \label{fig:beamer} +\end{figure} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\subsection{Other Commands} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +The \argumentation package also provides some additional features. +The following command can be used to create a text annotation next to an argument node in the argumentation framework. +The annotation we be placed above the argument node, to adjust its position you should use \texttt{xshift} and \texttt{yshift}.\\ + +\noindent\cs{annotation [\oopt{options}] \{\mopt{argId}\} \{\mopt{value}\}} +\begin{description} + \item[\oopt{options}] Optional \tikzname style parameters. + \item[\mopt{argId}] Identifier of the argument. + \item[\mopt{value}] The annotation text.\\ +\end{description} + +The command \cs[0cm]{afname} can be used to create a simple text node inside the AF. +Mainly intended to add the name of the AF into the picture, you can generally put any text there. +The command behaves essentially exactly like the \cs[0cm]{argument} command.\\ + +\noindent\cs{afname [\oopt{options}] (\popt{id}) \{\mopt{name}\} at (\popt{posX}, \popt{posY})} +\begin{description} + \item[\oopt{options}] (optional) a list of \tikzname style parameters and/or relative positioning parameters. + \item[\popt{id}] (optional) Identifier of the text node. If omitted the identifier will be \textsf{caption}. + \item[\mopt{text}] Text to be displayed. + \item[\popt{posX},\popt{posY}] (optional) the coordinates for placement. Omit if using relative positioning. +\end{description} + +If you want to define your own style for arguments, attacks or supports, you may use one of the following commands to override the package-wide settings to your liking. +For that you may also reuse some of the pre-defined parameters of the \argumentation package (see Section~\ref{sec:parameters}).\\ + +\noindent\cs{setargumentstyle \{\mopt{style parameters}\}} - \begin{center} +\noindent\cs{setatackstyle \{\mopt{style parameters}\}} + +\noindent\cs{setsupportstyle \{\mopt{style parameters}\}}\\ + +Similarly, you can also use the following command to override the default settings of the \texttt{af} environment, e.\,g., the \texttt{node distance}.\\ + +\noindent\cs{setafstyle \{\mopt{style parameters}\}}\\ + +Finally, when using the $\textsf{argumentstyle}{=}\emph{colored}$ package option, you may use the following command to set the color scheme.\\ + +\noindent\cs{setargumentcolorscheme \{\mopt{outer color}\} \{\mopt{inner color}\}} + +\begin{example}~ + + \begin{minipage}{0.22\textwidth} + \centering + \setargumentstyle{argument thick,text=blue} + \setafstyle{node distance=0.75cm} \begin{af} - \argument{arg1}{a} - \argument[right=of arg1]{arg2}{b} - - \selfattack{arg2} - \dualattack{arg1}{arg2} + \label{af:8} + \argument{a} + \argument[right=of a1]{b} + \argument[below=of a1]{c} + \argument[right=of a3]{d} + + \annotation[yshift=-0.2cm]{a4}{$\top$} + \afname{$F_{\ref{af:8}}$} at (-1,-0.75) + + \attack{a1}{a2} + \dualattack{a1}{a3} + \attack{a4}{a3} \end{af} - \end{center} - \end{example} - + \end{minipage}% + \begin{minipage}{0.7\textwidth} + \begin{verbatim} + \setargumentstyle{argument thick,text=blue} + \setafstyle{node distance=0.75cm} + \begin{af}\label{af:8} + ... + + \annotation[yshift=-0.2cm]{a4}{$\top$} + \afname{$F_{\ref{af:8}}$} at (-1,-0.75) + \end{af} + \end{verbatim} + \end{minipage} +\end{example} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\subsubsection{Argumentation Macros}\label{sec:macros} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +To facilitate referencing argumentation frameworks and working with them in general, the \argumentation package provides some additional macros that can be enabled with the package option \textsf{macros=true}. +Most importantly, there is the macro \verb|\afref{|\sopt{label}\verb|}| which works like the \verb|ref| command but adds the reference number directly into the index of the \verb|\AF| symbol. +You may redefine any of the first four commands if you prefer a different naming scheme for AFs. + +\begin{table}[ht] + \centering + \begin{tabular}{lll} + \verb|\AF|&& \AF \\ + \verb|\arguments|&& \arguments\\ + \verb|\attacks|&&\attacks\\ + \verb|\AFcomplete|&&\AFcomplete\\ + \verb|\afref{af:example}|&&\afref{af:example}\\ + \verb|\fullafref{af:example}|&\qquad\qquad\qquad&\fullafref{af:example} + \end{tabular} + \caption{Macros provided by the package option \textsf{macros=true} and their respective output.} + \label{tab:macros} +\end{table} -\subsection{Supports} - You can create a support relation between two arguments with the command\\ +\newpage +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{Package Options}\label{sec:options} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +The \argumentation package comes with some package options to customize the appearance of the created argumentation frameworks as well as some additional features. +All style package options can both be set globally when importing the package and also locally for each \texttt{af} environment. +To import the \argumentation package, use the following command in the preamble of your \LaTeX-document:\\ - \noindent - \verb|\support{|\opt{arg1}\verb|}{|\opt{arg2}\verb|}| - - \begin{list}{}{\leftmargin=\parindent\rightmargin=0pt} - \item where \opt{arg1} and \opt{arg2} are the identifiers of two previously defined arguments. - The support arrow use the same tip as the attack arrows, but have a perpendicular mark to distinguish them from attacks. - Supports can be customized in the same way as attacks. - \end{list} - \begin{example}~ - \begin{verbatim} - \begin{af} - \argument{arg1}{a} - \argument[right=of arg1]{arg2}{b} - \argument[right=of arg2]{arg3}{c} - - \support{arg1}{arg2} - \support[bend right]{arg2}{arg3} - \end{af} - \end{verbatim} +\noindent\cs[0cm]{usepackage[\oopt{options}]\{argumentation\}}\\ - \begin{center} - \begin{af} - \argument{arg1}{a} - \argument[right=of arg1]{arg2}{b} - \argument[right=of arg2]{arg3}{c} +The following package options are currently available: + +\begin{description} + \item[argumentstyle] (default \texttt{standard}) Globally sets the appearance of the argument nodes. + The \argumentation package provides five options: \texttt{standard}, \texttt{large}, \texttt{thick}, \texttt{gray} and \texttt{colored}. + Detailed descriptions of these options can be found below. + + \item[attackstyle] (default \texttt{standard}) Globally sets the appearance of the attack edges. + The package comes with three available options: \texttt{standard}, \texttt{large} and \texttt{modern}. + Detailed descriptions of these options can be found below. + + \item[supportstyle] (default \texttt{standard}) Globally sets the appearance of the support edges. + The package comes with three available options: \texttt{standard}, \texttt{dashed} and \texttt{double}. + Detailed descriptions of these options can be found below. - \support{arg1}{arg2} - \support[bend right]{arg2}{arg3} - \end{af} - \end{center} - \end{example} + \item[namestyle] (default \texttt{none}) Sets the text formatting applied to the argument names in the document. + The package comes with five available options: \texttt{none}, \texttt{math}, \texttt{bold}, \texttt{monospace} and \texttt{monoemph}. + Detailed descriptions of these options can be found below. + + \item[indexing] (default \texttt{numeric}) Enables or disables automatic generation of \tikzname node-IDs for the created arguments. + The available options are: \texttt{none}, \texttt{numeric} and \texttt{alphabetic}. + Under the default numeric indexing the generated argument IDs are of the form $a1, a2, \dots$. + With alphabetic indexing the IDs will simply be letters: $a,b,\dots$. + If \texttt{none} is selected, no IDs will be generated and you are required to provide them for each argument via the parameter \texttt{(\popt{id})} of the \verb|\argument| command. + + \item[macros] Boolean (default \texttt{false}) When enabled provides additional macros for naming and referencing argumentation frameworks (see Table~\ref{tab:macros}). + \item[beamer] Boolean (default \texttt{false}) When enabled, provides the commands for recreating argumentations frameworks described in Section~\ref{sec:beamer}. +\end{description} -\subsection{Annotated Attacks} - Many extensions of the original abstract argumentation framework rely on attacks with an associated value. - This may, for instance, be probabilities in the case of probabilistic argumentation frameworks or numerical weights in the case of weighted argumentation frameworks. - These annotations can be added manually via \tikzname or via the following command\\ +In the following we give an overview of the different options for the style parameters that can be used to customise the created argumentation frameworks. +For the exact definitions of these parameters, refer to Section~\ref{sec:parameters}. - \noindent - \verb|\annotatedattack{|\opt{arg1}\verb|}{|\opt{arg2}\verb|}{|\opt{value}\verb|}| +\newpage +\paragraph{\sffamily argumentstyle=\mopt{option}} +\begin{align*} + \mathsf{standard} &\quad \text{Circular argument node with normal size argument name.}\\ + \mathsf{large} &\quad \text{Larger font of the argument name.}\\ + \mathsf{thick} &\quad \text{Thick black outline and normal size argument name.}\\ + \mathsf{gray} &\quad \text{Thick gray outline, light gray background.}\\ + \mathsf{colored} &\quad \text{Thick blue outline, light blue background.} +\end{align*} + +\begin{figure}[!h] + \begin{subfigure}{0.32\textwidth} + \centering + \begin{af}[argumentstyle=standard] + \argument{a} + \argument[right=of a1]{b} - \begin{list}{}{\leftmargin=\parindent\rightmargin=0pt} - \item where \opt{arg1} and \opt{arg2} are the identifiers of two previously defined arguments and \opt{value} is the number or string that should be annotated to the attack. - With this command, the annotation is placed above the attack arrow. - \end{list} - - \begin{example}~ - \begin{verbatim} - \begin{af} - \argument{arg1}{a} - \argument[right=of arg1]{arg2}{b} - \argument[right=of arg2]{arg3}{c} + \attack[]{a1}{a2} + \label{af:test} + \end{af} + \caption{\textsf{argumentstyle}=\textit{standard}} + \label{fig:argumentstyle_standard} + \end{subfigure} + \hfill + \begin{subfigure}{0.3\textwidth} + \centering + \begin{af}[argumentstyle=large] + \argument{a} + \argument[right=of a1]{b} - \annotatedattack{arg1}{arg2}{$x$} - \annotatedattack[bend right]{arg2}{arg3}{$0.6$} - \end{af} - \end{verbatim} - - \begin{center} - \begin{af} - \argument{arg1}{a} - \argument[right=of arg1]{arg2}{b} - \argument[right=of arg2]{arg3}{c} + \attack[]{a1}{a2} + \end{af} + \caption{\textsf{argumentstyle}=\textit{large}} + \label{fig:argumentstyle_large} + \end{subfigure} + \hfill + \begin{subfigure}{0.3\textwidth} + \centering + \begin{af}[argumentstyle=thick] + \argument{a} + \argument[right=of a1]{b} - \annotatedattack{arg1}{arg2}{$x$} - \annotatedattack[bend right]{arg2}{arg3}{$0.6$} - \end{af} - \end{center} - \end{example} + \attack[]{a1}{a2} + \end{af} + \caption{\textsf{argumentstyle}=\textit{thick}} + \label{fig:argumentstyle_thick} + \end{subfigure} -\subsection{Further Commands} - If you want to display an identifier for your argumentation framework in the picture, you can use the command\\ + \par\bigskip - \noindent - \verb|\afname{|\opt{id}\verb|}{|\opt{name}\verb|}| + \begin{subfigure}{0.49\textwidth} + \centering + \begin{af}[argumentstyle=gray] + \argument{a} + \argument[right=of a1]{b} + + \attack[]{a1}{a2} + \end{af} + \caption{\textsf{argumentstyle}=\textit{gray}} + \label{fig:argumentstyle_gray} + \end{subfigure} + \hfill + \begin{subfigure}{0.49\textwidth} + \centering + \begin{af}[argumentstyle=colored] + \argument{a} + \argument[right=of a1]{b} + + \attack[]{a1}{a2} + \end{af} + \caption{\textsf{argumentstyle}=\textit{colored}} + \label{fig:argumentstyle_colored} + \end{subfigure} + + \caption{Available options for \textsf{argumentstyle}.} + \label{fig:argumentstyle} +\end{figure} - \begin{list}{}{\leftmargin=\parindent\rightmargin=0pt} - \item where \opt{id} is an identifier for the created node and \opt{name} is the text displayed in the picture. - Additionally, positioning information can be provided via the optional parameters. - \end{list} - \noindent - To create an annotation, e.\,g., an acceptance condition or a weight, next to an argument, the following command can be used.\\ +\paragraph{\sffamily attackstyle=\mopt{option}} - \noindent - \verb|\annotation{|\opt{arg\_id}\verb|}{|\opt{text}\verb|}| +\begin{align*} + \mathsf{standard} &\quad \text{Standard 'stealth' \tikzname arrow tip.}\\ + \mathsf{large} &\quad \text{Arrow tip is larger and sharper.}\\ + \mathsf{modern} &\quad \text{\tikzname ModernCS arrow tip.} +\end{align*} + +\begin{figure}[!h] + \begin{subfigure}{0.32\textwidth} + \centering + \begin{af}[attackstyle=standard] + \argument{a} + \argument[right=of a1]{b} + + \attack[]{a1}{a2} + \end{af} + \caption{\textsf{attackstyle}=\textit{standard}} + \label{fig:attackstyle_standard} + \end{subfigure} + \hfill + \begin{subfigure}{0.3\textwidth} + \centering + \begin{af}[attackstyle=large] + \argument{a} + \argument[right=of a1]{b} + + \attack[]{a1}{a2} + \end{af} + \caption{\textsf{attackstyle}=\textit{large}} + \label{fig:attackstyle_large} + \end{subfigure} + \hfill + \begin{subfigure}{0.3\textwidth} + \centering + \begin{af}[attackstyle=modern] + \argument{a} + \argument[right=of a1]{b} + + \attack[]{a1}{a2} + \end{af} + \caption{\textsf{attackstyle}=\textit{modern}} + \label{fig:attackstyle_thick} + \end{subfigure} + \caption{Available options for \textsf{attackstyle}.} + \label{fig:attackstyle} +\end{figure} - \begin{list}{}{\leftmargin=\parindent\rightmargin=0pt} - \item where \opt{arg\_id} is the identifier of some argument and \opt{text} is the text to be displayed. - Additionally, positioning information, via \textsf{xshift} or \textsf{yshift}, can be provided via the optional parameters. - \end{list} - \begin{example}~ - \begin{verbatim} - \begin{af} - \argument{arg1}{a} - \argument[right=of arg1]{arg2}{b} - \afname[left=of arg1]{caption}{$F:$} - \annotation[yshift=-0.4cm,xshift=0.4cm]{arg2}{$\neg a$} +\paragraph{\sffamily supportstyle=\mopt{option}} - \attack{arg1}{arg2} - \end{af} - \end{verbatim} +\begin{align*} + \mathsf{standard} &\quad \text{Same tip as attack arrow, perpendicular mark on arrow line.}\\ + \mathsf{dashed} &\quad \text{Dashed arrow line and same tip as attack arrow.}\\ + \mathsf{double} &\quad \text{Double arrow line and large flat tip.} +\end{align*} + +\begin{figure}[!h] + \begin{subfigure}{0.32\textwidth} + \centering + \begin{af}[supportstyle=standard] + \argument{a} + \argument[right=of a1]{b} + + \support[]{a1}{a2} + \end{af} + \caption{\textsf{supportstyle}=\textit{standard}} + \label{fig:supportstyle_standard} + \end{subfigure} + \hfill + \begin{subfigure}{0.3\textwidth} + \centering + \begin{af}[supportstyle=dashed] + \argument{a} + \argument[right=of a1]{b} + + \support[]{a1}{a2} + \end{af} + \caption{\textsf{supportstyle}=\textit{dashed}} + \label{fig:supportstyle_dashed} + \end{subfigure} + \hfill + \begin{subfigure}{0.3\textwidth} + \centering + \begin{af}[supportstyle=double] + \argument{a} + \argument[right=of a1]{b} + + \support[]{a1}{a2} + \end{af} + \caption{\textsf{supportstyle}=\textit{double}} + \label{fig:supportstyle_double} + \end{subfigure} + \caption{Available options for \textsf{supportstyle}. Note that for \textit{standard} and \textit{dashed} the arrow tip of the selected \textsf{attackstyle} will be used.} + \label{fig:supportstyle} +\end{figure} - \begin{center} - \begin{af} - \argument{arg1}{a} - \argument[right=of arg1]{arg2}{b} - \afname[left=of arg1]{caption}{$F:$} - \annotation[yshift=-0.4cm,xshift=0.4cm]{arg2}{$\neg a$} + +\paragraph{\sffamily namestyle=\mopt{option}} + +\begin{align*} + \mathsf{none} &\quad \text{No effect applied to argument name.}\\ + \mathsf{math} &\quad \text{The argument name is rendered as $math$ text.}\\ + &\quad\quad \text{(name must be given without mathmode).}\\ + \mathsf{bold} &\quad \text{The argument name is rendered in $\boldsymbol{bold}$.}\\ + &\quad\quad \text{(name must be given without mathmode).}\\ + \mathsf{monospace} &\quad \text{The argument name is rendered in \texttt{monospace} font.}\\ + &\quad\quad \text{(name must be given without mathmode).}\\ + \mathsf{monoemph} &\quad \text{The argument name is rendered as {\ttfamily\emph{name}}.} +\end{align*} + +\begin{figure}[!ht] + \begin{subfigure}{0.32\textwidth} + \centering + \begin{af}[namestyle=none] + \argument{a} + \argument[right=of a1]{b} + + \attack[]{a1}{a2} + \end{af} + \caption{\textsf{namestyle}=\textit{none}} + \label{fig:namestyle_none} + \end{subfigure} + \hfill + \begin{subfigure}{0.32\textwidth} + \centering + \begin{af}[namestyle=math] + \argument{a} + \argument[right=of a1]{b} + + \attack[]{a1}{a2} + \end{af} + \caption{\textsf{namestyle}=\textit{math}} + \label{fig:namestyle_math} + \end{subfigure} + \hfill + \begin{subfigure}{0.32\textwidth} + \centering + \begin{af}[namestyle=bold] + \argument{a} + \argument[right=of a1]{b} + + \attack[]{a1}{a2} + \end{af} + \caption{\textsf{namestyle}=\textit{bold}} + \label{fig:namestyle_bold} + \end{subfigure} + \hfill + \par\bigskip + \begin{subfigure}{0.49\textwidth} + \centering + \begin{af}[namestyle=monospace] + \argument{a} + \argument[right=of a1]{b} + + \attack[]{a1}{a2} + \end{af} + \caption{\textsf{namestyle}=\textit{monospace}} + \label{fig:namestyle_monospace} + \end{subfigure} + \hfill + \begin{subfigure}{0.49\textwidth} + \centering + \begin{af}[namestyle=monoemph] + \argument{a} + \argument[right=of a1]{b} - \support{arg1}{arg2} - \end{af} - \end{center} - \end{example} + \attack[]{a1}{a2} + \end{af} + \caption{\textsf{namestyle}=\textit{monoemph}} + \label{fig:namestyle_monoemph} + \end{subfigure} + \caption{Available options for \textsf{namestyle}. You can of course apply any formatting yourself when using the default \textsf{namestyle}=\textit{none}.} + \label{fig:namestyle} +\end{figure} -%\section{Style Definitions} +\newpage +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{Style Parameter Reference}\label{sec:parameters} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +For reference, the style parameters provided by this package are listed below. +You may use or redefine them at your own discretion. +\begin{table}[ht] + \centering + \ttfamily + \begin{tabular}{l|l} + \toprule + \tikzname-keyword & style parameters \\ + \midrule + \textsf{argument size} & \emph{contains the currently selected argument size}\\ + \textsf{argument} & \emph{contains the currently selected argument style and size}\\ + \textsf{argument standard} & circle,inner sep=0,outer sep=0,draw=black\\ + \textsf{argument large} & circle,inner sep=0,outer sep=0,draw=black,font=\verb|\|large\\ + \textsf{argument thick} & circle,inner sep=0,outer sep=0,draw=black,line width=0.1em\\ + \textsf{argument gray} & argument thick,fill=gray!30,draw=gray!65,text=black!80\\ + \textsf{argument colored} & argument thick,fill=aigblue!40,draw=aigblue!80,text=black!80\\ + \midrule + \textsf{attack} & \emph{contains the currently selected attack style}\\ + \textsf{attack standard} & -\{stealth'\}\\ + \textsf{attack large} & -\{Stealth[scale=1.25]\}\\ + \textsf{attack modern} & -\{To[sharp,length=0.65ex,line width=0.05em]\}\\ + \textsf{selfattack} & loop,min distance=0.4em,in=0,out=60,looseness=4.5\\ + \midrule + \textsf{support} & \emph{contains the currently selected support style}\\ + \textsf{support standard} & attack,postaction=\{decorate,decoration=\{\dots\}\}\\ + \textsf{support dashed} & attack,densely dashed\\ + \textsf{support double} & -\{Classical TikZ Rightarrow\},double\\ + \midrule + \textsf{inactive} & fill=none,draw=gray!50,text=gray!60\\ + \textsf{incomplete} & densely dashed\\ + \textsf{accepted} & fill=green!40\\ + \textsf{rejected} & fill=red!40\\ + \textsf{undecided} & fill=cyan!40\\ + \textsf{highlight} & fill=aigyellow!60\\ + \textsf{invisible} & draw=none,fill=none,opacity=0.0\\ + \midrule + \textsf{standard} & node distance=6.6ex,argument size/.style={minimum size=4.5ex},\\ + & attack width/.style={line width=0.05em}\\ + \textsf{small} & node distance=3.5ex,argument size/.style={minimum size=3.4ex},\\ + & attack width/.style={line width=0.045em}\\ + \textsf{tiny} & node distance=2.3ex,argument size/.style={minimum size=2.6ex,}\\ + & attack width/.style={line width=0.03em},font=\verb|\small|\\ + \bottomrule + \end{tabular} + \caption{Reference list of \tikzname-style parameters provided by the \argumentation package.} + \label{tab:styles} + \end{table} \newpage -\section{Version History} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{Version History}\label{sec:history} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\subsection*{[v1.4 2024/10/31]} +\begin{itemize} + \item Added functions \verb|\aflabeling|, \verb|\afextension|, \verb|\afreduct| and \verb|\afrestriction| that recreate (parts of) previously created argumentation frameworks. Can be enabled via the package option \textsf{beamer=true}. + \item Added internal storage of arguments and attacks of an argumentation framework to enable further computations. + \item Added environment \verb|af*| for argumentation frameworks that are unlabeled/uncounted. + \item Added command \verb|\setargumentcolorscheme{ }{ }| to change color scheme of the \textsf{colored} argument style. + \item Added command \verb|\setafstyle{ }| to set global style options for the AFs. + \item Added optional parameter (\popt{value}) to \verb|\attack| command to add a label to the attack edge (undocumented for now). + \item Major revision of the documentation. + \item Various minor changes to internal functions, naming scheme and comments. +\end{itemize} +\subsection*{[v1.3 2024/09/25]} +\begin{itemize} + \item Added support for \verb|\label{ }| and \verb|\ref{ }| to \texttt{af} environment. + \item Added commands \verb|\AF|, \verb|\arguments|, \verb|\attacks| and \verb|\AFcomplete| to facilitate consistent naming of AFs. Have to be loaded with the package option \textsf{macros=true}. + \item Added commands \verb|\afref{ }| and \verb|\fullafref{ }| to reference AFs. + \item adjusted scaling of nodes and arrows for larger page sizes. + \item added new style options for arguments. + \item Various minor fixes and changes regarding the \textsf{namestyle} package option. +\end{itemize} -\subsection*{[v1.0 2023/11/05]} +\subsection*{[v1.2 2024/06/07]} \begin{itemize} - \item First Version. + \item Changed Syntax of \verb|\argument| command. The \textit{id} parameter is now given inside parenthesis instead of curly braces and is optional. + \item Added absolute positioning to \verb|\argument| command, like for \tikzname nodes. + \item Added package option $\textsf{indexing}$ to toggle automatic generation of identifiers for created argument nodes. Can be set to \textit{none}, or selected between \textit{alphabetic} and \textit{numeric} (default). + \item All package style options can now also be set locally in the \texttt{af} environment. + \item Adjusted \verb|\annotatedattack| to require position parameter. + \item Various minor bugfixes regarding the \textsf{namestyle} package option. + \item Added new argumentstyle \textsf{large}. \end{itemize} \subsection*{[v1.1 2023/12/03]} @@ -596,4 +1112,9 @@ While the following commands are intended to be used inside the \texttt{af} envi \item Updated and improved documentation. \end{itemize} -\end{document} +\subsection*{[v1.0 2023/11/05]} +\begin{itemize} + \item First Version. +\end{itemize} + +\end{document}
\ No newline at end of file diff --git a/graphics/pgf/contrib/argumentation/argumentation.sty b/graphics/pgf/contrib/argumentation/argumentation.sty index 7cd678de3c..6633c25a3a 100644 --- a/graphics/pgf/contrib/argumentation/argumentation.sty +++ b/graphics/pgf/contrib/argumentation/argumentation.sty @@ -1,109 +1,577 @@ \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{argumentation}[2023/12/03 Argumentation] +\ProvidesPackage{argumentation}[2024/11/03 Argumentation] % Author: Lars Bengel % E-Mail: lars.bengel@fernuni-hagen.de -% Version: 1.1 -% Date: 2023/12/03 +% Version: 1.4 +% Date: 2024/11/03 % License: LaTeX Project Public License 1.3c -%%%%%%%%%%% Package Requirements %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\RequirePackage{pgfopts} % For managing package options -\RequirePackage{tikz} % For drawing the argumentation frameworks -\usetikzlibrary{positioning} % For relative node positioning -\usetikzlibrary{arrows.meta} % For directed edges / attack arrows -\usetikzlibrary{arrows} % For directed edges / attack arrows -\usetikzlibrary{decorations.markings} % For creating the support edge markings -\newcommand{\argstyle}[1]{#1} % Defines the font style in which argument names are displayed +%%%%%%%%%%% Package Requirements %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\RequirePackage{amsbsy,amsmath} % Proper bold letters in math mode +\RequirePackage{pgfopts} % Managing package options +\RequirePackage{etoolbox} % Internal list handling +\RequirePackage{refcount} % Expandable ref-counter value +\RequirePackage{xspace} % Dynamic spaces after math commands +\RequirePackage{xcolor} % Defining colors +\RequirePackage{tikz} % Drawing the argumentation frameworks +\usetikzlibrary{positioning} % Relative node positioning +\usetikzlibrary{arrows.meta} % Directed edges / attack arrows +\usetikzlibrary{arrows} % Directed edges / attack arrows +\usetikzlibrary{decorations.markings} % Creating the support edge markings -%%%%%%%%%% Package Options %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\pgfkeys{/argumentation/argumentstyle/.is choice, - /argumentation/argumentstyle/standard/.code={\tikzset{argument/.style={circle,draw=black,inner sep=0,outer sep=0}}}, - /argumentation/argumentstyle/custom/.code={}, - /argumentation/argumentstyle=standard, + +%%%%%%%%%%% Package Style Definitions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%% Color definitions +\definecolor{aigyellow}{RGB}{210,149,81} % Highlight color +\definecolor{aigblue}{RGB}{0,76,151} % Node color + +%%% Argument Style Definitions +\tikzset{ + argument size/.style={}, % Size of argument nodes + argument/.style={}, % Base style for argument nodes + argument standard/.style={circle,draw=black,inner sep=0,outer sep=0}, % Standard argument style + argument large/.style={circle,draw=black,inner sep=0,outer sep=0, font=\large}, % Large argument style + argument thick/.style={circle,draw=black,inner sep=0,outer sep=0, line width=0.1em}, % Thick outline argument style + argument gray/.style={argument thick,fill=gray!30,draw=gray!65,text=black!80}, % Gray argument style + argument colored/.style={argument thick,fill=aigblue!40,draw=aigblue!80}, % Colored argument stlye +} + +%%% Attack/Support Edge Definitions +\tikzset{ + attack width/.style={}, % Width of attack arrows + attack/.style={}, % Base style for attack arrow + attack standard/.style={-{stealth'}}, % Standard attack arrow + attack large/.style={-{Stealth[scale=1.25]}}, % Larger arrow tip + attack modern/.style={-{To[sharp,length=0.65ex,line width=0.05em]}}, % Mordern rightarrow style tip + support/.style={}, % Base style for support + support standard/.style = {attack, postaction = {decorate,decoration={markings,mark=at position 0.36 with {\draw[-] (0,-0.1) -- (0.1,0.1);}}}}, % Standard support arrow + support dashed/.style={attack,densely dashed}, % Dashed Support arrow + support double/.style={-{Classical TikZ Rightarrow},double}, % double-line support arrow +} + +%%% Additional Style Parameters +\tikzset{ + selfattack/.style={loop,min distance=0.4em,in=0,out=60,looseness=4.5}, % Self-attack + inactive/.style={fill=none,draw=gray!50,text=gray!60}, % Inactive argument or edge (reduct) + incomplete/.style={densely dashed}, % incomplete argument or edge + accepted/.style={fill=green!40}, % Accepted argument (in) + rejected/.style={fill=red!40}, % Rejected argument (out) + undecided/.style={fill=cyan!40}, % Undecided Argument (undec) + highlight/.style={fill=aigyellow!60}, % Highlighted argument + caption/.style={draw=none}, % Caption or text + invisible/.style={draw=none,fill=none,opacity=0.0}, % Invisible argument or edge + annotation/.style={font=\small}, % Argument annotation + argin/.style={accepted}, + argout/.style={rejected}, + argundec/.style={undecided}, } -\pgfkeys{/argumentation/attackstyle/.is choice, - /argumentation/attackstyle/standard/.code={\tikzset{attack/.style={-{stealth'}}}}, - /argumentation/attackstyle/large/.code={\tikzset{attack/.style={-{Stealth[scale=1.25]}}}}, - /argumentation/attackstyle=standard, +%%% Style-Options for af environment +\pgfkeys{/tikz/.cd, + af/.style={}, % Base style for af + standard/.style={node distance=6.6ex,argument size/.style={minimum size=4.5ex},attack width/.style={line width=0.05em}}, % Standard size style for af + small/.style={node distance=3.5ex,argument size/.style={minimum size=3.4ex},attack width/.style={line width=0.045em},caption/.append style={font=\small}}, % Small size style for af + tiny/.style={node distance=2.3ex,argument size/.style={minimum size=2.6ex,font=\small},attack width/.style={line width=0.03em},caption/.append style={font=\small}}, % Tiny size style for af } -\pgfkeys{/argumentation/supportstyle/.is choice, - /argumentation/supportstyle/standard/.code={\tikzset{support/.style = {attack,postaction = {decorate,decoration={markings,mark=at position 0.36 with {\draw[-] (0,-0.1) -- (0.1,0.1);}}}}}}, - /argumentation/supportstyle/dashed/.code={\tikzset{support/.style = {attack,densely dashed}}}, - /argumentation/supportstyle/double/.code={\tikzstyle{support}=[-{Classical TikZ Rightarrow},double]}, - /argumentation/supportstyle=standard, + +%%%%%%%%%% Internal Utility Functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\makeatletter +\newif\ifmacros +\newif\ifbeamer +\newif\if@numericidx +\newif\if@alphaidx +\newif\if@insideaf + +%%% Defines the font style in which argument names are displayed +\newcommand{\@arg@style}[1]{#1} + +%%% Auxilliary command for splitting a given pair x,y into two macros +\def\@split@pair#1,#2\relax{% + \def\@attacker{#1}% + \def\@attacked{#2}% } +\makeatother -\pgfkeys{/argumentation/namestyle/.is choice, - /argumentation/namestyle/normal/.code={\relax}, - /argumentation/namestyle/italics/.code={\renewcommand{\argstyle}[1]{\emph{#1}}}, - /argumentation/namestyle/bold/.code={\renewcommand{\argstyle}[1]{\textbf{#1}}}, - /argumentation/namestyle/bolditalics/.code={\renewcommand{\argstyle}[1]{\emph{\textbf{#1}}}}, - /argumentation/namestyle/monospace/.code={\renewcommand{\argstyle}[1]{\texttt{#1}}}, - /argumentation/namestyle=normal, +%%%%%%%%%% Package Options %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%% Options for style of the argument node itself +\pgfkeys{/tikz/.cd, + argumentstyle/.is choice, + argumentstyle/standard/.code={\tikzset{argument/.style={argument standard,argument size}}}, + argumentstyle/large/.code={\tikzset{argument/.style={argument large,argument size}}}, + argumentstyle/thick/.code={\tikzset{argument/.style={argument thick,argument size}}}, + argumentstyle/gray/.code={\tikzset{argument/.style={argument gray,argument size}}}, + argumentstyle/colored/.code={\tikzset{argument/.style={argument colored,argument size}}}, +} +\pgfkeys{/argumentation/.cd, + .unknown/.code={}, + argumentstyle/.is choice, + argumentstyle/standard/.code={\tikzset{argument/.style={argument standard,argument size}}}, + argumentstyle/large/.code={\tikzset{argument/.style={argument large,argument size}}}, + argumentstyle/thick/.code={\tikzset{argument/.style={argument thick,argument size}}}, + argumentstyle/gray/.code={\tikzset{argument/.style={argument gray,argument size}}}, + argumentstyle/colored/.code={\tikzset{argument/.style={argument colored,argument size}}}, + argumentstyle=standard, +} + +%%% Options for the style of the attack edges +\pgfkeys{/tikz/.cd, + attackstyle/.is choice, + attackstyle/standard/.code={\tikzset{attack/.style={attack width,attack standard}}}, + attackstyle/large/.code={\tikzset{attack/.style={attack width,attack large}}}, + attackstyle/modern/.code={\tikzset{attack/.style={attack width,attack modern}}}, + attackstyle=standard, +} +\pgfkeys{/argumentation/.cd, + attackstyle/.is choice, + attackstyle/standard/.code={\tikzset{attack/.style={attack width,attack standard}}}, + attackstyle/large/.code={\tikzset{attack/.style={attack width,attack large}}}, + attackstyle/modern/.code={\tikzset{attack/.style={attack width,attack modern}}}, + attackstyle=standard, +} + +%%% Options for the style of the support edges +\pgfkeys{/tikz/.cd, + supportstyle/.is choice, + supportstyle/standard/.code={\tikzset{support/.style={support standard}}}, + supportstyle/dashed/.code={\tikzset{support/.style={support dashed}}}, + supportstyle/double/.code={\tikzset{support/.style={support double}}}, + supportstyle=standard, +} +\pgfkeys{/argumentation/.cd, + supportstyle/.is choice, + supportstyle/standard/.code={\tikzset{support/.style={support standard}}}, + supportstyle/dashed/.code={\tikzset{support/.style={support dashed}}}, + supportstyle/double/.code={\tikzset{support/.style={support double}}}, + supportstyle=standard, +} + +%%% Options for the automatic text formatting for the argument names +\makeatletter +\pgfkeys{/tikz/.cd, + namestyle/.is choice, + namestyle/none/.code={\renewcommand{\@arg@style}[1]{##1}}, + namestyle/math/.code={\renewcommand{\@arg@style}[1]{\ensuremath{##1}}}, + namestyle/bold/.code={\renewcommand{\@arg@style}[1]{\ensuremath{\boldsymbol{##1}}}}, + namestyle/monospace/.code={\renewcommand{\@arg@style}[1]{{\ttfamily##1}}}, + namestyle/monoemph/.code={\renewcommand{\@arg@style}[1]{{\ttfamily\itshape##1}}}, + namestyle=none, +} +\pgfkeys{/argumentation/.cd, + namestyle/.is choice, + namestyle/none/.code={\renewcommand{\@arg@style}[1]{##1}}, + namestyle/math/.code={\renewcommand{\@arg@style}[1]{\ensuremath{##1}}}, + namestyle/bold/.code={\renewcommand{\@arg@style}[1]{\ensuremath{\boldsymbol{##1}}}}, + namestyle/monospace/.code={\renewcommand{\@arg@style}[1]{{\ttfamily##1}}}, + namestyle/monoemph/.code={\renewcommand{\@arg@style}[1]{{\ttfamily\itshape##1}}}, + namestyle=none, +} + + +%%% Option for automatic indexing of arguments +\pgfkeys{/argumentation/.cd, + indexing/.is choice, + indexing/numeric/.code={\@numericidxtrue}, + indexing/alphabetic/.code={\@alphaidxtrue}, + indexing/none/.code={\@numericidxfalse\@alphaidxfalse}, + indexing/.default=numeric, + indexing=numeric, +} +\makeatother + +%%% Option for enabling additional macros +\pgfkeys{/argumentation/.cd, + macros/.is choice, + macros/true/.code={\macrostrue}, + macros/false/.code={\macrosfalse}, + macros/.default=true, + macros=false, +} + +%%% Option for enabling beamer functionality +\pgfkeys{/argumentation/.cd, + beamer/.is choice, + beamer/true/.code={\beamertrue}, + beamer/false/.code={\beamerfalse}, + beamer/.default=true, + beamer=false, } \ProcessPgfPackageOptions{/argumentation} -%%%%%%%%%% Package Content %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\tikzset{ % global predefined tikz-styles - argument size/.style={minimum size=0.7cm}, % Standard size of argument nodes - selfattack/.style={loop,min distance=2mm,in=0,out=60,looseness=5}, % Standard style for self-attacks - inactive/.style={draw=black!30, text=black!40}, % Make a node or edge inactive, i.e., greyed out - incomplete/.style={densely dashed}, % Style for displaying incomplete nodes or attacks - argin/.style={fill=green}, % Color an argument that is labelled in - argout/.style={fill=red}, % Color an argument that is labelled out - argundec/.style={fill=cyan}, % Color an argument that is labelled undecided - caption/.style={draw=none}, % Style for displaying AF name in Figure - invisible/.style={draw=none,text=black!0}, % Make a node or edge invisible - annotation/.style={above,font=\small}, -} - -% Commands for setting custom tikz-style parameters (experimental) -\newcommand{\setargumentstyle}[1]{\tikzset{argument/.style={#1}}} -\newcommand{\setattackstyle}[1]{\tikzset{attack/.style={#1}}} -\newcommand{\setsupportstyle}[1]{\tikzset{support/.style={#1}}} -%\newcommand{\setloopstyle}[1]{\tikzset{selfattack/.style={#1}}} -%\newcommand{\adjustargumentstyle}[1]{\tikzset{argument/.append style={#1}}} -%\newcommand{\adjustattackstyle}[1]{\tikzset{attack/.append style={#1}}} +%%%%%%%%%%%%%%% Arguments %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\makeatletter +% Internal counter for argument IDs +\newcounter{@argument} + +%%% Command for creating arguments +% #1 TikZ parameters (optional) +% #2 unique argument ID (optional) +% #3 argument display name +% #4 ignored +% #5 absolute positioning values (optional) +\NewDocumentCommand { \argument } {O{} d() m dat d()} {% + \stepcounter{@argument} + \IfNoValueTF {#2}{% + \if@alphaidx + \edef\@argid{\alph{@argument}} + \else\if@numericidx + \edef\@argid{a\arabic{@argument}} + \else + \PackageError{argumentation}{Missing argument ID}{Must either provide argument ID inside () or activate auto-indexing} + \fi\fi + }{% + \edef\@argid{#2} + } + \ifbeamer + \if@insideaf + \@make@argument{#1}{\@argid}{#3}{#4}{#5}{\arabic{af}} + \csname @af@\arabic{af}@arg@\@argid\endcsname{} + \else + \@create@argument{#1}{}{\@argid}{#3}{#5} + \fi + \else + \@create@argument{#1}{}{\@argid}{#3}{#5} + \fi +} + +%%% Auxilliary command for creating arguments +% #1 TikZ parameters (optional) +% #2 TikZ parameters (optional) +% #3 unique argument ID (optional) +% #4 argument display name +% #5 absolute positioning value (optional) +\NewDocumentCommand { \@create@argument } {mmmmm} {% + \IfNoValueTF {#5}{% + \node[argument size,argument,#1,#2](#3) {\@arg@style{#4}}; + }{% + \node[argument size,argument,#1,#2](#3) at (#5) {\@arg@style{#4}}; + } +} -%%%%%%%%%%%%%%% Environment %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\pgfkeys{ - /tikz/small/.style = {node distance=0.55cm,argument size/.style={minimum size=0.55cm},caption/.append style={font=\small}}, - /tikz/tiny/.style = {node distance=0.35cm,argument size/.style={font=\small, minimum size=0.4cm},caption/.append style={font=\small}}, +\ifbeamer +%%% Auxilliary command for creating unique argument macros +% #1 TikZ parameters +% #2 unique argument ID +% #3 argument display name +% #4 ignored +% #5 absolute positioning values +% #6 unique AF ID +\NewDocumentCommand { \@make@argument } {mmmmmm} {% + %\typeout{CREATED NEW MACRO @af@#6@arg#2} + \expandafter\listxadd\csname @arguments@#6\endcsname{#2} + \expandafter\global\expandafter\edef\csname @af@#6@arg@#2\endcsname##1{% + %\typeout{RECALLING MACRO @af@#6@arg#2} + \@create@argument{#1}{##1}{#2}{#3}{#5} + } } +\fi +\makeatother -\newenvironment{af}[1][]{ - \tikzpicture[#1] + +%%%%%%%%%%%%%%% Attacks & Support %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\makeatletter +%%% Command for creating attacks +% #1 TikZ parameters (optional) +% #2 attacking argument ID +% #3 attacked argument ID +% #4 annotation text (optional) +\NewDocumentCommand { \attack } {O{} m m d()} {% + \ifbeamer + \if@insideaf + \@make@attack{#1}{#2}{#3}{#4}{\arabic{af}} + \csname @af@\arabic{af}@att@#2#3\endcsname{} + \else + \@create@attack{#1}{}{#2}{#3}{#4} + \fi + \else + \@create@attack{#1}{}{#2}{#3}{#4} + \fi +} + +%%% Internal command for creating the attack in TikZ +% #1 TikZ parameters (optional) +% #2 TikZ parameters (optional) +% #3 attacking argument ID +% #4 attacked argument ID +% #5 annotation text +\NewDocumentCommand { \@create@attack } {mmmmm} {% + \IfNoValueTF{#5}{% + \path(#3) edge [attack,#1,#2] (#4); + }{% + \path(#3) edge [attack,#1,#2] node[annotation](p_#3_#4){#5} (#4); + } +} + +\ifbeamer +%%% Auxilliary command for creating unique attack macros +% #1 TikZ parameters +% #2 attacking argument ID +% #3 attacked argument ID +% #4 annotation text +% #5 unique AF ID +\NewDocumentCommand { \@make@attack } {mmmmm} {% + \expandafter\listgadd\csname @attacks@#5\endcsname{#2,#3} + \expandafter\global\expandafter\edef\csname @af@#5@att@#2#3\endcsname##1{ + \@create@attack{#1}{##1}{#2}{#3}{#4} + } +} +\fi + +%%% Self-attack edge +% #1 TikZ parameters (optional) +% #2 argument ID +\NewDocumentCommand { \selfattack } {O{} m} {% + \attack[selfattack,#1]{#2}{#2} +} + +%%% Symmetric attack edges between two arguments +% #1 TikZ parameters (optional) +% #2 first argument ID +% #3 second argument ID +\NewDocumentCommand { \dualattack } {O{} m m} {% + \attack[bend right,#1]{#2}{#3} + \attack[bend right,#1]{#3}{#2} +} + +%%% Create attack edge with value (DEPRECATED as of v1.4) +% #1 TikZ parameters (optional) +% #2 attacking argument ID +% #3 attacked argument ID +% #4 annotation text +\NewDocumentCommand{ \annotatedattack } {O{}mmm} {% + \attack[#1]{#2}{#3}(#4) +} + +%%% Support edge +% #1 TikZ parameters (optional) +% #2 supporting argument ID +% #3 supported argument ID +\NewDocumentCommand { \support } {O{} m m} {% + \path(#2) edge [support=0.35,#1] (#3); +} +\makeatother + + +%%%%%%%%%%%%%%% AF Environment %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\newcounter{af} + +%%% Uncounted version of the environment +\makeatletter +\NewDocumentEnvironment {af*} {O{}} {% + \setcounter{@argument}{0} + \pgfkeys{/argumentation/.cd, #1} + \tikzpicture[standard,af,#1] }{% \endtikzpicture } -%%%%%%%%%%%%%%%% Commands %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%% Standard version of af environment +\NewDocumentEnvironment {af} {O{}} {% + \refstepcounter{af} + \ifbeamer + \global\expandafter\def\csname @arguments@\arabic{af}\endcsname{} + \global\expandafter\def\csname @attacks@\arabic{af}\endcsname{} + \fi + \@insideaftrue + \begin{af*}[#1] +}{% + \end{af*} + \@insideaffalse +} +\makeatother + + +%%%%%%%%%%%%%%%% Additional Commands %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%% Definitions for referencing +\ifmacros + \providecommand{\AF}{\ensuremath{F}\xspace} % AF abbreviation + \providecommand{\arguments}{\ensuremath{A}\xspace} % Set of arguments + \providecommand{\attacks}{\ensuremath{R}\xspace} % Set of attacks + \providecommand{\AFcomplete}{\ensuremath{\AF = (\arguments, \attacks)}\xspace} % Full AF + \newcommand{\afref}[1]{\ensuremath{\AF_{\ref{#1}}}\xspace} % Reference an AF + \newcommand{\fullafref}[1]{\ensuremath{\afref{#1} = (\arguments_{\ref{#1}}, \attacks_{\ref{#1}})}\xspace} % Full AF with reference +\fi + +%%% Creates a node displaying the name of the AF +\NewDocumentCommand { \afname } { O{} D(){caption} m dat d()} {% + \IfNoValueTF {#5}{% + \node[caption,#1](#2){#3}; + }{% + \node[caption,#1](#2) at (#5) {#3}; + } +} + +%%% Create a text annotation next to another node +\NewDocumentCommand { \annotation } {O{} m m} {% + \node[annotation,above of=#2,#1](an_#2){#3}; +} + +%%% Commands for setting custom tikz-style parameters +\newcommand{\setafstyle}[1]{\tikzset{af/.style={#1}}} +\newcommand{\setargumentcolorscheme}[2]{\tikzset{argument colored/.style={argument thick,fill=#2,draw=#1}}} +\newcommand{\setargumentstyle}[1]{\tikzset{argument/.style={argument size,#1}}} +\newcommand{\setattackstyle}[1]{\tikzset{attack/.style={attack width,#1}}} +\newcommand{\setsupportstyle}[1]{\tikzset{support/.style={#1}}} +\newcommand{\setannotationstyle}[1]{\tikzset{annotation/.style={#1}}} + + +%%%%%%%%%%%% Beamer Commands %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\ifbeamer +\makeatletter +%%% Prints an extension of an AF for the given list of accepted arguments +% #1 unique ID of an AF +% #2 a comma-separated list of argument IDs +\NewDocumentCommand { \afextension } {mm} {% + \@prepare@af{#1} + % Collect accepted arguments in list + \forcsvlist{\listeadd\@accepted@arguments}{#2} + + % render the af with the given information + \@render@af{\@afid}{accepted}{}{}{}{} +} + +%%% Prints a labeling of an AF for the given list of accepted arguments +% #1 unique ID of an AF +% #2 a comma-separated list of argument IDs +\NewDocumentCommand { \aflabeling } {mm} {% + \@prepare@af{#1} + % Collect accepted arguments in list + \forcsvlist{\listeadd\@accepted@arguments}{#2} + + % Collect rejected arguments in list + \renewcommand*{\do}[1]{ + \expandafter\@split@pair##1\relax + \xifinlist{\@attacker}{\@accepted@arguments}{% + \listeadd\@rejected@arguments{\@attacked} + }{} + } + \dolistcsloop{@attacks@\@afid} -% Creates a node displaying the name of the AF -\newcommand{\afname}[3][]{\node[caption,#1](#2){#3};} + % Collect undecided arguments in list + \renewcommand*{\do}[1]{ + \xifinlist{##1}{\@accepted@arguments}{}{ + \xifinlist{##1}{\@rejected@arguments}{}{ + \listadd\@undecided@arguments{##1} + } + } + } + \dolistcsloop{@arguments@\@afid} -\newcommand{\annotation}[3][]{\node[annotation,above of=#2,#1](an_#2){#3};} + % render the af with the given information + \@render@af{\@afid}{accepted}{rejected}{undecided}{}{} +} -% Creates an argument node -\newcommand{\argument}[3][]{\node[argument,argument size,#1](#2){\argstyle{#3}};} +%%% Prints the reduct of an AF wrt. the given list of arguments +% #1 unique ID of an AF +% #2 a comma-separated list of argument IDs +\NewDocumentCommand { \afreduct } {mm} {% + \@prepare@af{#1} + \forcsvlist{\listeadd\@accepted@arguments}{#2} + \forcsvlist{\listeadd\@inactive@arguments}{#2} + + \renewcommand*{\do}[1]{ + \expandafter\@split@pair##1\relax + \xifinlist{\@attacker}{\@accepted@arguments}{% + \listeadd\@rejected@arguments{\@attacked} + \listeadd\@inactive@arguments{\@attacked} + }{} + } + \dolistcsloop{@attacks@\@afid} + + \@render@af{\@afid}{inactive}{inactive}{}{inactive}{} +} -% Creates an attack edge -\newcommand{\attack}[3][]{\path(#2) edge [attack,#1] (#3);} +%%% Prints an AF restricted to the given list of arguments +% #1 unique ID of an AF +% #2 a comma-separated list of argument IDs +\NewDocumentCommand { \afrestriction } {mm} {% + \@prepare@af{#1} + \forcsvlist{\listeadd\@accepted@arguments}{#2} -% Creates a self-attack -\newcommand{\selfattack}[2][]{\path(#2) edge [attack,selfattack,#1] (#2);} + \renewcommand*{\do}[1]{% + \ifinlist{##1}{\@accepted@arguments}{}{ + \listeadd\@inactive@arguments{##1} + } + } + \dolistcsloop{@arguments@\@afid} -% Creates two symmetric attack edges between two arguments -\newcommand{\dualattack}[3][]{\path(#2) edge [attack, bend right,#1] (#3);\path(#3) edge [attack, bend right,#1] (#2);} + \@render@af{\@afid}{}{}{}{invisible}{} +} + +%%% Prepares recreation of an AF. Parses AF label to letter ID and defines lists to partition arguments +% #1 unique ID of the AF to recreate +\NewDocumentCommand { \@prepare@af } {m} {% + \edef\@afid{\getrefnumber{#1}} + \def\@accepted@arguments{} + \def\@rejected@arguments{} + \def\@undecided@arguments{} + \def\@inactive@arguments{} +} -% Creates a weighted attack -\newcommand{\annotatedattack}[4][]{\path(#2) edge [attack,#1] node[annotation](p_#2_#3){#4} (#3);} +%%% name of innermost af environment +\def\@afenvname{af*} -% Creates a support edge between two arguments -\newcommand{\support}[3][]{\path(#2) edge [support=0.35,#1] (#3);} +%%% Prepares recreation of AF by making sure we are inside an af environment +% #1 unique ID of the AF to recreate +% #2-#6 style parameters (see \@render@afdo) +\NewDocumentCommand { \@render@af } {mmmmmm} {% + \ifx\@currenvir\@afenvname + \@render@afdo{#1}{#2}{#3}{#4}{#5}{#6} + \else + \begin{af*} + \@render@afdo{#1}{#2}{#3}{#4}{#5}{#6} + \end{af*} + \fi +} + +%%% Recreates an AF +%% Utilises lists defined in \@prepare@af +% #1 unique ID of the AF to recreate +% #2 style of accepted arguments +% #3 style of rejected arguments +% #4 style of undecided arguments +% #5 style of inactive arguments/attacks +% #6 style of normal attacks +\NewDocumentCommand { \@render@afdo } {mmmmmm} {% + % handle arguments for rendering + \renewcommand*{\do}[1]{% + \ifinlist{##1}{\@accepted@arguments}{ + \csname @af@#1@arg@##1\endcsname{#2} + }{% + \ifinlist{##1}{\@rejected@arguments}{% + \csname @af@#1@arg@##1\endcsname{#3} + }{% + \ifinlist{##1}{\@undecided@arguments}{% + \csname @af@#1@arg@##1\endcsname{#4} + }{% + \ifinlist{##1}{\@inactive@arguments}{% + \csname @af@#1@arg@##1\endcsname{#5} + }{% + \csname @af@#1@arg@##1\endcsname{} + } + } + } + } + } + \dolistcsloop{@arguments@#1} + + % handle attack rendering + \renewcommand*{\do}[1]{% + \expandafter\@split@pair##1\relax + \xifinlist{\@attacker}{\@inactive@arguments}{% + \csname @af@#1@att@\@attacker\@attacked\endcsname{#5,fill=none} + }{% + \xifinlist{\@attacked}{\@inactive@arguments}{% + \csname @af@#1@att@\@attacker\@attacked\endcsname{#5,fill=none} + }{% + \csname @af@#1@att@\@attacker\@attacked\endcsname{#6} + } + } + } + \dolistcsloop{@attacks@#1} +} +\makeatother +\fi
\ No newline at end of file diff --git a/graphics/pgf/contrib/circuitikz/doc/changelog.tex b/graphics/pgf/contrib/circuitikz/doc/changelog.tex index d9594dc1fc..19a5cd01f3 100644 --- a/graphics/pgf/contrib/circuitikz/doc/changelog.tex +++ b/graphics/pgf/contrib/circuitikz/doc/changelog.tex @@ -5,6 +5,67 @@ full list of changes. \begin{itemize} \item + Version 1.7.0 (2024-08-03) + + There are no big changes here, but the change to the resistor code + (maybe one of the most used by the package) well deserves a minor + version bump. A couple of new components, and several minor fixes. + + \begin{itemize} + \tightlist + \item + New component: new kind of current tap (suggested by + \href{https://github.com/circuitikz/circuitikz/issues/807}{EEpchi + and Dr4UX on GitHub}) + \item + New arrow tip \texttt{Jack\ Tap} to help drawing jack connectors + (suggested by + \href{https://github.com/circuitikz/circuitikz/issues/806}{Anisio + Rogerio Braga}) + \item + Change the drawing of the thermocouple (suggested by + \href{https://github.com/circuitikz/circuitikz/issues/811}{Dr4UX on + GitHub}) + \item + Change and enhancement to the drawing of the American resistors + (triggered by + \href{https://github.com/circuitikz/circuitikz/issues/814}{Dr4UX on + GitHub}), fixing a long-standing small asymmetry that nobody noticed + \item + Minor adjustment for joins in \texttt{viscoe} component + \item + Minor additions (\texttt{rectjoinfill}) and fixes in documentation + \end{itemize} +\item + Version 1.6.9 (2024-05-25) + + Several new components and a bug fix for a nasty long-standing bug + about switching diode types. + + \begin{itemize} + \tightlist + \item + Added a Relais-Shape (contributed by + \href{https://github.com/circuitikz/circuitikz/pull/795}{Jakob + ``DraUX'' on GitHub} + \item + Added a center tap anchor for tube filament (suggested by + \href{https://github.com/circuitikz/circuitikz/issues/792}{user + bogger33 on GitHub}) + \item + Added neon lamps (two versions, suggested by + \href{https://github.com/circuitikz/circuitikz/issues/793}{user + bogger33 on GitHub}) + \item + Added a configurable spark gap (suggested by + \href{https://github.com/circuitikz/circuitikz/issues/800}{user + bogger33 on GitHub}) + \item + Fix a long-standing problem when + \href{https://github.com/circuitikz/circuitikz/issues/794}{(locally) + switching diode type} + \end{itemize} +\item Version 1.6.8 (2024-05-05) Several new components, more anchors, a bit of documentation @@ -466,7 +527,7 @@ full list of changes. Robustify some shapes: do not let arrows option pass to the inner drawing (see \href{https://tex.stackexchange.com/a/632084/38080}{here} and - \href{https://matrix.to/\#/!NuxCISwYQJuyWwNsEI:matrix.org/$vQO6luq1F66LJ79dERmaqKI46qMBcjStqYCPi725uZE?via=matrix.org&via=2krueger.de&via=im.f3l.de}{here}) + \href{https://matrix.to/\#/!NuxCISwYQJuyWwNsEI:matrix.org/$vQO6luq1F66LJ79dERmaqKI46qMBcjStqYCPi725uZE?via=matrix.org\&via=2krueger.de\&via=im.f3l.de}{here}) \item Add warning about global draw options in the manual \item diff --git a/graphics/pgf/contrib/circuitikz/doc/circuitikz-context.pdf b/graphics/pgf/contrib/circuitikz/doc/circuitikz-context.pdf Binary files differindex d4f9bc36a2..032692e01f 100644 --- a/graphics/pgf/contrib/circuitikz/doc/circuitikz-context.pdf +++ b/graphics/pgf/contrib/circuitikz/doc/circuitikz-context.pdf diff --git a/graphics/pgf/contrib/circuitikz/doc/circuitikzmanual.pdf b/graphics/pgf/contrib/circuitikz/doc/circuitikzmanual.pdf Binary files differindex 9d1e52303d..023c265d6e 100644 --- a/graphics/pgf/contrib/circuitikz/doc/circuitikzmanual.pdf +++ b/graphics/pgf/contrib/circuitikz/doc/circuitikzmanual.pdf diff --git a/graphics/pgf/contrib/circuitikz/doc/circuitikzmanual.tex b/graphics/pgf/contrib/circuitikz/doc/circuitikzmanual.tex index 20a79f3d68..e0fa8032b1 100644 --- a/graphics/pgf/contrib/circuitikz/doc/circuitikzmanual.tex +++ b/graphics/pgf/contrib/circuitikz/doc/circuitikzmanual.tex @@ -2200,6 +2200,83 @@ For the \texttt{photoresistor} and the two ``flavors'' of the light-dependent re \end{tikzpicture} \end{LTXexample} +\begingroup % protect changes to resistors +\newcommand\showjoin[1]{% +\begin{tikzpicture}[scale=4, transform shape] + \clip (0.2,-0.05) rectangle (0.6,0.3); + \draw[ultra thick] (0,0) to[R, resistors/thickness=#1] ++(2,0); +\end{tikzpicture}% +} +\newcommand{\splat}{\begin{center}\ttfamily\scriptsize\begin{tabular}{cccc} + \showjoin{1}&\showjoin{2}&\showjoin{3}&\showjoin{4}\\ + thickness=1 & thickness=2 & thickness=3 & thickness=4 \\ + \end{tabular}\end{center}% +} +\newcommand{\rdivider}[1]{\begin{tikzpicture} + \ctikzset{resistors/thickness=#1} + \draw (0,0) node[ground]{} to[V] ++(0,2) to[R] ++(2,0) + to[R] ++(0,-2) to[short,-*] (0,0); +\end{tikzpicture}\qquad} +\newcommand{\divsplat}[1]{#1\par + \begin{center} + \rdivider{1}\rdivider{2}\rdivider{3}\rdivider{4} +\end{center}} + +\paragraph{Details of American (``zig-zag'') resistors.\label{sec:zigzag-details}} American (zig-zag) resistors have a little joining problem\footnote{Noticed by \href{https://github.com/circuitikz/circuitikz/issues/811}{user Dr4UX on GitHub} and later \href{https://github.com/circuitikz/circuitikz/discussions/814}{discussed here}.} with the leading wires if the thickness is greater than two. In the following drawing you can see the problem when the thickness grows from 1 to 4. + +\splat + +Since \texttt{v1.7.0}, one possibility to correct the problem is to change the type of joining of the zig-zag line, using the key \texttt{resistors/zigzag join}, which is a command that by default is void. For example, the following effect is obtained by using + +\begin{lstlisting}[numbers=none] +\ctikzset{resistors/zigzag hook/.code={\pgfsetroundcap}} +\end{lstlisting} +{\ctikzset{resistors/zigzag hook/.code={\pgfsetroundcap}} +\splat} + +or you can even go full rounded + +\begin{lstlisting}[numbers=none] +\ctikzset{resistors/zigzag hook/.code={\pgfsetroundcap\pgfsetroundjoin}} +\end{lstlisting} +{\ctikzset{resistors/zigzag hook/.code={\pgfsetroundcap\pgfsetroundjoin}} +\splat} + +Another possibility is to add a little horizontal ``stub'' to the shape, with the key \texttt{resistors/zigzag stub} (default \texttt{0}), which will add a first part which is a continuation of the wire: +\begin{lstlisting}[numbers=none] +\ctikzset{resistors/zigzag stub=0.05}% this is relative to the resistor's length +\end{lstlisting} +{\ctikzset{resistors/zigzag stub=0.05} +\splat} + +\dots or you can just combine all of them as you prefer. With the standard join/cap options, the look of the resistors for thickness from 1 to 4 is shown here: + +\ctikzset{american} +\divsplat{Standard drawing of American resistors} +\divsplat{With a 5\% stub: \ctikzset{resistors/zigzag stub=0.05}} +\divsplat{With a 20\% stub: \ctikzset{resistors/zigzag stub=0.2}} + + +\bigskip +Finally, here is the detailed shape with thickness 2 (red=0, blue=0.05, green=0.2), magnified six times: + +\vspace*{2cm}% this vspace fences are needed because the transform canvas wreak havoc with the bbox +\begin{tikzpicture}[transform canvas={scale=6}] + \ctikzset{resistors/zigzag stub=0} + \draw[red] (0,0.2) to [resistor, resistors/thickness=4] ++(2,0); + \ctikzset{resistors/zigzag stub=0.05} + \draw[blue] (0,0.1) to [resistor, resistors/thickness=4] ++(2,0); + \ctikzset{resistors/zigzag stub=0.2} + \draw[green] (0,0) to [resistor, resistors/thickness=4] ++(2,0); + % \draw [very thin](1,0.5) -- (1,-0.5); + % \draw [very thin](0,0) -- ++(2,0); + % \draw [very thin](0,0.1) -- ++(2,0); + % \draw [very thin](0,0.2) -- ++(2,0); +\end{tikzpicture} +\vspace*{2cm} + +\endgroup % changes to resistors stops here + \subsection{Capacitors and inductors: dynamical bipoles} @@ -2852,9 +2929,9 @@ Notice that the size of the double-circle sources (and of the triple-circle one) \end{LTXexample} \paragraph{Waveform symbols.} -Internal symbols of sinusoidal, triangular and square sources are drawn with the same line thickness as the component by default. You can modify this by setting the key \texttt{sources/symbols/thickness} for independent sources and the corresponding \texttt{csource/...} for dependent ones. The value used here is relative to the component (i.e. the circle) value. +Internal symbols of sinusoidal, triangular and square sources are drawn with the same line thickness as the component by default. You can modify this by setting the key \texttt{sources/symbol/thickness} for independent sources and the corresponding \texttt{csource/...} for dependent ones. The value used here is relative to the component (i.e. the circle) value. -Normally the symbol is oriented in the same direction as the line, and rotate rigidly with the component; you can change this orientation using the key \texttt{sources/symbols/rotate} or \texttt{csource/...}. The default value is \texttt{90} which correspond to the ``line'' direction (remember, path components are defined as horizontal ones). +Normally the symbol is oriented in the same direction as the line, and rotate rigidly with the component; you can change this orientation using the key \texttt{sources/symbol/rotate} or \texttt{csource/...}. The default value is \texttt{90} which correspond to the ``line'' direction (remember, path components are defined as horizontal ones). If instead of an angle value you use \texttt{auto}, the symbol will be rotated so that the waveform is always vertical, similar to what happens in instruments: \begin{LTXexample}[varwidth=true] @@ -3019,12 +3096,44 @@ Sometimes it is better to use a shape for instruments which is very different fr \footnotetext{Suggested by \texttt{@nobrl} on GitHub} \circuitdescbip{iloop}{Current loop (symbolic)}{}(left/135/0.2, right/45/0.2, center/-90/0.3, i/30/0.4) \circuitdescbip{iloop2}{Current loop (real)}{}(left/135/0.2, right/-45/0.2, center/-90/0.3, i+/135/0.4, i-/45/0.4) + \circuitdescbip{currtap}{Current tap (probe)\footnotemark}{}(tap/-90/0.2) + \footnotetext{Suggested by \href{https://github.com/circuitikz/circuitikz/issues/807}{user EEpchi on GitHub}.} \end{groupdesc} \subsubsection{Instruments customizations}\label{sec:tweak-instruments} You can change the scale of all the instruments (including the current loops) by setting the key \texttt{instruments/scale} to something different from the default \texttt{1.0}. +\paragraph{Current probes.} +You can change the inner dot in several way, by changing the following keys under the \verb!\ctikzset! key \texttt{bipoles/currtap}: +\begin{center} + \begin{tabular}{>{\ttfamily}l>{\ttfamily}lp{0.7\linewidth}} + \toprule + parameter & default & description \\ + \midrule + thickness & default & Set the thickness of the line (\texttt{default}: do not change the class thickness) \\ + color & default & stroke color: \texttt{default} is the same as the component \\ + dash & default & dash pattern: none means solid line, default means keep the global pattern\footnotemark \\ + fill & default & fill the inner dot; \texttt{default} means use the wire color, \texttt{none} do not fill, other keys must be a valid color \\ + dot size& 0.5 & relative size of the inner dot \\ + \bottomrule + \end{tabular} + \footnotetext{Follows the syntax of the pattern sequence \texttt{\textbackslash pgfsetdash} --- see \TikZ{} manual for details; phase is always zero. Basically you pass pairs of dash-length -- blank-length dimensions, see the examples.} +\end{center} + +\begin{LTXexample}[varwidth=true, basicstyle=\small\ttfamily] +\begin{circuitikz} + \draw (0,2) to[currtap, bipoles/currtap/fill=none, *-] + ++(2,0) to[currtap, bipoles/currtap/.cd, + fill=yellow, color=red, thickness=3, + dash={{1.14pt}{2pt}}] ++(2,0); + \draw (0,0) to[currtap=I, *-, name=ct] ++(2,0) + to[currtap, -*, name=ct2, + bipoles/currtap/dot size=0.3] ++(2,0); + \draw (ct.tap) -- ++(0,-1) (ct2.tap) -- ++(0,-1); +\end{circuitikz} +\end{LTXexample} + \paragraph{Oscilloscope waveform.} You can change the waveform shown in the oscilloscope ``screen''\footnote{Suggested by \href{https://tex.stackexchange.com/q/595062/38080}{Mario Tafur on TeX.SX}}. To change it, you just set the key \texttt{bipoles/oscope/waveform} to one of the available shape. You have available the shapes in the following list (the default is \texttt{ramps}): \begin{LTXexample}[pos=t, basicstyle=\small\ttfamily] @@ -3266,6 +3375,8 @@ Here you'll find bipoles that are not easily grouped in the categories above. \circuitdescbip*{fuse}{Fuse}{} \circuitdescbip*{afuse}{Asymmetric fuse}{asymmetric fuse} \circuitdescbip{wfuse}{``wiggly'' fuse}{wiggly fuse}()[left/110/0.2, right/70/0.2] + \circuitdescbip*{relais}{Relais\footnotemark}{} + \footnotetext{Contributed by \href{https://github.com/circuitikz/circuitikz/pull/795}{Jakob «DraUX»}} \circuitdescbip{squid}{Squid}{} \circuitdescbip{barrier}{Barrier}{} \circuitdescbip{openbarrier}{Open barrier}{} @@ -3287,6 +3398,13 @@ If otherwise \texttt{americangfsurgearrester} option is active (or the style \te \begin{groupdesc} \circuitdescbip*{lamp}{Lamp}{} \circuitdescbip*{bulb}{Bulb}{} + \circuitdescbip*{neonlampcc}{Neon lamp\footnotemark\ (double cathode style)}{} + \footnotetext{The neon lamps have been added in \texttt{v1.6.9} thanks to a suggestion by \href{https://github.com/circuitikz/circuitikz/issues/793}{user bogger33 on GitHub}.} + \circuitdescbip*{neonlampac}{Neon lamp (anode and cathode style)}{} + \circuitdescbip*{sparkgap}{Spark gap\footnotemark (unenclosed)}{} + \footnotetext{The spark gap has been added in \texttt{v1.6.9} thanks to a suggestion by \href{https://github.com/circuitikz/circuitikz/issues/800}{user bogger33 on GitHub}.} + \circuitdescbip*[sparkgap]{sparkgap, sparkgap/circle}{Spark gap}{} + \circuitdescbip*[sparkgap]{sparkgap, sparkgap/dot, sparkgap/circle}{Spark gap (gas filled)}{} \circuitdescbip*{loudspeaker}{loudspeaker}{}( north/90/0.4, ne/45/0.4, east/0/0.4, se/-45/0.4, south/-90/0.4, sw/-135/0.4, west/180/0.4, nw/135/0.4, left/135/0.2, right/45/0.2, center/-135/0.2) \circuitdescbip*{mic}{mic}{}( north/90/0.4, east/0/0.4, south/-90/0.4, west/180/0.4, left/135/0.2, right/45/0.2, center/-135/0.2) \circuitdescbip*{tlmic}{tail-less mic\footnotemark}{}( north/90/0.4, east/0/0.4, south/-90/0.4, west/180/0.4, left/135/0.2, right/45/0.2, center/-135/0.2) @@ -3324,9 +3442,9 @@ You have two types of microphones; \texttt{mic} has protruding connection and \t \subsubsection{Miscellaneous element customization}\label{sec:tweak-misc} -You can change the scale of all the miscellaneous elements by setting the key \texttt{misc/scale} to something different from the default \texttt{1.0}. +You can change the scale of all the miscellaneous elements by setting the key \texttt{misc/scale} to something different from the default \texttt{1.0}; relative thickness can be controlled with \texttt{misc/thickness}. -\paragraph{Wiggly fuses} can have (or not have) poles; you can switch between the two forms by setting to \texttt{true} or \texttt{false} (default \texttt{true}) the key \texttt{bipoles/wfuse/dots}; if they have poles, you can choose any of the pole shapes with the key \texttt{bipoles/wfuse/shape}. +\paragraph{Wiggly fuses.} Wiggly fuses can have (or not have) poles; you can switch between the two forms by setting to \texttt{true} or \texttt{false} (default \texttt{true}) the key \texttt{bipoles/wfuse/dots}; if they have poles, you can choose any of the pole shapes with the key \texttt{bipoles/wfuse/shape}. The pole nodes are named \texttt{-left} and \texttt{-right} so that you can access their borders. \begin{LTXexample}[varwidth=true, basicstyle=\small\ttfamily] @@ -3342,6 +3460,30 @@ The pole nodes are named \texttt{-left} and \texttt{-right} so that you can acce \end{circuitikz} \end{LTXexample} +\paragraph{Neon lamps.} Neon lamp ``dot'' size is the same as the size of poles (\texttt{circ} and \texttt{ocirc}), and they can be changed locally: +\begin{LTXexample}[varwidth=true, basicstyle=\small\ttfamily] +\begin{tikzpicture} + \draw (0,0) to[neonlampcc, nodes width=0.03] ++(2,0) + to[neonlampac, misc/thickness=3] ++(2,0); +\end{tikzpicture} +\end{LTXexample} + +\paragraph{Spark gap.} The \texttt{sparkgap} component is similar to the (American) surge arrester, but it's more configurable; it will render bare (unenclosed) by default, but you can add a (fillable) enclosure with the key \texttt{sparkgap/circle} and a dot with \texttt{sparkgap/dot} (they are boolean keys, false by default). +Moreover, the arrows are configurable like other arrows in the package (see~\ref{sec:tunablearrows}) using the \texttt{sparkgap end arrow} key (default \texttt{Triangle[scale=2]}). The gap is tunable with \texttt{sparkgap/gap} (default \texttt{0.05}). +\begin{LTXexample}[varwidth=true, basicstyle=\small\ttfamily] +\begin{tikzpicture} + \draw (0,2) to[sparkgap, l=gap\textsubscript{1}] ++(2,0) + to[sparkgap, sparkgap/circle, + sparkgap/dot, l=S2] ++(2,0); + \ctikzset{sparkgap end arrow={Kite[scale=1.5]}} + \draw (0,0) to[sparkgap, l=S3] ++(2,0) + to[sparkgap, l=S4, sparkgap/circle, + sparkgap/gap=0.15] ++(2,0); +\end{tikzpicture} +\end{LTXexample} +As in neon lamps, the dot (if activated by the key \texttt{sparkgap/dot}) follows the size of poles and can be changed locally. + + \subsection{Multiple wires (buses)} These are simple drawings to indicate multiple wires. @@ -3445,9 +3587,9 @@ While the horizontal line will be drawn with the current path values, you can ch \end{circuitikz} \end{LTXexample} -\subsection{Arrows}\label{sec:arrows} +\subsection{Arrows (fake and real)}\label{sec:arrows} -These are pseudo-arrows used in lot of places in the packages (for transistors, flows, currents, and so on). The first three arrows are magnified by a factor~3 in the boxes below; for the \texttt{trarrow}, the anchor \texttt{tip} is exactly on the tip and \texttt{btip} is slightly receded. +The main arrow shapes in \Circuitikz{} are really shapes, used as pseudo-arrows in lot of places in the packages (for transistors, flows, currents, and so on). The first three arrows are magnified by a factor~3 in the boxes below; for the \texttt{trarrow}, the anchor \texttt{tip} is exactly on the tip and \texttt{btip} is slightly receded. \begin{groupdesc} \circuitdesc[3]{currarrow}{Arrow for current and voltage}{}(center/0/0.2) @@ -3507,6 +3649,30 @@ The arrows are the ones set with the keys \texttt{tunable start arrow} and \text Notice also the need to force a transparency group if you want a semitransparent arrow. +\subsubsection{Arrow tips}\label{sec:arrow-tips} + +In addition to the pseudo-arrows, \Circuitikz{} also adds a couple of ``real'' arrow tips. +The package automatically loads the \texttt{arrows.meta} \TikZ{} library but \emph{not} the deprecated \texttt{arrows} library; in the first versions of the package it used quite a lot the \texttt{latex'} tip, which is not available anymore. To maintain the backward compatibility, the `latexslim` tip has been added, and used by default in several components. This is an old-style arrow tip, with no customization possible. + +The other tip is \texttt{Jack Tap}\footnote{Added after a suggestion from \href{https://github.com/circuitikz/circuitikz/issues/806}{Anisio Rogerio Braga} on GitHub}, which is mainly used to build jack connectors (see section~\ref{sec:jacks}). This is a new-style arrow tip, and accepts the parameter \texttt{length} (default \texttt{0.3 cm}), \texttt{width} (default \texttt{0.15 cm}), and the boolean \texttt{swap}. + + +\begin{LTXexample}[varwidth=true] +\begin{circuitikz} + \draw (0,.25) (0,0) edge[-latexslim] ++(1,0) + ++(0, -0.5) edge[-{Jack Tap[swap]}] ++(1,0) + ++(0, -0.5) edge[-Jack Tap] ++(1,0) + ++(0, -0.5) edge[-{Jack Tap[fill=cyan]}] ++(1,0) + ++(0, -0.5) edge[-{Jack Tap[width=.3cm,fill]}]++(1,0) + ++(0, -0.5) edge[-{Jack Tap[width=.3cm,line join=round, + line cap=round]}, thick] ++(1,0) + ++(0, -0.5) edge[^-^f] ++(1,0) + ++(0, -0.5) edge[vf-v] ++(1,0); +\end{circuitikz} +\end{LTXexample} +You can also have a filled version, by adding the key \texttt{fill} (without arguments\footnote{This usage of the \texttt{fill} key in arrow tips will be added to \TikZ{} in version \texttt{3.1.11}, see \href{https://github.com/pgf-tikz/pgf/pull/1352}{this PR by Henri Menke}; \Circuitikz{} will add it to older versions.}) or \texttt{fill=color} if you want a color different from the stroke ones, and they accept the \texttt{line join} and \texttt{line cap} as most of the standard \TikZ{} arrows. +As you can see, the normal and swapped \texttt{Jack Tap} tips have the shorthands \texttt{v} and \verb|^| (and \texttt{vf} and \verb|^f| for their filled counterparts). Notice that the tips are automatically reversed when they are at the \emph{start} of the path. + \subsection{Terminal shapes}\label{sec:terminals} These are the so-called ``bipole nodes'' shapes, or poles (see section~\ref{sec:bipole-nodes}). These nodes are always filled; the ``open'' versions (starting with an \texttt{o}) are by default filled with the color specified by the key \texttt{open nodes fill} (by default \texttt{white}), but you can override locally it with the \texttt{fill} parameter. @@ -3520,6 +3686,12 @@ These are the so-called ``bipole nodes'' shapes, or poles (see section~\ref{sec: \circuitdesc{osquarepole}{Open square-shape terminal}{} \end{groupdesc} +This is not a pole, but it's used to "fill" nasty corners (look closer, and see ~\ref{sec:line-joins}). + +\begin{groupdesc} + \circuitdesc{rectjoinfill}{Filling square with line width size}{} +\end{groupdesc} + Since version 0.9.0, ``bipole nodes'' shapes have all the standard geographical anchors, so you can do things like these: \begin{LTXexample}[varwidth=true] @@ -3639,6 +3811,33 @@ You can use the \texttt{plug center} anchor to add the IEC ``multiplier'': \end{circuitikz} \end{LTXexample} +\subsubsection{Jack connectors}\label{sec:jacks} + +There are \emph{lots} of different jack connectors symbols --- see the \href{https://github.com/circuitikz/circuitikz/issues/806}{discussion here} for examples. So instead of creating a monster component, it has been decided to add elements to simplify the drawing of such connectors. The first (and for now only) such element is the \texttt{Jack Tap} arrow tip (see section~\ref{sec:arrow-tips}) with its shorthands \texttt{v} and \verb|^|. + +For example, and audio jack can be drawn like this: + +\begin{LTXexample}[pos=t, varwidth=true] +% drawing based on one by Anisio Rogerio Braga +% https://github.com/circuitikz/circuitikz/issues/806 +\newcommand\dx{1.5}\newcommand\dy{1} +\begin{circuitikz} + \draw[-v] (0,\dy/3*4) to[short, o-] ++(\dx,0); + \draw[-Triangle] (0,\dy) node[ocirc]{} -| ++(\dx/3,\dy/3); + \draw[-Triangle] (0,\dy/3*2) node[ocirc]{} -| ++(\dx/3,-\dy/3); + \draw[-^] (0,\dy/3) to[short, o-] ++(2*\dx/3,0); + \draw (0,0.0) to[short, o-] ++(1.75*\dx,0) rectangle ++(0.2,4*\dy/3); +\end{circuitikz}\qquad\qquad +%---% audio jack with an inserted plug +\begin{circuitikz} + \draw[-v] (0,\dy/3*4) to[short, o-] ++(\dx,0.2); + \draw[-Triangle] (0,\dy) node[ocirc]{} -| ++(\dx/3,\dy/3); + \draw[-Triangle] (0,\dy/3*2) node[ocirc]{} -| ++(\dx/3,-\dy/3); + \draw[-^] (0,\dy/3) to[short, o-] ++(2*\dx/3,-0.2); + \draw (0,0.0) to[short, o-] ++(1.75*\dx,0) rectangle ++(0.2,4*\dy/3); +\end{circuitikz} +\end{LTXexample} + \subsection{Block diagram components} \noindent Contributed by Stefan Erhardt. @@ -4827,7 +5026,8 @@ Note that the \verb|diodetube| is used as component name to avoid clashes with t Normally, the filament is not drawn. If you want a filament, put the \verb|filament| option in the node description: \begin{groupdesc} - \circuitdesc*{diodetube,filament}{Tube Diode}{}(anode/90/0.2, filament 1/-135/0.2, filament 2/-45/0.2 ) + \circuitdesc*{diodetube,filament}{Tube Diode\footnotemark}{}(anode/90/0.2, filament 1/-90/0.4, filament 2/-45/0.2, filament center/0/0.5 ) + \footnotetext{The \texttt{filament center} anchor has been added in \texttt{v1.6.9} thanks to a suggestion by \href{https://github.com/circuitikz/circuitikz/issues/792}{user bogger33 on GitHub}.} \end{groupdesc} Sometimes, you don't want the cathode to be drawn (but you do want the filament). Use the \verb|nocathode| option in the node description: @@ -4869,18 +5069,27 @@ fully configurable, and the attributes are described below: \verb|tubes/filament angle| & \verb|15| & angle from the centerpoint \\ \end{tabular} -Conventionally, the model of the tube is indicated at the \verb|east| anchor: +Conventionally, the model of the tube is indicated at the \verb|east| anchor, and you can access filament anchors if you need them: -\begin{LTXexample}[varwidth] -\ctikzset{tubes/width=1.4} -\ctikzset{tubes/height=1} -\begin{circuitikz} -\draw (0,0) node[triode] (Tri) {}; -\draw (Tri.east) node[right] {12AX7}; -\end{circuitikz} +\begin{LTXexample}[varwidth=true, basicstyle=\small\ttfamily] +\ctikzset{tubes/width=1.4, tubes/height=1} +\begin{circuitikz} + \draw (0,2) node[triode, filament] (Tri) {}; + \draw (Tri.east) node[right] {12AX7}; + \ctikzset{tubes/filament angle=40, + tubes/filament distance=0.2} + \draw (0,0) node[triode, filament] (Pent) {}; + \draw (Pent.east) node[right] {BOH}; + \path (Tri.filament 1) node[red,ocirc]{}; + \path (Pent.filament 1) node[red,ocirc]{}; + \path (Tri.filament center) node[blue,ocirc]{}; + \draw (Pent.filament center) -- ++(0,-1) node[tlground]{}; + \end{circuitikz} \end{LTXexample} + + Example triode amplifier: \begin{lstlisting} @@ -6553,7 +6762,7 @@ with the parameter \texttt{number inputs} : \end{circuitikz} \end{LTXexample} -You can suppress the drawing of the logic ports input leads by using the boolean key \texttt{logic ports draw input leads} (default \texttt{true}) or, locally, with the style \texttt{no inputs leads} (that can be reverted with \texttt{input leads}), like in the following example. The anchors do not change and you have to take responsibility to make the connection to the ``border''-anchors. +You can suppress the drawing of the logic ports input leads by using the boolean key \texttt{logic ports draw input leads} (default \texttt{true}) or, locally, with the style \texttt{no input leads} (that can be reverted with \texttt{input leads}), like in the following example. The anchors do not change and you have to take responsibility to make the connection to the ``border''-anchors. \begin{LTXexample}[varwidth=true] \begin{circuitikz} @@ -7393,9 +7602,9 @@ External pins' length is controlled by the key \texttt{multipoles/external pins like in chips. In addition, like in logic ports, you can suppress the drawing of the leads by using the boolean key \texttt{logic ports draw input leads} (default \texttt{true}) or, locally, -with the style \texttt{no inputs leads} (that can be reverted with +with the style \texttt{no input leads} (that can be reverted with \texttt{input leads}). -The main difference between setting \texttt{external pins width} to \texttt{0} or using \texttt{no inputs lead} is that in the first case the normal pin anchors and the border anchors will coincide, and in the second case they will not move and stay where they should have been if the leads were drawn. +The main difference between setting \texttt{external pins width} to \texttt{0} or using \texttt{no input lead} is that in the first case the normal pin anchors and the border anchors will coincide, and in the second case they will not move and stay where they should have been if the leads were drawn. You can draw only selected pins and leave out the rest by setting the keys \texttt{multipoles/draw only \emph{side} pins} and the corresponding style @@ -7797,7 +8006,7 @@ You can, if you want, avoid printing the numbers of the pin with \texttt{hide nu \end{LTXexample} -Also, you can suppress the drawing of the pins, by using the style \texttt{no inputs leads} (that can be reverted with \texttt{input leads}). The main difference between setting \texttt{external pins width} to \texttt{0} or using \texttt{no inputs lead} is that in the first case the normal pin anchors and the border anchors will coincide, and in the second case they will not move and stay where they should have been if the leads were drawn. +Also, you can suppress the drawing of the pins, by using the style \texttt{no input leads} (that can be reverted with \texttt{input leads}). The main difference between setting \texttt{external pins width} to \texttt{0} or using \texttt{no input lead} is that in the first case the normal pin anchors and the border anchors will coincide, and in the second case they will not move and stay where they should have been if the leads were drawn. For special use you can suppress the orientation mark with the key \texttt{no topmark} (default \texttt{topmark}). diff --git a/graphics/pgf/contrib/circuitikz/tex/circuitikz.sty b/graphics/pgf/contrib/circuitikz/tex/circuitikz.sty index 69ce1bbddd..4f5ce00a0f 100644 --- a/graphics/pgf/contrib/circuitikz/tex/circuitikz.sty +++ b/graphics/pgf/contrib/circuitikz/tex/circuitikz.sty @@ -16,8 +16,8 @@ \providecommand\DeclareRelease[3]{} \providecommand\DeclareCurrentRelease[2]{} -\def\pgfcircversion{1.6.8} -\def\pgfcircversiondate{2024/05/05} +\def\pgfcircversion{1.7.0} +\def\pgfcircversiondate{2024/08/03} \DeclareRelease{0.4}{2012/12/20}{circuitikz-0.4-body.tex} \DeclareRelease{v0.4}{2012/12/20}{circuitikz-0.4-body.tex} diff --git a/graphics/pgf/contrib/circuitikz/tex/pgfcirc.defines.tex b/graphics/pgf/contrib/circuitikz/tex/pgfcirc.defines.tex index 943745bf7a..cca735bf1e 100644 --- a/graphics/pgf/contrib/circuitikz/tex/pgfcirc.defines.tex +++ b/graphics/pgf/contrib/circuitikz/tex/pgfcirc.defines.tex @@ -266,6 +266,58 @@ % %>>> +%% check loaded TikZ/pgf version %<<<` +% +% parse the release date, thanks to Skillmon +% https://github.com/pgf-tikz/pgf/issues/1348#issuecomment-2231681032 +% date can be yyyy-mm-dd or (older TikZ) yyyy/mm/dd +\begingroup + \pgfutil@protected\def\parsedate#1% + {% + \afterassignment\parsedate@month + \pgf@circ@count@a=#1\relax + } + \pgfutil@protected\def\parsedate@month#1% + {% + \afterassignment\parsedate@day + \pgf@circ@count@b=% + } + \pgfutil@protected\def\parsedate@day#1% + {% + \afterassignment\parsedate@cleanup + \pgf@circ@count@c=% + } + \def\parsedate@cleanup#1\relax{}% + \parsedate{\pgfrevisiondate}% + \xdef\ctikz@@pgfyear{\the\pgf@circ@count@a}% + \xdef\ctikz@@pgfmonth{\the\pgf@circ@count@b}% + \xdef\ctikz@@pgfday{\the\pgf@circ@count@c}% +\endgroup +% The following code thanks to Skillmon: +% https://tex.stackexchange.com/a/722570/38080 +% modified by romano to check the date +\def\ctikz@@ifpgfafter@auxi#1#2% + {% + \ifnum#1 + \ctikz@@ifpgfafter@auxii{#2}% + \fi + } +\def\ctikz@@ifpgfafter@auxii#1\fi#2\ctikz@@ifpgfafter#3{\fi#1} +\def\ctikz@@ifpgfafter#1-#2-#3#% + {% + \ctikz@@ifpgfafter@auxi{\ctikz@@pgfyear>#1}\pgfutil@firstoftwo + \ctikz@@ifpgfafter@auxi{\ctikz@@pgfyear<#1}\pgfutil@secondoftwo + \ctikz@@ifpgfafter@auxi{\ctikz@@pgfmonth>#2}\pgfutil@firstoftwo + \ctikz@@ifpgfafter@auxi{\ctikz@@pgfmonth<#2}\pgfutil@secondoftwo + \ctikz@@ifpgfafter@auxi{\ctikz@@pgfday<#3}\pgfutil@secondoftwo + \pgfutil@gobble\ctikz@@ifpgfafter\pgfutil@firstoftwo + } +% +% usage \ctikz@@ifpgfafter 2023-01-16{true}{false} +% ^^^ no spaces here, braces needed. +% +%>>> + %% arrow tips macros and utilities %<<<1 % the default arrow is latexslim, which has been ported over old arrows library (deprecated) @@ -298,9 +350,70 @@ \pgfpathclose \pgfusepathqfill } - \pgfarrowsdeclarereversed{latexslim reversed}{latexslim reversed}{latexslim}{latexslim} - +%% Jack Tap, see +%% https://github.com/circuitikz/circuitikz/issues/806 +\pgfdeclarearrow{name=Jack Tap, + parameters = {% + \the\pgfarrowlength,% + \the\pgfarrowwidth,% + \ifpgfarrowswap s\fi% + \ifpgfarrowopen o\fi% + \ifpgfarrowroundjoin j\fi + \ifpgfarrowroundcap c\fi% + }, + setup code = { + \pgfarrowssettipend{.5\pgfarrowlength} + \pgfarrowssetlineend{-.6\pgfarrowlength} + \pgfarrowssetvisualbackend{-.6\pgfarrowlength} + \pgfarrowssetbackend{-.6\pgfarrowlength} + % hull + \pgfarrowshullpoint{.5\pgfarrowlength}{0pt} + \pgfarrowshullpoint{0pt}{\pgfarrowwidth} + \pgfarrowshullpoint{-.6\pgfarrowlength}{0pt} + % Saves: Only the length: + \pgfarrowssavethe\pgfarrowlength + \pgfarrowssavethe\pgfarrowwidth + }, + drawing code = { + \pgfsetdash{}{+0pt} + \pgfarrowlinewidth=\pgflinewidth + \ifpgfarrowroundjoin\pgfsetroundjoin\else\pgfsetmiterjoin\fi + \ifpgfarrowroundcap\pgfsetroundcap\else\pgfsetbuttcap\fi + \pgfpathmoveto{\pgfqpoint{-.6\pgfarrowlength}{0pt}} + \pgfpathlineto{\pgfqpoint{-.5\pgfarrowlength}{0pt}} + \pgfpathlineto{\pgfqpoint{0pt}{\pgfarrowwidth}} + \pgfpathlineto{\pgfqpoint{.5\pgfarrowlength}{0pt}} + \ifpgfarrowopen + \pgfusepathqstroke + \else + \pgfpathclose + \ifdim\pgfarrowlinewidth>0pt\pgfusepathqfillstroke\else\pgfusepathqfill\fi + \fi + }, + defaults = {length = 0.3cm, width=0.15cm, open}, + % cache=false, % breaks everything +} +% the new "fill without arg" will be in TikZ 3.1.11. Apply it here if we have an +% older version +\ctikz@@ifpgfafter 2023-01-16{\relax}{% + % thanks @muzimuzhi https://github.com/pgf-tikz/pgf/issues/1348#issuecomment-2229075269 + % undo the fill/.value required key + \expandafter\let\csname pgfk@/pgf/arrow keys/fill/.@def\endcsname\@undefined + \pgfkeys{/pgf/arrow keys/fill/.code={% + \def\pgf@temp{#1}% + \ifx\pgf@temp\pgf@nonetext% + \pgfarrowsaddtooptions{\pgfarrowopentrue}% + \else\ifx\pgf@temp\pgfkeysnovalue@text% + \pgfarrowsaddtooptions{\pgfarrowopenfalse}% + \else + \pgfarrowsaddtooptions{\pgfarrowopenfalse\def\pgf@arrows@fill@color{#1}}% + \fi\fi + }}% +} +\tikzset{v/.tip={Jack Tap[swap]}, ^/.tip={Jack Tap}, + vf/.tip={Jack Tap[swap,fill]}, ^f/.tip={Jack Tap[fill]}} +% % select the arrows using available defaults. \def\pgfcirc@arrow@default{default} % choose the arrows to use. Use #2 and #3 if the key is equal to "default" @@ -466,7 +579,30 @@ \fi \fi } - +% similar o the above, use the fill parameter to set fill or draw +% for a subset of the shape +\def\pgf@circ@subset@fill@or@draw#1{% + % You *must* be sure that this is called inside a \pgfscope! + \edef\@@none{none}\edef\@@default{default} + \edef\@@tmp{\ctikzvalof{#1/fill}} + \ifx\@@tmp\@@none + \pgfusepath{draw} + \else + \ifx\@@tmp\@@default\else + \pgfsetfillcolor{\@@tmp} + \fi + \pgfusepath{draw, fill} + \fi +} +% ...and for the thickness +\def\pgf@circ@subset@thickness#1{% + % You *must* be sure that this is called inside a \pgfscope! + \edef\@@default{default} + \edef\@@tmp{\ctikzvalof{#1/thickness}} + \ifx\@@tmp\@@default\else + \pgfsetlinewidth{\@@tmp\pgflinewidth}% + \fi +} % set the text color (via \color) if the color is not default or none % needed in some strange case (like bodydiode' dots) \def\pgf@circ@maybe@color#1{% @@ -557,6 +693,7 @@ % #7 - macros drawing the bipole % \long\def\pgfcircdeclarebipolescaled#1#2#3#4#5#6#7{ + % \typeout{Declaring bipole:\space #4,} \pgfdeclareshape{#4shape}{ \savedmacro{\ctikzclass}{\edef\ctikzclass{#1}} \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}} @@ -602,97 +739,33 @@ \pgf@y=.5\pgf@y } \anchor{center}{\pgfpointorigin} - \anchor{n}{ - \northeast - \pgf@x=0cm - } - \anchor{north east}{ - \northeast - } - \anchor{north west}{ - \northeast - \pgf@x=-\pgf@x - } - \anchor{ne}{ - \northeast - } - \anchor{nw}{ - \northeast - \pgf@x=-\pgf@x - } - \anchor{e}{ - \northeast - \pgf@y=0cm - } - \anchor{s}{ - \southwest - \pgf@x=0cm - } - \anchor{south east}{ - \southwest - \pgf@x=-\pgf@x - } - \anchor{south west}{ - \southwest - } - \anchor{se}{ - \southwest - \pgf@x=-\pgf@x - } - \anchor{sw}{ - \southwest - } - \anchor{w}{ - \southwest - \pgf@y=0cm - } - \anchor{north}{ - \northeast - \pgf@x=0cm - } - \anchor{east}{ - \northeast - \pgf@y=0cm - } - \anchor{south}{ - \southwest - \pgf@x=0cm - } - \anchor{west}{ - \southwest - \pgf@y=0cm - } - \anchor{right}{ - \northeast - \pgf@y=0cm - } - \anchor{above}{ - \northeast - \pgf@x=0cm - } - \anchor{left}{ - \southwest - \pgf@y=0cm - } - \anchor{below}{ - \southwest - \pgf@x=0cm - } - \anchor{a}{ - \northeast - \pgf@y=0cm - } - \anchor{b}{ - \southwest - \pgf@y=0cm - } + \anchor{n}{\northeast\pgf@x=0cm } + \anchor{north east}{\northeast} + \anchor{north west}{\northeast\pgf@x=-\pgf@x} + \anchor{ne}{\northeast} + \anchor{nw}{\northeast\pgf@x=-\pgf@x} + \anchor{e}{\northeast\pgf@y=0cm } + \anchor{s}{\southwest\pgf@x=0cm } + \anchor{south east}{\southwest\pgf@x=-\pgf@x} + \anchor{south west}{\southwest} + \anchor{se}{\southwest\pgf@x=-\pgf@x} + \anchor{sw}{\southwest} + \anchor{w}{\southwest\pgf@y=0cm } + \anchor{north}{\northeast\pgf@x=0cm } + \anchor{east}{\northeast\pgf@y=0cm } + \anchor{south}{\southwest\pgf@x=0cm } + \anchor{west}{\southwest\pgf@y=0cm } + \anchor{right}{\northeast\pgf@y=0cm } + \anchor{above}{\northeast\pgf@x=0cm } + \anchor{left}{\southwest\pgf@y=0cm } + \anchor{below}{\southwest\pgf@x=0cm } + \anchor{a}{\northeast\pgf@y=0cm } + \anchor{b}{\southwest\pgf@y=0cm } \savedanchor{\textanchor}{% \pgf@y=\ht\pgfnodeparttextbox \pgf@x=-.5\wd\pgfnodeparttextbox } - \anchor{text}{ - \textanchor - } + \anchor{text}{ \textanchor } \anchorborder{% \ifpgf@circuit@bipole@inverted \pgf@circ@res@left=-\pgf@x @@ -711,7 +784,6 @@ #2% \pgf@circ@draw@component{ \pgf@circ@setcolor - \northeast \pgf@circ@res@up = \pgf@y \pgf@circ@res@zero = 0cm diff --git a/graphics/pgf/contrib/circuitikz/tex/pgfcircbipoles.tex b/graphics/pgf/contrib/circuitikz/tex/pgfcircbipoles.tex index 4978311dca..b30e741458 100644 --- a/graphics/pgf/contrib/circuitikz/tex/pgfcircbipoles.tex +++ b/graphics/pgf/contrib/circuitikz/tex/pgfcircbipoles.tex @@ -632,13 +632,21 @@ \pgfusepath{draw} \endpgfscope }% - %% Zig-zag resistors +% see https://github.com/circuitikz/circuitikz/discussions/814 +\ctikzset{resistors/zigzag stub/.initial=0} +\ctikzset{resistors/zigzag hook/.code={}} \def\pgf@circ@zigzag#1{% + \pgf@circ@res@temp=\ctikzvalof{resistors/zigzag stub}\pgf@circ@res@step + \advance \pgf@circ@res@step by -2\pgf@circ@res@temp \divide \pgf@circ@res@step by \numexpr4*\zigs\relax \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{\pgf@circ@res@zero}} + \ifdim\pgf@circ@res@temp>0pt + \pgfpathlineto{\pgfpoint{\pgf@circ@res@left+\pgf@circ@res@temp -\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{\pgf@circ@res@zero}} + \fi \pgf@circ@res@other = \pgf@circ@res@left + \advance\pgf@circ@res@other by \pgf@circ@res@temp \pgf@circ@count@a=\zigs\relax % first half zig \advance\pgf@circ@res@other by \pgf@circ@res@step @@ -655,11 +663,14 @@ \advance\pgf@circ@res@other by 2\pgf@circ@res@step \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{#1\pgf@circ@res@down}} \advance\pgf@circ@res@other by \pgf@circ@res@step - \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@zero}} + \pgfpathlineto{\pgfpoint{\pgf@circ@res@other+\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{\pgf@circ@res@zero}} + \ifdim\pgf@circ@res@temp>0pt + \pgfpathlineto{\pgfpoint{\pgf@circ@res@other+\pgf@circ@res@temp+\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{\pgf@circ@res@zero}} + \fi \pgfsetbeveljoin + \pgfkeys{/tikz/circuitikz/resistors/zigzag hook} \pgfusepath{draw} } - %% Resistor \pgfcircdeclarebipolescaled{resistors} { @@ -672,7 +683,7 @@ { \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} \pgftransformationadjustments - \pgfmathsetlength{\pgf@circ@res@step}{\ctikzvalof{bipoles/resistor/width}*\scaledRlen+\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth} + \pgfmathsetlength{\pgf@circ@res@step}{\ctikzvalof{bipoles/resistor/width}*\scaledRlen} \pgf@circ@zigzag{1} } @@ -692,7 +703,7 @@ { \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} \pgftransformationadjustments - \pgfmathsetlength{\pgf@circ@res@step}{\ctikzvalof{bipoles/vresistor/width}*\scaledRlen+\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth} + \pgfmathsetlength{\pgf@circ@res@step}{\ctikzvalof{bipoles/vresistor/width}*\scaledRlen} \pgf@circ@zigzag{.5} \pgfscope @@ -731,7 +742,7 @@ { \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} \pgftransformationadjustments - \pgfmathsetlength{\pgf@circ@res@step}{\ctikzvalof{bipoles/potentiometer/width}*\scaledRlen+\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth} + \pgfmathsetlength{\pgf@circ@res@step}{\ctikzvalof{bipoles/potentiometer/width}*\scaledRlen} \pgf@circ@zigzag{1} \pgfscope @@ -761,7 +772,7 @@ {% \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} \pgftransformationadjustments - \pgfmathsetlength{\pgf@circ@res@step}{\ctikzvalof{bipoles/resistivesens/width}*\scaledRlen+\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth} + \pgfmathsetlength{\pgf@circ@res@step}{\ctikzvalof{bipoles/resistivesens/width}*\scaledRlen} \pgf@circ@zigzag{.5} \pgfscope @@ -810,7 +821,7 @@ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right/\@@intscale+\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{+0pt}} \pgfpathlineto{\pgfpoint{\pgf@circ@res@right+\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{+0pt}} \pgftransformationadjustments - \pgfmathsetlength{\pgf@circ@res@step}{\ctikzvalof{bipoles/ldresistor/width}*\scaledRlen+\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth} + \pgfmathsetlength{\pgf@circ@res@step}{\ctikzvalof{bipoles/ldresistor/width}*\scaledRlen} \pgf@circ@zigzag{\@@hscale} }% @@ -3696,9 +3707,9 @@ \pgf@circuit@fulldiodefalse \ctikzset{diode/.is choice} -\ctikzset{diode/empty/.code = \pgf@circuit@fulldiodefalse\pgf@circuit@strokediodefalse}%default -\ctikzset{diode/full/.code = \pgf@circuit@fulldiodetrue } -\ctikzset{diode/stroke/.code = \pgf@circuit@strokediodetrue} +\ctikzset{diode/empty/.code = \pgf@circuit@fulldiodefalse\pgf@circuit@strokediodefalse}%default +\ctikzset{diode/full/.code = \pgf@circuit@fulldiodetrue\pgf@circuit@strokediodefalse} +\ctikzset{diode/stroke/.code = \pgf@circuit@fulldiodefalse\pgf@circuit@strokediodetrue} \tikzset{full diodes/.style = { \circuitikzbasekey/diode = full}} \tikzset{empty diodes/.style = { \circuitikzbasekey/diode = empty}} @@ -6031,6 +6042,13 @@ \ctikzset{bipoles/qpprobe/voltage/additional shift/.initial=.5} \ctikzset{bipoles/iloop/width/.initial=.40} \ctikzset{bipoles/iloop/height/.initial=.60} +% currtap see https://github.com/circuitikz/circuitikz/issues/807 +\ctikzset{bipoles/currtap/height/.initial=0.4} +\ctikzset{bipoles/currtap/dot size/.initial=0.5} +\ctikzset{bipoles/currtap/fill/.initial=default} +\ctikzset{bipoles/currtap/dash/.initial=none} +\ctikzset{bipoles/currtap/color/.initial=default} +\ctikzset{bipoles/currtap/thickness/.initial=default} \ctikzset{bipoles/oscope/height/.initial=.60} \ctikzset{bipoles/oscope/width/.initial=.60} @@ -6607,6 +6625,28 @@ \pgfusepath{draw} \endpgfscope } +%% currtap +\pgfcircdeclarebipolescaled{instruments} +{ + \savedmacro{\@@dotsize}{\def\@@dotsize{\ctikzvalof{bipoles/currtap/dot size}}} + \anchor{tap}{\northeast\pgf@x=0pt\pgf@y=\@@dotsize\pgf@y\pgf@y=-\pgf@y} +} +{\ctikzvalof{bipoles/currtap/height}} +{currtap} +{\ctikzvalof{bipoles/currtap/height}} +{\ctikzvalof{bipoles/currtap/height}} +{ + \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}} + \pgfpathlineto{\pgfpoint{0.95\pgf@circ@res@left}{0pt}} + \pgfpatharc{180}{0}{0.95\pgf@circ@res@right} + \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}} + \pgfusepath{draw} + \pgf@circ@subset@color@dash{bipoles/currtap} + \pgf@circ@subset@thickness{bipoles/currtap} + \pgfusepath{draw} + \pgfpathcircle{\pgfpoint{0pt}{0pt}}{\@@dotsize*\pgf@circ@res@up} + \pgf@circ@subset@fill@or@draw{bipoles/currtap} +} % %>>> % Path definitions for Instruments%<<< @@ -6619,8 +6659,8 @@ \pgfcirc@activate@bipole@simple{l}{rmeterwa} \pgfcirc@activate@bipole@simple{l}{smeter} \pgfcirc@activate@bipole@simple{l}{iloop} -% \pgfcirc@activate@bipole@simple{l}{iloop2} that was wrong \pgfcirc@activate@bipole{l}{ilooptwo}{iloop2}{iloop2} +\pgfcirc@activate@bipole@simple{l}{currtap} \pgfcirc@activate@bipole@simple{l}{qvprobe} \pgfcirc@activate@bipole@simple{l}{qiprobe} \pgfcirc@activate@bipole@simple{l}{qpprobe} @@ -6774,16 +6814,22 @@ % spring into the damper \pgfscope - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}} + \pgfscope + \pgftransformationadjustments \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} + \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{\pgf@circ@res@zero}} + \pgfpathlineto{\pgfpoint{.95\pgf@circ@res@left}{\pgf@circ@res@zero}} \pgfsetcornersarced{\pgfpoint{.25\pgf@circ@res@up}{.25\pgf@circ@res@up}} \pgfpathlineto{\pgfpoint{.75\pgf@circ@res@left}{.75\pgf@circ@res@up}} \pgfpathlineto{\pgfpoint{.5\pgf@circ@res@left}{-.75\pgf@circ@res@up}} \pgfpathlineto{\pgfpoint{.25\pgf@circ@res@left}{.75\pgf@circ@res@up}} \pgfpathlineto{\pgfpoint{0pt}{-.75\pgf@circ@res@up}} \pgfpathlineto{\pgfpoint{\ctikzvalof{bipoles/damper/length}\pgf@circ@res@right}{.75\pgf@circ@res@up}} + \pgfsetbuttcap + \pgfsetbeveljoin \pgfusepath{stroke} \endpgfscope + \endpgfscope % damper box \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}} @@ -6977,7 +7023,7 @@ \ctikzset{bipoles/tlmic/width/.initial=.5}% it MUST be mic width *5/8 \ctikzset{bipoles/mic/bar thickness/.initial=1} -% arresters, fuses, lamps, etc +% arresters, fuses, relais, lamps, etc \ctikzset{bipoles/european gas filled surge arrester/height/.initial=.30} \ctikzset{bipoles/european gas filled surge arrester/width/.initial=.80} @@ -6994,6 +7040,7 @@ \ctikzset{bipoles/afuse/height/.initial=.20} \ctikzset{bipoles/afuse/width/.initial=.50} \ctikzset{bipoles/lamp/height/.initial=.60} +\ctikzset{bipoles/lamp/width/.initial=.60} \ctikzset{bipoles/wfuse/height/.initial=.20} \ctikzset{bipoles/wfuse/width/.initial=.50} \ctikzset{bipoles/wfuse/shape/.initial=ocirc} @@ -7001,9 +7048,22 @@ \ctikzset{bipoles/wfuse/dots/.is choice} \ctikzset{bipoles/wfuse/dots/.is if=pgf@circ@wfuse@dots} % -\ctikzset{bipoles/lamp/width/.initial=.60} +\ctikzset{bipoles/relais/height/.initial=.8} +\ctikzset{bipoles/relais/width/.initial=.3} +% \ctikzset{bipoles/bulb/height/.initial=.8} \ctikzset{bipoles/bulb/width/.initial=.8} +% suggested by @bogger33, see https://github.com/circuitikz/circuitikz/issues/793 +\ctikzset{bipoles/neonlampcc/height/.initial=.60} +\ctikzset{bipoles/neonlampac/height/.initial=.60} +\pgf@circ@declare@family@arrows{sparkgap} +\newif\ifpgf@sparkgap@dot +\newif\ifpgf@sparkgap@circle +\ctikzset{sparkgap/circle/.is if=pgf@sparkgap@circle} +\ctikzset{sparkgap/dot/.is if=pgf@sparkgap@dot} +\ctikzset{sparkgap/gap/.initial=.05} +\ctikzset{bipoles/sparkgap/height/.initial=.60} +% \ctikzset{bipoles/squid/height/.initial=.60} \ctikzset{bipoles/squid/width/.initial=.60} \ctikzset{bipoles/barrier/height/.initial=.60} @@ -7157,18 +7217,18 @@ {\ctikzvalof{bipoles/thermocouple/height}} {\ctikzvalof{bipoles/thermocouple/width}} { + \pgfsetrectcap \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0}} \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{.5\pgf@circ@res@down}} - \pgfusepath{draw} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{.5\pgf@circ@res@down}} - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} \pgfpathlineto{\pgfpoint{0}{\pgf@circ@res@down}} - \pgfusepath{draw} - \pgfsetlinewidth{\pgfstartlinewidth} - \pgfpathmoveto{\pgfpoint{0}{\pgf@circ@res@down}} \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{.5\pgf@circ@res@down}} \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0}} \pgfusepath{draw} + \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} + \pgfsetroundcap + \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{.5\pgf@circ@res@down}} + \pgfpathlineto{\pgfpoint{0}{\pgf@circ@res@down}} + \pgfusepath{draw} } %% fuse \pgfcircdeclarebipolescaled{misc} @@ -7233,6 +7293,25 @@ \pgfnode{\cshape}{center}{}{\thisshape-right}{\pgfusepath{draw}} \fi } + +%% Relais +\pgfcircdeclarebipolescaled{misc} +{} +{\ctikzvalof{bipoles/relais/height}} +{relais} +{\ctikzvalof{bipoles/relais/height}} +{\ctikzvalof{bipoles/relais/width}} +{ + \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}} + \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} + \pgf@circ@draworfill + \pgfscope + \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}} + \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}} + \pgfusepath{draw} + \endpgfscope +} + %% SQUID added by Cor Molenaar 5 March 2010 \pgfcircdeclarebipolescaled{misc} {} @@ -7340,11 +7419,116 @@ \pgfsetbeveljoin \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}} \pgfusepath{draw} -}% %>>> +}% +% neon lamps, suggested by @bogger33 https://github.com/circuitikz/circuitikz/issues/793 +% implemented by Romano +% double-cathode (capacitor) style +\pgfcircdeclarebipolescaled{misc} +{} +{\ctikzvalof{bipoles/neonlampcc/height}} +{neonlampcc} +{\ctikzvalof{bipoles/neonlampcc/height}} +{\ctikzvalof{bipoles/neonlampcc/height}} +{ + \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} + \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}} + \pgf@circ@draworfill + %% leads in + \pgfsetlinewidth{\pgfstartlinewidth} + \def\@@w{0.2}\def\@@h{0.6} + \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}} + \pgfpathlineto{\pgfpoint{\@@w\pgf@circ@res@left}{0pt}} + \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}} + \pgfpathlineto{\pgfpoint{\@@w\pgf@circ@res@right}{0pt}} + %% "capacitor style" symbol + \pgfusepath{draw} + \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} + \pgfpathmoveto{\pgfpoint{\@@w\pgf@circ@res@right}{\@@h\pgf@circ@res@down}} + \pgfpathlineto{\pgfpoint{\@@w\pgf@circ@res@right}{\@@h\pgf@circ@res@up}} + \pgfpathmoveto{\pgfpoint{\@@w\pgf@circ@res@left}{\@@h\pgf@circ@res@down}} + \pgfpathlineto{\pgfpoint{\@@w\pgf@circ@res@left}{\@@h\pgf@circ@res@up}} + \pgfusepath{draw} + %% dot + \pgftransformshift{\pgfpoint{\@@w\pgf@circ@res@left-3*\ctikzvalof{nodes width}\pgf@circ@Rlen} + {\@@h\pgf@circ@res@down + 2*\ctikzvalof{nodes width}\pgf@circ@Rlen}} + \pgfnode{circ}{center}{}{}{\pgfusepath{draw,fill}} +} +% anode-cathode style +\pgfcircdeclarebipolescaled{misc} +{} +{\ctikzvalof{bipoles/neonlampac/height}} +{neonlampac} +{\ctikzvalof{bipoles/neonlampac/height}} +{\ctikzvalof{bipoles/neonlampac/height}} +{ + \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} + \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}} + \pgf@circ@draworfill + %% leads in + \pgfsetlinewidth{\pgfstartlinewidth} + \def\@@w{0.5}\def\@@h{0.5} + \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}} + \pgfpathlineto{\pgfpoint{\@@w\pgf@circ@res@left}{0pt}} + \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}} + \pgfpathlineto{\pgfpoint{\@@w\pgf@circ@res@right}{0pt}} + \pgfusepath{draw} + %% one terminal is a straight plate + \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} + \pgfpathmoveto{\pgfpoint{\@@w\pgf@circ@res@left}{\@@h\pgf@circ@res@down}} + \pgfpathlineto{\pgfpoint{\@@w\pgf@circ@res@left}{\@@h\pgf@circ@res@up}} + \pgfusepath{draw} + %% the other is an "ocirc" shape + \pgftransformshift{\pgfpoint{\@@w\pgf@circ@res@right}{0pt}} + \pgfnode{ocirc}{center}{}{}{\pgfusepath{draw,fill}} + %% dot + \pgftransformshift{\pgfpoint{-\@@w\pgf@circ@res@right}{\@@h\pgf@circ@res@down}} + \pgfnode{circ}{center}{}{}{\pgfusepath{draw,fill}} +} +% spark gap, suggested by @bogger33 https://github.com/circuitikz/circuitikz/issues/800 +\pgfcircdeclarebipolescaled{misc} +{ + \savedmacro{\changeh}{\edef\changeh{\ifpgf@sparkgap@circle 1 \else 0.5 \fi}} + \pgfcirc@border@extend@updown{\changeh}{\changeh} +} +{\ctikzvalof{bipoles/sparkgap/height}} +{sparkgap} +{\ctikzvalof{bipoles/sparkgap/height}} +{\ctikzvalof{bipoles/sparkgap/height}}{ + % circle (if requested) + \pgfscope + \ifpgf@sparkgap@circle + \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} + \pgfpathcircle{\pgfpointorigin}{\pgf@circ@res@up} + \pgf@circ@draworfill + \fi + \endpgfscope + % arrows + \pgfscope + \pgfcirc@set@arrows{sparkgap}{}{Triangle[scale=2]} + \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}} + \pgfpathlineto{\pgfpoint{\ctikzvalof{sparkgap/gap}\pgf@circ@res@right}{0pt}} + \pgfusepath{draw} + \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}} + \pgfpathlineto{\pgfpoint{\ctikzvalof{sparkgap/gap}\pgf@circ@res@left}{0pt}} + \pgfusepath{draw} + \endpgfscope{} + % dot (if requested) + \ifpgf@sparkgap@dot + \pgftransformshift{\pgfpoint + {\ctikzvalof{sparkgap/gap}\pgf@circ@res@left-1*\ctikzvalof{nodes width}\pgf@circ@Rlen} + {-4*\ctikzvalof{nodes width}\pgf@circ@Rlen}} + \pgfnode{circ}{center}{}{}{\pgfusepath{draw,fill}} + \fi +} + +%>>> %% Path definitions for Miscellaneous%<<< \pgfcirc@activate@bipole@simple{l}{lamp} +\pgfcirc@activate@bipole@simple{l}{neonlampcc} +\pgfcirc@activate@bipole@simple{l}{neonlampac} +\pgfcirc@activate@bipole@simple{l}{sparkgap} \pgfcirc@activate@bipole@simple{l}{bulb} \pgfcirc@activate@bipole@simple{l}{squid} \pgfcirc@activate@bipole@simple{l}{barrier} @@ -7355,6 +7539,7 @@ \pgfcirc@style@to@style{asymmetric fuse}{afuse} \pgfcirc@activate@bipole@simple{l}{wfuse} \pgfcirc@activate@bipole{l}{wfuse}{wfuse}{wiggly fuse} +\pgfcirc@activate@bipole@simple{l}{relais} \def\pgf@circ@gfsurgearrester@path#1{\ifpgf@circuit@europeangfsurgearrester\pgf@circ@europeangfsurgearrester@path{#1}\else\pgf@circ@americangfsurgearrester@path{#1}\fi} \pgfcirc@activate@bipole{l}{europeangfsurgearrester}{european gas filled surge arrester}{european gas filled surge arrester} \pgfcirc@activate@bipole{l}{americangfsurgearrester}{american gas filled surge arrester}{american gas filled surge arrester} diff --git a/graphics/pgf/contrib/circuitikz/tex/pgfcircpath.tex b/graphics/pgf/contrib/circuitikz/tex/pgfcircpath.tex index e3665b8862..cb95f54ef3 100644 --- a/graphics/pgf/contrib/circuitikz/tex/pgfcircpath.tex +++ b/graphics/pgf/contrib/circuitikz/tex/pgfcircpath.tex @@ -231,13 +231,15 @@ \compattikzset{#2/.style={\comnpatname #1, #3={##1}}}% } % create a bipole -\def\pgfcirc@activate@bipole#1#2#3#4{% path name, base node name, style name +\def\pgfcirc@activate@bipole#1#2#3#4{% type of label, path name, base node name, style name + % \typeout{Activate bipole:\space #4,} \expandafter\def\csname pgf@circ@#2@path\endcsname##1{\pgf@circ@bipole@path{#3}{##1}}% \pgfcirc@path@to@style{#1}{#2}{#4}{}% no options here, let's see } \def\pgfcirc@activate@bipole@simple#1#2{\pgfcirc@activate@bipole{#1}{#2}{#2}{#2}} % create a bipole with options -\def\pgfcirc@activate@bipole@opt#1#2#3#4#5{% path name, base node name, style name +\def\pgfcirc@activate@bipole@opt#1#2#3#4#5{% type of label, path name, base node name, style name, options + % \typeout{Activate bipole:\space #4,} \expandafter\def\csname pgf@circ@#2@path\endcsname##1{\pgf@circ@bipole@path{#3}{##1}}% \pgfcirc@path@to@style{#1}{#2}{#4}{#5}% no options here, let's see } diff --git a/graphics/pgf/contrib/circuitikz/tex/pgfcirctripoles.tex b/graphics/pgf/contrib/circuitikz/tex/pgfcirctripoles.tex index 7457dabb46..d8d089dd92 100644 --- a/graphics/pgf/contrib/circuitikz/tex/pgfcirctripoles.tex +++ b/graphics/pgf/contrib/circuitikz/tex/pgfcirctripoles.tex @@ -4025,6 +4025,8 @@ \pgfmathsetmacro{\@@BDscale}{\ctikzvalof{tripoles/#1/bodydiode scale}* \ctikzvalof{\ctikzclass/scale}/\ctikzvalof{diodes/scale}} \pgftransformscale{\@@BDscale} \ifpgf@circuit@fulldiode + % I'm not sure why this is needed, but... + \pgf@circ@maybe@color{transistor bodydiode/color} \pgfnode{fulldiodeshape}{center}{}{pgf@bodydiode}{\pgfusepath{fill}} \else \pgfnode{emptydiodeshape}{center}{}{pgf@bodydiode}{\pgfusepath{fill}} @@ -8613,6 +8615,11 @@ \pgf@y=\pgf@circ@res@up\advance\pgf@y by -\pgf@circ@res@right \fi } + \savedmacro{\tubes@filament@angle}{\edef\tubes@filament@angle{\ctikzvalof{tubes/filament angle}}} + \savedmacro{\tubes@filament@distance}{\edef\tubes@filament@distance{\ctikzvalof{tubes/filament distance}}} + \savedmacro{\tubes@tube@radius}{\edef\tubes@tube@radius{\ctikzvalof{tubes/tube radius}}} + \savedmacro{\tubes@cathode@width}{\edef\tubes@cathode@width{\ctikzvalof{tubes/cathode width}}} + \savedmacro{\tubes@cathode@distance}{\edef\tubes@cathode@distance{\ctikzvalof{tubes/cathode distance}}} \anchor{tube ne}{\tubene} \anchor{tubesq ne}{\tubesquarene} % tube shape anchors: geo @@ -8647,30 +8654,37 @@ \anchor{cathode}{% \northwest \pgf@y=-\pgf@y - \pgf@x=\ctikzvalof{tubes/cathode width}\pgf@x + \pgf@x=\tubes@cathode@width\pgf@x } \anchor{cathode 1}{% \northwest \pgf@y=-\pgf@y - \pgf@x=\ctikzvalof{tubes/cathode width}\pgf@x + \pgf@x=\tubes@cathode@width\pgf@x } \anchor{cathode 2}{% \northwest \pgf@y=-\pgf@y - \pgf@x=-\ctikzvalof{tubes/cathode width}\pgf@x + \pgf@x=-\tubes@cathode@width\pgf@x } \anchor{filament 1}{% \northwest - \pgfmathparse{(\ctikzvalof{tubes/tube radius}*sin(\ctikzvalof{tubes/filament angle})} + \pgfmathparse{(\tubes@tube@radius*sin(\tubes@filament@angle)} \pgf@x=\pgfmathresult\pgf@x \pgf@y=-\pgf@y } \anchor{filament 2}{% \northwest - \pgfmathparse{(\ctikzvalof{tubes/tube radius}*sin(\ctikzvalof{tubes/filament angle})} + \pgfmathparse{(\tubes@tube@radius*sin(\tubes@filament@angle)} \pgf@x=-\pgfmathresult\pgf@x \pgf@y=-\pgf@y } + \anchor{filament center}{% + \northwest + \pgf@ya=0.5\pgf@y + \pgf@ya=-\tubes@cathode@distance\pgf@y + \advance\pgf@ya by -\tubes@filament@distance\pgf@y + \pgf@x=0pt\pgf@y=\pgf@ya + } % Extra anchors #2% diff --git a/graphics/pgf/contrib/circuitikz/tex/t-circuitikz.tex b/graphics/pgf/contrib/circuitikz/tex/t-circuitikz.tex index a738c664ea..f85b8ab58b 100644 --- a/graphics/pgf/contrib/circuitikz/tex/t-circuitikz.tex +++ b/graphics/pgf/contrib/circuitikz/tex/t-circuitikz.tex @@ -16,8 +16,8 @@ \startmodule[circuitikz] \usemodule[tikz] -\def\pgfcircversion{1.6.8} -\def\pgfcircversiondate{2024/05/05} +\def\pgfcircversion{1.7.0} +\def\pgfcircversiondate{2024/08/03} \writestatus{loading}{\pgfcircversiondate{} The CircuiTikz circuit drawing package version \pgfcircversion} diff --git a/graphics/pgf/contrib/dynkin-diagrams/README b/graphics/pgf/contrib/dynkin-diagrams/README index e43f31e0b8..5abe74143c 100644 --- a/graphics/pgf/contrib/dynkin-diagrams/README +++ b/graphics/pgf/contrib/dynkin-diagrams/README @@ -1,6 +1,6 @@ Dynkin diagrams -v3.1415926535897932384 -2 June 2023 +v3.14159265358979323846 +6 July 2024 Authors: Ben McKay diff --git a/graphics/pgf/contrib/dynkin-diagrams/dynkin-diagrams.bib b/graphics/pgf/contrib/dynkin-diagrams/dynkin-diagrams.bib index 9660120699..952e4a90bf 100644 --- a/graphics/pgf/contrib/dynkin-diagrams/dynkin-diagrams.bib +++ b/graphics/pgf/contrib/dynkin-diagrams/dynkin-diagrams.bib @@ -1,6 +1,5 @@ % Encoding: ISO-8859-1 - @Book{Adams:1996, Title = {Lectures on exceptional {L}ie groups}, Author = {Adams, J. F.}, @@ -477,4 +476,67 @@ MRREVIEWER = {Stephen Gelbart}, url = {https://doi.org/10.1007/978-1-4612-0979-9}, } +@Book{Knapp:2002, + author = {Knapp, Anthony W.}, + publisher = {Birkh\"{a}user Boston, Inc., Boston, MA}, + title = {Lie groups beyond an introduction}, + year = {2002}, + edition = {Second}, + isbn = {0-8176-4259-5}, + series = {Progress in Mathematics}, + volume = {140}, + mrclass = {22-01}, + mrnumber = {1920389}, + pages = {xviii+812}, +} + +@Article{Witt:1941, + author = {Witt, Ernst}, + journal = {Abh. Math. Sem. Hansischen Univ.}, + title = {Spiegelungsgruppen und {A}ufz\"ahlung halbeinfacher {L}iescher {R}inge}, + year = {1941}, + issn = {0025-5858}, + pages = {289--322}, + volume = {14}, + doi = {10.1007/BF02940749}, + fjournal = {Abhandlungen aus dem Mathematischen Seminar der Hansischen Universit\"at}, + mrclass = {09.1X}, + mrnumber = {5099}, + mrreviewer = {O.\ F. G. Schilling}, + url = {https://doi.org/10.1007/BF02940749}, +} + +@Article{Johnson.et.al.1999, + author = {Johnson, N. W. and Ratcliffe, J. G. and Kellerhals, R. and Tschantz, S. T.}, + journal = {Transform. Groups}, + title = {The size of a hyperbolic {C}oxeter simplex}, + year = {1999}, + issn = {1083-4362,1531-586X}, + number = {4}, + pages = {329--353}, + volume = {4}, + doi = {10.1007/BF01238563}, + fjournal = {Transformation Groups}, + mrclass = {20F55 (57M60)}, + mrnumber = {1726696}, + mrreviewer = {Andrei\ Yu.\ Vesnin}, + url = {https://doi.org/10.1007/BF01238563}, +} + +@Book{McMullen.Schulte:2002, + author = {McMullen, Peter and Schulte, Egon}, + publisher = {Cambridge University Press, Cambridge}, + title = {Abstract regular polytopes}, + year = {2002}, + isbn = {0-521-81496-0}, + series = {Encyclopedia of Mathematics and its Applications}, + volume = {92}, + doi = {10.1017/CBO9780511546686}, + mrclass = {52B15 (20F55 51F15 51M20)}, + mrnumber = {1965665}, + mrreviewer = {Rade\ \v Zivaljevi\'c}, + pages = {xiv+551}, + url = {https://doi.org/10.1017/CBO9780511546686}, +} + @Comment{jabref-meta: databaseType:bibtex;} diff --git a/graphics/pgf/contrib/dynkin-diagrams/dynkin-diagrams.pdf b/graphics/pgf/contrib/dynkin-diagrams/dynkin-diagrams.pdf Binary files differindex 2109c1ba1c..dceef35936 100644 --- a/graphics/pgf/contrib/dynkin-diagrams/dynkin-diagrams.pdf +++ b/graphics/pgf/contrib/dynkin-diagrams/dynkin-diagrams.pdf diff --git a/graphics/pgf/contrib/dynkin-diagrams/dynkin-diagrams.sty b/graphics/pgf/contrib/dynkin-diagrams/dynkin-diagrams.sty index e45f21ee18..7a92e22048 100644 --- a/graphics/pgf/contrib/dynkin-diagrams/dynkin-diagrams.sty +++ b/graphics/pgf/contrib/dynkin-diagrams/dynkin-diagrams.sty @@ -1,6 +1,6 @@ % The Dynkin Diagrams package. % -% Version 3.141 592 653 589 793 238 4 +% Version 3.141 592 653 589 793 238 46 % % This package draws Dynkin diagrams in LaTeX % documents, using the TikZ package. @@ -13,7 +13,7 @@ % Released under the LaTeX Project Public License v1.3c or later, see % http://www.latex-project.org/lppl.txt \NeedsTeXFormat{LaTeX2e}[1994/06/01] -\ProvidesPackage{dynkin-diagrams}[2023/06/02 Dynkin diagrams] +\ProvidesPackage{dynkin-diagrams}[2024/07/05 Dynkin diagrams] \RequirePackage{tikz} \RequirePackage{xstring} \RequirePackage{etoolbox} @@ -1873,6 +1873,7 @@ }% + %% \dynkinQuadrupleEdge{<p>}{<q>} %% \dynkinQuadrupleEdge*{<p>}{<q>} %% Draws an oriented edge of valence 4 from root <p> to root <q> on the current Dynkin diagram. @@ -2041,6 +2042,8 @@ % Is the right side of the Dynkin diagram folded? \newif\ifdynkin@Coxeter % Should we draw Coxeter diagrams? +\newif\ifdynkin@Coxeter@above +% Should we draw Coxeter diagram extra labels above or below? \newif\ifdynkin@Kac@arrows % Should we draw arrows following Kac? \newif\ifdynkin@odd @@ -2097,6 +2100,8 @@ }, Coxeter/.is if = dynkin@Coxeter, Coxeter=false, + Coxeter above/.is if = dynkin@Coxeter@above, + Coxeter above=true, double edges/.style = { fold style/.style = { draw=black, @@ -2598,6 +2603,10 @@ {% \global\dynkin@rank=\dynkin@string\relax% \global\dynkin@nodes=\dynkin@string\relax% + \ifWitt@symbol% + \global\advance\dynkin@rank by -1\relax% + \global\advance\dynkin@nodes by -1\relax% + \fi \ifdynkin@is@twisted% \IfStrEqCase{\dynkin@series}% {% @@ -2800,7 +2809,6 @@ % Turn Satake codes into Dynkin diagram expressions in \dynkin@string. \dynkin@grok@Satake@codes% }% - % Expand out any digits in \dynkin@string into multiples of the various root marks. \expand@Dynkin@Roots@Digits% % Assign to \dynkin@roots the input string \dynkin@string with all . symbols removed, @@ -2881,20 +2889,41 @@ \global\dynkin@rank@minus@three\the\dynkin@rank@minus@two\relax% \global\advance\dynkin@rank@minus@three by -1\relax% }% + +\newif\ifWitt@symbol \newcount\dynkin@lenny% %% \dynkin@grok@series %% Interprets the dynkin@series, to see if it is extended, twisted, and what twisted series it is. \NewDocumentCommand\dynkin@grok@series{}% {% - \StrLen{\dynkin@series}[\dynkin@lenny] + \StrLen{\dynkin@series}[\dynkin@lenny]\relax% \ifnum\dynkin@lenny>1\relax% \dynkin@error@series% \fi% +% We need to check if the series is a Witt symbol. + \IfSubStr{PSRQTUVW}{\dynkin@series}% + {% + \global\Witt@symboltrue% + \IfStrEqCase{\dynkin@series}% + {% + {P}{\global\xdef\dynkin@series{A}}% + {S}{\global\xdef\dynkin@series{B}}% + {R}{\global\xdef\dynkin@series{C}}% + {Q}{\global\xdef\dynkin@series{D}}% + {T}{\global\xdef\dynkin@series{E}}% + {U}{\global\xdef\dynkin@series{F}}% + {V}{\global\xdef\dynkin@series{G}}% + {W}{\global\xdef\dynkin@series{I}}% + }% + }% + {% + \global\Witt@symbolfalse% + }% \edef\series{\dynkin@series}% \IfStrEqCase{\dynkin@twisted@series}% {% {0}{}% - {1}{ \global\dynkin@is@extendedtrue}% + {1}{\global\dynkin@is@extendedtrue}% {2}{% \IfSubStr{ADE}{\dynkin@series}% {% @@ -3459,19 +3488,6 @@ }% [\global#5=#4\relax]% }% - {G}% - {% - \IfStrEqCase{#3}% - {% - {Carter}{\global#5=% - \stringCharacterInPosition{21}{#4}% - \relax}% - {Dynkin}{\global#5=% - \stringCharacterInPosition{21}{#4}% - \relax}% - }% - [\global#5=#4\relax]% - }% }% [\global#5=#4\relax]% }% @@ -3640,25 +3656,6 @@ }% [\global#5=#3\relax]% }% - {G}% - {% - \IfStrEqCase{#4}% - {% - {Carter}% - {% - \global#5=% - \stringCharacterInPosition{21}{#3}% - \relax% - }% - {Dynkin}% - {% - \global#5=% - \stringCharacterInPosition{21}{#3}% - \relax% - }% - }% - [\global#5=#3\relax]% - }% }% [\global#5=#3\relax]% }% @@ -3777,12 +3774,14 @@ }% {G}% {% - \IfStrEqCase{\dynkin@ordering}% - {% - {Carter}{\global\dynkin@Root@Number=\stringCharacterInPosition{21}{#1}\relax}% - {Dynkin}{\global\dynkin@Root@Number=\stringCharacterInPosition{21}{#1}\relax}% - }% - [\global\dynkin@Root@Number=#1\relax]% + \global\dynkin@Root@Number=#1\relax% +% \IfStrEqCase{\dynkin@ordering}% +% {% +% {Carter}{\global\dynkin@Root@Number=\stringCharacterInPosition{21}{#1}\relax}% +% {Dynkin}{\global\dynkin@Root@Number=\stringCharacterInPosition{21}{#1}\relax}% +% {Kac}{\global\dynkin@Root@Number=\stringCharacterInPosition{21}{#1}\relax}% +% }% +% [\global\dynkin@Root@Number=#1\relax]% }% }% [\global\dynkin@Root@Number=#1\relax]% @@ -4338,9 +4337,15 @@ \else% \ifdynkin@Coxeter% \Adynkin% - \dynkinEdgeLabel% - {\the\dynkin@rank@minus@one}% - {\the\dynkin@rank}{4}% + \ifdynkin@Coxeter@above% + \dynkinEdgeLabel% + {\the\dynkin@rank@minus@one}% + {\the\dynkin@rank}{4}% + \else% + \dynkinEdgeLabel*% + {\the\dynkin@rank@minus@one}% + {\the\dynkin@rank}{4}% + \fi% \else % Create the roots. \ifnum\dynkin@ply>1\relax% @@ -4994,7 +4999,11 @@ \dynkinEdge*{SingleEdge}{1}{2}% \dynkinEdge*{SingleEdge}{2}{3}% \dynkinEdge*{SingleEdge}{3}{4}% - \dynkinEdgeLabel{2}{3}{4}% + \ifdynkin@Coxeter@above% + \dynkinEdgeLabel{2}{3}{4}% + \else% + \dynkinEdgeLabel*{2}{3}{4}% + \fi% \else% \dynkinEdge*{SingleEdge}{1}{2}% \dynkinEdge*{SingleEdge}{3}{4}% @@ -5002,6 +5011,9 @@ \fi% \fi% }% + +\newif\ifGtwo@old@dynkin@reverse@arrows + %% \Gdynkin %% Draws a G series Dynkin diagram. \NewDocumentCommand\Gdynkin{}% @@ -5013,14 +5025,72 @@ \dynkin@jump{1}% \dynkinPlaceRootHere*{1}{left}{above}% \dynkinPlaceRootRelativeTo*{2}{1}{southfold}{left}{below}% + \ifdynkin@reverse@arrows% + \global\Gtwo@old@dynkin@reverse@arrowstrue\relax% + \else% + \global\Gtwo@old@dynkin@reverse@arrowsfalse\relax% + \fi% + \IfStrEqCase{\dynkin@ordering}% + {% + {Adams}{% + \ifdynkin@reverse@arrows% + \global\dynkin@reverse@arrowsfalse\relax% + \else% + \global\dynkin@reverse@arrowstrue\relax% + \fi\relax}% + {Bourbaki}{% + \ifdynkin@reverse@arrows% + \global\dynkin@reverse@arrowsfalse\relax% + \else% + \global\dynkin@reverse@arrowstrue\relax% + \fi\relax}% + {Carter}{\relax}% + {Dynkin}{\relax}% + {Kac}{\relax}% + }% + [\relax]% \dynkinEdge*{TripleDownRightSemiCircle}{1}{2}% + \ifGtwo@old@dynkin@reverse@arrows% + \global\dynkin@reverse@arrowstrue\relax% + \else% + \global\dynkin@reverse@arrowsfalse\relax% + \fi% \ifdynkin@arrows% \dynkinLeftFold*{1}{2}% \fi% \else% \dynkinPlaceRootHere*{1}{below}{above}% \dynkinPlaceRootRelativeTo*{2}{1}{east}{below}{above}% - \dynkinTripleEdge*{1}{2}% + \ifdynkin@reverse@arrows% + \global\Gtwo@old@dynkin@reverse@arrowstrue\relax% + \else% + \global\Gtwo@old@dynkin@reverse@arrowsfalse\relax% + \fi% + \IfStrEqCase{\dynkin@ordering}% + {% + {Adams}{% + \ifdynkin@reverse@arrows% + \global\dynkin@reverse@arrowsfalse\relax% + \else% + \global\dynkin@reverse@arrowstrue\relax% + \fi\relax}% + {Bourbaki}{% + \ifdynkin@reverse@arrows% + \global\dynkin@reverse@arrowsfalse\relax% + \else% + \global\dynkin@reverse@arrowstrue\relax% + \fi\relax}% + {Carter}{\relax}% + {Dynkin}{\relax}% + {Kac}{\relax}% + }% + [\relax]% + \dynkinTripleEdge*{1}{2}\relax% + \ifGtwo@old@dynkin@reverse@arrows% + \global\dynkin@reverse@arrowstrue\relax% + \else% + \global\dynkin@reverse@arrowsfalse\relax% + \fi% \fi% \fi% }% @@ -5030,7 +5100,11 @@ \newcommand*{\Hdynkin}% {% \Adynkin% - \dynkinEdgeLabel{1}{2}{5}% + \ifdynkin@Coxeter@above% + \dynkinEdgeLabel{1}{2}{5}% + \else% + \dynkinEdgeLabel*{1}{2}{5}% + \fi% }% %% \Idynkin %% Draws an I series Coxeter diagram. @@ -5038,7 +5112,11 @@ {% \dynkin@rank=2\relax% \Adynkin% - \dynkinEdgeLabel{1}{2}{\dynkin@gonality}% + \ifdynkin@Coxeter@above% + \dynkinEdgeLabel{1}{2}{\dynkin@gonality}% + \else% + \dynkinEdgeLabel*{1}{2}{\dynkin@gonality}% + \fi% }% %% \extendedAdynkin @@ -5183,9 +5261,15 @@ \dynkinEdge*{SingleEdge}% {\the\dynkin@rank@minus@one}% {\the\dynkin@rank}% - \dynkinEdgeLabel% - {\the\dynkin@rank@minus@one}% - {\the\dynkin@rank}{4}% + \ifdynkin@Coxeter@above% + \dynkinEdgeLabel% + {\the\dynkin@rank@minus@one}% + {\the\dynkin@rank}{4}% + \else% + \dynkinEdgeLabel*% + {\the\dynkin@rank@minus@one}% + {\the\dynkin@rank}{4}% + \fi% \else% \ifnum\dynkin@ply<3\relax% \dynkinEdge*{DoubleEdge}% @@ -5211,7 +5295,11 @@ \Cdynkin{}% \ifdynkin@Coxeter% \dynkinEdge*{SingleEdge}{0}{1}% - \dynkinEdgeLabel{0}{1}{4}% + \ifdynkin@Coxeter@above% + \dynkinEdgeLabel{0}{1}{4}% + \else% + \dynkinEdgeLabel*{0}{1}{4}% + \fi% \else% \dynkinEdge*{DoubleEdge}{0}{1}% \fi% @@ -5391,8 +5479,11 @@ \xdef\dynkin@gonality{6}% \dynkinPlaceRootHere*{0}{below}{above}% \dynkinEast% + \let\extended@G@old@order\dynkin@ordering% + \xdef\dynkin@ordering{Carter}% \Gdynkin% \dynkinEdge*{SingleEdge}{0}{1}% + \xdef\dynkin@ordering{\extended@G@old@order}% }% %% \extendedHdynkin @@ -5423,7 +5514,11 @@ \dynkin@rank=1\relax% \Adynkin% \dynkinEdge*{SingleEdge}{0}{1}% - \dynkinEdgeLabel{0}{1}{\infty}% + \ifdynkin@Coxeter@above% + \dynkinEdgeLabel{0}{1}{\infty}% + \else% + \dynkinEdgeLabel*{0}{1}{\infty}% + \fi% }% \newcount\dynkin@height@minus@one% %% \twistedAdynkin @@ -5531,6 +5626,8 @@ \fi% \fi% }% + +\newif\iftwisted@D@old@dynkin@reverse@arrows %% \twistedDdynkin %% Draws a twisted D series affine Dynkin diagram. \NewDocumentCommand\twistedDdynkin{}% @@ -5546,7 +5643,17 @@ \dynkinPlaceRootRelativeTo*{1}{0}{east}{below}{above}% \dynkinPlaceRootRelativeTo*{2}{1}{east}{below}{above}% \dynkinEdge*{SingleEdge}{0}{1}% - \dynkinTripleEdge*{2}{1}% + \ifdynkin@reverse@arrows% + \global\dynkin@reverse@arrowsfalse\relax% + \else% + \global\dynkin@reverse@arrowstrue\relax% + \fi% + \dynkinTripleEdge*{1}{2}% + \ifdynkin@reverse@arrows% + \global\dynkin@reverse@arrowsfalse\relax% + \else% + \global\dynkin@reverse@arrowstrue\relax% + \fi% \else% \ClassError% {Dynkin diagrams}% diff --git a/graphics/pgf/contrib/dynkin-diagrams/dynkin-diagrams.tex b/graphics/pgf/contrib/dynkin-diagrams/dynkin-diagrams.tex index 5f4bb33e41..b3f0be4341 100644 --- a/graphics/pgf/contrib/dynkin-diagrams/dynkin-diagrams.tex +++ b/graphics/pgf/contrib/dynkin-diagrams/dynkin-diagrams.tex @@ -1,7 +1,7 @@ \documentclass{amsart} \title[The Dynkin diagrams package]% {The Dynkin diagrams package \\ -Version 3.141\,592\,653\,589\,793\,238\,4} +Version 3.141\,592\,653\,589\,793\,238\,46} %% My name: \makeatletter \DeclareRobustCommand{\scotsMc}{\scotsMcx{c}} @@ -20,7 +20,8 @@ Version 3.141\,592\,653\,589\,793\,238\,4} \author{Ben \scotsMc{}Kay} \address{School of Mathematical Sciences, University College Cork, Cork, Ireland} \email{b.mckay@ucc.ie} -\date{2 June 2023} +\date{6 July 2024} +\thanks{Thanks to Jeffrey Adams, Paul Aspinwall, Mikhail Borovoi, Fran Burstall, Michiel Van Couwenberghe, Xu Gao, Skip Garibaldi, Enrico Gregorio, Mamuka Jibladze, Tasho Kaletha, Jordan Lambert, Sriotchilism O'Zaic, Gopal Prasad, Anthony Pulido, Andres Sambarino, Paul Schwahn, Felix Weinstein, Niels Wen and Gordon Williams.} \usepackage[T1]{fontenc} \usepackage[utf8]{inputenx} \usepackage{etoolbox} @@ -168,6 +169,11 @@ before upper={\widowpenalties=3 10000 10000 150}} \begin{document} \maketitle +\renewcommand\do[1]{\dyn#1} +\renewcommand{\wdtA}{3cm} +\begin{dynkinTable}{The Dynkin diagrams of the reduced simple root systems \cite{Bourbaki:2002} pp. 265--290, plates I--IX}{2.25cm}{2.5cm} +\docsvlist{A{},B{},C{},D{},E6,E7,E8,F4,G2} +\end{dynkinTable} \begin{center} \begin{varwidth}{\textwidth} \tableofcontents @@ -176,6 +182,8 @@ before upper={\widowpenalties=3 10000 10000 150}} \setlength{\arrayrulewidth}{1.5pt} +\newpage + \section{Quick introduction} \begin{tcolorbox}[title={Load the Dynkin diagram package (see options below)}] \begin{Verbatim} @@ -202,7 +210,6 @@ The Dynkin diagram of \(B_3\) is \draw[very thick,red] (root 1) to [out=-45, in=-135] (root 3); \end{dynkinDiagram} \end{tcblisting} -\newpage \section{Interaction with \TikZ} Inside a \TikZ environment, default behaviour is to draw from the origin, so you can draw around the diagram: \begin{tcblisting}{title={Inside a \TikZ environment}} @@ -228,15 +235,6 @@ The Dynkin diagram of \(B_3\) is \end{tikzpicture} \end{tcblisting} -\newpage - -\renewcommand\do[1]{\dyn#1} -\renewcommand{\wdtA}{3cm} -\begin{dynkinTable}{The Dynkin diagrams of the reduced simple root systems \cite{Bourbaki:2002} pp. 265--290, plates I--IX}{2.25cm}{2.5cm} -\docsvlist{A{},B{},C{},D{},E6,E7,E8,F4,G2} -\end{dynkinTable} - - \section{Set options globally} \begin{tcolorbox}[title={Most options set globally \dots}] @@ -251,6 +249,7 @@ The Dynkin diagram of \(B_3\) is densely dashed}} \end{Verbatim} \end{tcolorbox} + You can also pass options to the package in \verb!\usepackage!. \emph{Danger:} spaces in option names are replaced with hyphens: \texttt{edge length=1cm} is \texttt{edge-length=1cm} as a global option; moreover you should drop the extension \verb!/.style! on any option with spaces in its name (but not otherwise). For example, \begin{tcolorbox}[title={\dots or pass global options to the package}] @@ -275,6 +274,9 @@ The Dynkin diagram of \(B_3 \times A_2\) is \dynkins{B3|A2}. The Dynkin diagram of \(B_3 \times A_2\) is \begin{DynkinDiagrams}{B3|A2}\end{DynkinDiagrams} \end{tcblisting} + +\newpage + Each factor can have its own options. \begin{tcblisting}{title={Environment}} The Dynkin diagram of \(B_3 \times A_2\) is @@ -297,11 +299,11 @@ They are spaced out by the length of one edge between successive diagrams; chang \endfoot \endlastfoot A_1\times A_1&\dynkins{A1|A1}&\texttt{\detokenize{\dynkins}\{A1|A1\}}\\ -A_2&\dynkins{A2}&\texttt{\detokenize{\dynkins}\{A2\}}\\ -B_2&\dynkins{B2}&\texttt{\detokenize{\dynkins}\{B2\}}\\ -C_2&\dynkins{C2}&\texttt{\detokenize{\dynkins}\{C2\}}\\ -D_2&\dynkins{D2}&\texttt{\detokenize{\dynkins}\{D2\}}\\ -G_2&\dynkins{G2}&\texttt{\detokenize{\dynkins}\{G2\}}\\ +A_2&\dynkin A2&\texttt{\detokenize{\dynkin} A2}\\ +B_2&\dynkin B2&\texttt{\detokenize{\dynkin} B2}\\ +C_2&\dynkin C2&\texttt{\detokenize{\dynkin} C2}\\ +D_2&\dynkin D2&\texttt{\detokenize{\dynkin} D2}\\ +G_2&\dynkin G2&\texttt{\detokenize{\dynkin} G2}\\ \end{longtable} \section{Coxeter diagrams} @@ -333,6 +335,35 @@ G_2&\dynkins{G2}&\texttt{\detokenize{\dynkins}\{G2\}}\\ [Coxeter,gonality=n]I{}} \end{dynkinTable} +\newpage + +Some people prefer Coxeter diagrams to have these labels appear on the bottom of the diagram, so say \verb!Coxeter above=false!, most likely as a global option. + +\pgfkeys{/Dynkin diagram, +Coxeter above=false} + +\renewcommand\do[1]{\dyn#1} +\begin{dynkinTable}{The Coxeter diagrams of the simple reflection groups}{2.25cm}{6cm} +\forDynkinSemicolonsvlist{\do}{ +[Coxeter]A{}; +[Coxeter]B{}; +[Coxeter]C{}; +[Coxeter]D{}; +[Coxeter]E6; +[Coxeter]E7; +[Coxeter]E8; +[Coxeter]F4; +[Coxeter,gonality=n]G2; +[Coxeter]H2; +[Coxeter]H3; +[Coxeter]H4; +[Coxeter,gonality=n]I{}} +\end{dynkinTable} + +\pgfkeys{/Dynkin diagram, +Coxeter above=true} + + \section{Satake diagrams}\label{section:Satake} \begin{tcblisting}{title={Satake diagrams use the standard name instead of a rank}} \(A_{IIIb}=\dynkin A{IIIb}\) @@ -340,6 +371,8 @@ G_2&\dynkins{G2}&\texttt{\detokenize{\dynkins}\{G2\}}\\ We use a solid gray bar to denote the folding of a Dynkin diagram, rather than the usual double arrow, since the diagrams turn out simpler and easier to read. +\newpage + \renewcommand\do[1]{\dyn#1} \begin{dynkinTable}{The Satake diagrams of the real simple Lie algebras \cite{Helgason:2001} p. 532--534}{2.75cm}{3cm} \docsvlist{A{I},A{II},A{IIIa},A{IIIb},A{IV},B{I},B{II},C{I},C{IIa},C{IIb}, @@ -968,7 +1001,7 @@ D_4 & \dynkin[label,ordering=Kac]E6 \end{tcblisting} Default is Bourbaki. -Sources are Adams \cite{Adams:1996} p. 56--57, Bourbaki \cite{Bourbaki:2002} p. pp. 265--290 plates I-IX, Carter \cite{Carter:2005} p. 540--609, Dynkin \cite{Dynkin:1952}, Kac \cite{Kac:1990} p. 43. +Sources are Adams \cite{Adams:1996} p. 56--57, Bourbaki \cite{Bourbaki:2002} p. 265--290 plates I-IX, Carter \cite{Carter:2005} p. 540--609, Dynkin \cite{Dynkin:1952} (reprinted, translated into English, in Dynkin \cite{Dynkin:2000} p. 180), Kac \cite{Kac:1990} p. 43. \NewDocumentCommand\tablerow{mm}% {% @@ -1108,9 +1141,31 @@ D[3]4,E[2]6} \renewcommand{\do}[1]{\dyn[extended,Coxeter]#1} \begin{dynkinTable}{The extended (affine) Coxeter diagrams}{3cm}{6cm} -\docsvlist{A{},B{},C{},D{},E6,E7,E8,F4,G2,H3,H4,I1} +\docsvlist{A{},B{},C{},D{},E6,E7,E8,F4,G2,H2,H3,H4,I1} \end{dynkinTable} + +\section{Witt symbols} + +The \emph{Witt symbol} \cite{Johnson.et.al.1999,McMullen.Schulte:2002,Witt:1941} is a different notation for the various series: +\[ +\begin{array}{rll} +\text{Witt symbol}&\text{Cartan symbol}\\ +P_{n+1}&A_n\\ +S_{n+1}&B_n\\ +R_{n+1}&C_n\\ +Q_{n+1}&D_n\\ +T_{n+1}&E_n&n=6,7,8\\ +U_5&F_4\\ +V_3&G_2\\ +W_2&I_1 +\end{array} +\] +\begin{tcblisting}{title={Witt symbols}} +\dynkin[extended]P7, \dynkin[extended]Q7, \dynkin[extended]T7 +\end{tcblisting} + + \newpage \section{Kac style} diff --git a/graphics/pgf/contrib/fancyqr/README.md b/graphics/pgf/contrib/fancyqr/README.md index 63432f93e0..ed09e369ce 100644 --- a/graphics/pgf/contrib/fancyqr/README.md +++ b/graphics/pgf/contrib/fancyqr/README.md @@ -5,7 +5,7 @@ [<img src="https://github.com/EagleoutIce/fancyqr/blob/gh-pages/preview-1.png?raw=true" width="600"/>](qr-example.tex) A simple package to create fancy qr-codes with the help of the [`qrcode`][qrcode]-package. -You may use `\fancyqr` just like the normal `\qrcode` (`\fancyqr[<qr-options>]{<url>}`). See the [documentation](https://media.githubusercontent.com/media/EagleoutIce/fancyqr/gh-pages/build/fancyqr-doc.pdf). +You may use `\fancyqr` just like the normal `\qrcode` (`\fancyqr[<qr-options>]{<url>}`). See the [documentation](https://media.githubusercontent.com/media/EagleoutIce/fancyqr/gh-pages/build/fancyqr-doc.pdf). If you just want to create a simple qr-code, please refer to the [minimal example](qr-minimal.tex). *fancyqr* is actively developed by *Florian Sihler* (contact me at: <florian.sihler@uni-ulm.de>) under the [GPLv3 License](LICENSE). I am very happy about every contribution (see [CONTRIBUTING.md](CONTRIBUTING.md)). You can find it on CTAN (<https://www.ctan.org/pkg/fancyqr>). @@ -13,22 +13,28 @@ If you do want to hide a center square (e.g., because you want to embed an image At the moment, there are six other styles (`flat`, `frame`, `blobs`, `glitch`, and `dots`) that you can load (locally) by using `\FancyQrLoad{<name>}`. The default style is named `default` and can be 'reset' by `\FancyQrLoad{default}` or `\FancyQrLoadDefault`. There are the following extra qr-options (you can set all of them with `\fancyqrset{<keys>}`): -| Option | Type | Default | Explanation | -| ----------------- | ------- | :------: | ---------------------------------------------------------- | -| `image` | LaTeX | | Automatically center an image.[^1] | -| `image padding` | number | | Additionally hide blocks (x & y) around the image. | -| `image x padding` | number | `0` | Additionally hide blocks (x) around the image. | -| `image y padding` | number | `0` | Additionally hide blocks (y) around the image. | -| `gradient` | boolean | true | Toggle the color gradient | -| `color` | color | | Disables the `gradient` and sets the qr color accordingly. | -| `l color` | color | `purple` | Set the top left gradient color. | -| `left color` | color | | Alias for `l color`. | -| `r color` | color | `teal` | Set the bottom right gradient color. | -| `right color` | color | | Alias for `r color`. | -| `gradient angle` | angle | `135` | Change the gradient angle. | -| `random color` | colors | | Allow to set a random color pool to pick from. | -| `width` | length | | Alias for [`qrcode`'s][qrcode] `height` option. | -| `size` | length | | Alias for [`qrcode`'s][qrcode] `height` option. | + +| Option | Type | Default | Explanation | +| ----------------- | ----------- | :------: | ------------------------------------------------------------------------------------------------------------------------------------------ | +| `classic` | boolean | `false` | Use the classic qr-code style (black with flat rectangles, this loads the `flat` style). | +| `color` | color | | Disables the `gradient` and sets the qr color accordingly. | +| `gradient angle` | angle | `135` | Change the gradient angle. | +| `gradient` | boolean | true | Toggle the color gradient | +| `image` | LaTeX | | Automatically center an image (you have to care for the size and maybe adjust the `version` and `level` to keep the qr-code readable).[^1] | +| `image padding` | number | | Additionally hide blocks (x & y) around the image. | +| `image x padding` | number | `0` | Additionally hide blocks (x) around the image. | +| `image y padding` | number | `0` | Additionally hide blocks (y) around the image. | +| `l color` | color | `purple` | Set the top left gradient color. | +| `left color` | color | | Alias for `l color`. | +| `level` | L/M/Q/H | `M` | [`qrcode`][qrcode] option affecting error correction (low, medium, quartile, high). | +| `padding` | flag | | [`qrcode`][qrcode] option adding sufficient additional space around the qr-code. | +| `r color` | color | `teal` | Set the bottom right gradient color. | +| `random color` | colors | | Allow to set a random color pool to pick from. | +| `right color` | color | | Alias for `r color`. | +| `size` | length | | Alias for [`qrcode`'s][qrcode] `height` option. | +| `tight` | flag | | [`qrcode`][qrcode] option adding no additional space around the qr-code. | +| `version` | [0..40] ∈ ℕ | `0` | [`qrcode`][qrcode] option affecting the size (tries to be as small as possible). | +| `width` | length | | Alias for [`qrcode`'s][qrcode] `height` option. | The defaults are set like this: diff --git a/graphics/pgf/contrib/fancyqr/fancyqr-doc.pdf b/graphics/pgf/contrib/fancyqr/fancyqr-doc.pdf Binary files differindex c96c62abbc..cccceaca24 100644 --- a/graphics/pgf/contrib/fancyqr/fancyqr-doc.pdf +++ b/graphics/pgf/contrib/fancyqr/fancyqr-doc.pdf diff --git a/graphics/pgf/contrib/fancyqr/fancyqr-doc.tex b/graphics/pgf/contrib/fancyqr/fancyqr-doc.tex index 1f3b00ba2d..52338832c5 100644 --- a/graphics/pgf/contrib/fancyqr/fancyqr-doc.tex +++ b/graphics/pgf/contrib/fancyqr/fancyqr-doc.tex @@ -18,6 +18,7 @@ \usepackage{fancyqr} \usepackage{xcolor} \usepackage[tex]{listings} +\usepackage{amssymb} \lstdefinelanguage{ltx}{ language={[LaTeX]TeX}, @@ -34,14 +35,13 @@ \texorpdfstring{Florian Sihler\medskip\\* \fancyqr{https://github.com/EagleoutIce/fancyqr} }{Florian Sihler}} -\date{Version v2.0 \textendash{} 2024/04/13} - +\date{Version v2.1 \textendash{} 2024/10/05} \begin{document} \maketitle - \texttt{fancyqr} is a simple package to create fancy qr codes with the help of the \textit{\href{https://www.ctan.org/pkg/qrcode}{qrcode}}-package. + \texttt{fancyqr} is a simple package to create fancy qr-codes with the help of the \textit{\href{https://www.ctan.org/pkg/qrcode}{qrcode}}-package. You can use the |\fancyqr|-macro just like the normal |\qrcode|.\footnote{\ltx{\\fancyqr[<qr-options>]\{<url>\}}} If you do want to hide a center square (e.g, because you want to embed an image) you can use |\FancyQrDoNotPrintSquare{<x>}{<y>}| to hide a rectangle with radius x and y set from the center. If you choose this option, the default |\FancyQrRoundCut| that rounds cut corners can be changed with |\FancyQrHardCut|. @@ -66,20 +66,25 @@ \toprule \multicolumn{1}{l}{Option} & Type & \multicolumn{1}{c}{Default} & Explanation \\ \midrule - image & \LaTeX & & Automatically center an image.\footnote{The package will automatically calculate the required \ltx{\\FancyQrDoNotPrintSquare} (you have to make sure that the qr code still has enough information to be readable). Therefore, the image will not scale with the qr code.} \\ + classic & boolean & false & Use the classic qr-code style (black with flat rectangles, this loads the |flat| style). \\ + color & color & & Disables the |gradient| and sets the color accordingly. \\ + gradient & boolean & true & Toggle the color gradient \\ + gradient angle & angle & 135 & Change the gradient angle. \\ + image & \LaTeX & & Automatically center an image (you have to care for the size and maybe adjust the |version| and |level| to keep the qr-code readable).\footnote{The package will automatically calculate the required \ltx{\\FancyQrDoNotPrintSquare} (you have to make sure that the qr-code still has enough information to be readable). Therefore, the image will not scale with the qr-code.} \\ image padding & number & & Additionally hide blocks (x \& y) around the image. \\ image x padding & number & 0 & Additionally hide blocks (x) around the image. \\ image y padding & number & 0 & Additionally hide blocks (y) around the image. \\ - gradient & boolean & true & Toggle the color gradient \\ - color & color & & Disables the |gradient| and sets the color accordingly. \\ l color & color & purple & Set the top left gradient color. \\ left color & color & & Alias for |l color|. \\ + level & L/M/Q/H & M & |qrcode| option affecting error correction (low, medium, quartile, high). \\ + padding & flag & & |qrcode| option adding sufficient additional space around the qr-code. \\ r color & color & teal & Set the bottom right gradient color. \\ - right color & color & & Alias for |r color|. \\ - gradient angle & angle & 135 & Change the gradient angle. \\ random color & colors & & Allow to set a random color pool to pick from. \\ - width & length & & Alias for |qrcode|'s |height| option. \\ + right color & color & & Alias for |r color|. \\ size & length & & Alias for |qrcode|'s |height| option. \\ + tight & flag & & |qrcode| option adding no additional space around the qr-code. \\ + version & \([0..40] \in \mathbb{N}\) & 0 & |qrcode| option affecting the size (tries to be as small as possible). \\ + width & length & & Alias for |qrcode|'s |height| option. \\ \bottomrule \end{tabular} \caption{Overview of special qr-options.} diff --git a/graphics/pgf/contrib/fancyqr/fancyqr-style-blobs.code b/graphics/pgf/contrib/fancyqr/fancyqr-style-blobs.code index bfc7e776ec..9746c52376 100644 --- a/graphics/pgf/contrib/fancyqr/fancyqr-style-blobs.code +++ b/graphics/pgf/contrib/fancyqr/fancyqr-style-blobs.code @@ -3,11 +3,11 @@ \@tempcnta=\z@ \roundjoin \roundcap -\moveto(0,0) +\moveto(.5,.5) \loop \advance\@tempcnta by 30 -\edef\rad{\fpeval{.2*\qr@modulesize+.115*\qr@modulesize*abs(rand())}}% fixed rand for both -\lineto(\fpeval{cos(\@tempcnta)*\rad},\fpeval{sin(\@tempcnta)*\rad}) +\edef\rad{\fpeval{.1*\qr@modulesize+.13*\qr@modulesize*abs(rand())}}% fixed rand for both +\lineto(\fpeval{cos(\@tempcnta)*\rad+.5},\fpeval{sin(\@tempcnta)*\rad+.5}) \ifnum\@tempcnta<360\relax \repeat \fillpath diff --git a/graphics/pgf/contrib/fancyqr/fancyqr-style-dots.code b/graphics/pgf/contrib/fancyqr/fancyqr-style-dots.code index f7fd55e139..ced7e7a720 100644 --- a/graphics/pgf/contrib/fancyqr/fancyqr-style-dots.code +++ b/graphics/pgf/contrib/fancyqr/fancyqr-style-dots.code @@ -1,4 +1,4 @@ -\def\fancyqr@dots@circle{\put(.5,.5){\circle*{\@ne}}} +\def\fancyqr@dots@circle{\put(.5,.5){\circle*{\@ne}}}% % . \newpattern0000{\fancyqr@dots@circle}% % | | - - diff --git a/graphics/pgf/contrib/fancyqr/fancyqr-style-swift.code b/graphics/pgf/contrib/fancyqr/fancyqr-style-swift.code deleted file mode 100644 index 529213f04f..0000000000 --- a/graphics/pgf/contrib/fancyqr/fancyqr-style-swift.code +++ /dev/null @@ -1,2 +0,0 @@ -\PackageWarning{fancyqr}{Currently, swift is not supported :/} -\FancyQrLoadDefault
\ No newline at end of file diff --git a/graphics/pgf/contrib/fancyqr/fancyqr.sty b/graphics/pgf/contrib/fancyqr/fancyqr.sty index bb2b9f3ebb..200fa7f371 100644 --- a/graphics/pgf/contrib/fancyqr/fancyqr.sty +++ b/graphics/pgf/contrib/fancyqr/fancyqr.sty @@ -2,7 +2,7 @@ % Licensed under GNU General Public License version 3 % https://opensource.org/licenses/gpl-3.0.html \def\filename{fancyqr} -\ProvidesPackage{\filename}[2024/04/13 version v2.0 Fancy QR-Codes] +\ProvidesPackage{\filename}[2024/10/05 version v2.1 Fancy QR-Codes] \RequirePackage{pict2e, xfp, qrcode} % element @@ -32,18 +32,21 @@ \def\GetPattern{% \ifcsname qcc\@up\@left\@right\@down\endcsname \csname qcc\@up\@left\@right\@down\endcsname -\else\rule\qr@modulesize\z@\fi} +\fi} % backwards compatibility \def\fancyqr@clap#1{\hb@xt@\z@{\hss#1\hss}} -\newdimen\fancyqr@edge@compensate -\fancyqr@edge@compensate=.15\p@ +\newdimen\fancyqr@edge@compensate \fancyqr@edge@compensate=.15\p@ % is larger to be compensated by overlaps \def\qrm{\dimexpr\qr@modulesize+\fancyqr@edge@compensate\relax} \long\def\qr@newpattern#1#2#3#4#5{% -\expandafter\def\csname qcc#1#2#3#4\endcsname{\parbox[b][\qr@modulesize]\qr@modulesize{\kern-\fancyqr@edge@compensate\relax\smash{\fancyqr@clap{\picture(\@ne,\@ne)#5\endpicture}}}% -}} +\expandafter\def\csname qcc#1#2#3#4\endcsname{% scaling happens implicitly by the unitlength + \put(\the\j,\the\numexpr\@max@y-\the\i){% + \advance\unitlength by\fancyqr@edge@compensate\relax + #5% + }}% +} % [#3][#2] % [#4][#1] @@ -97,11 +100,13 @@ \def\@fancy@qr@default@name{default} \def\FancyQrLoad#1{% +\protected@edef\fancyqr@loaded@style{#1}% \def\fancyqr@rounded@rect@close{\fillpath}% -\let\@tmp\newpattern\let\newpattern\qr@newpattern\@bsphack\def\@@tmp{#1}\ifx\@@tmp\@fancy@qr@default@name\FancyQrLoadDefault\else +\let\@tmp\newpattern\let\newpattern\qr@newpattern\@bsphack\def\@@tmp{#1}% +\ifx\@@tmp\@fancy@qr@default@name\FancyQrLoadDefault\else \expandafter\edef\csname pingu@lib@#1@atcode\endcsname{\the\catcode`\@}% \catcode`\@=11\relax -\input{fancyqr-style-#1.code} +\input{fancyqr-style-#1.code}% \catcode`\@=\csname pingu@lib@#1@atcode\endcsname \fi\@esphack\let\newpattern\@tmp\let\@tmp\relax} @@ -145,57 +150,63 @@ \def\fancy@qr@printmatrix#1{% \def\qr@white{0}\def\qr@black{1}% \protected@edef\fancyqr@currprint{#1}% - \let\qr@black@fixed\qr@black - \let\qr@white@fixed\qr@white - \let\qr@black@format\qr@black - \let\qr@white@format\qr@white + \let\qr@black@fixed\qr@black \let\qr@white@fixed\qr@white + \let\qr@black@format\qr@black \let\qr@white@format\qr@white %Set module size - \qr@modulesize=\qr@desiredheight + \qr@modulesize=\qr@desiredheight\relax \divide\qr@modulesize by \qr@size\relax - \unitlength=\dimexpr\qr@modulesize+\fancyqr@edge@compensate\relax % initialize unitlength once + \unitlength=\dimexpr\qr@modulesize\relax % will be re-set in placement \if@fancyqr@image@% image is in \fancyqr@imgbox \edef\@x{\fpeval{ceil((.5\wd\fancyqr@imgbox)/\qr@modulesize)+\fancyqr@img@padding@x}}% \edef\@y{\fpeval{ceil((.5\ht\fancyqr@imgbox+.5\dp\fancyqr@imgbox)/\qr@modulesize)+\fancyqr@img@padding@y}}% \FancyQrDoNotPrintSquare\@x\@y \fi \qr@minipagewidth=\qr@desiredheight - \ifqr@tight \advance\qr@minipagewidth by -\qr@modulesize \else \advance\qr@minipagewidth by 7\qr@modulesize \fi - \minipage\qr@minipagewidth% - \hfuzz=\qr@modulesize - \baselineskip=\qr@modulesize - \lineskiplimit=\z@ \lineskip=\z@ \parskip=\z@ - \ifqr@tight\else\rule\z@{4\qr@modulesize}\par\fi% %Blank space at top. + \ifqr@tight\else \advance\qr@minipagewidth by 8\qr@modulesize\relax \fi + \begingroup \edef\@max@x{\qr@numberofrowsinmatrix\fancyqr@currprint}\edef\@half@max@x{\the\numexpr\@max@x/2}% \edef\@max@y{\qr@numberofcolsinmatrix\fancyqr@currprint}\edef\@half@max@y{\the\numexpr\@max@y/2}% + % redefine the border to be white! + \qr@for \i=\@ne to \@max@y by \@ne{% + % redefine the limits to be white! + \qr@storetomatrix\fancyqr@currprint{\the\numexpr\z@}{\the\i}{\qr@white}% + \qr@storetomatrix\fancyqr@currprint{\the\numexpr\@max@x+\@ne}{\the\i}{\qr@white}% + }% + \qr@for \i=\@ne to \@max@x by \@ne{% + \qr@storetomatrix\fancyqr@currprint{\the\i}{\the\numexpr\z@}{\qr@white}% + \qr@storetomatrix\fancyqr@currprint{\the\i}{\the\numexpr\@max@y+\@ne}{\qr@white}% + }% \edef\@do@x@min{\the\numexpr\@half@max@x-\fancy@qr@donotprint@center@x-\@ne}% \edef\@do@x@max{\the\numexpr\@half@max@x+\fancy@qr@donotprint@center@x+\@ne}% \edef\@do@y@min{\the\numexpr\@half@max@y-\fancy@qr@donotprint@center@y-\@ne}% \edef\@do@y@max{\the\numexpr\@half@max@y+\fancy@qr@donotprint@center@y+\@ne}% - \qr@for \i=\@ne to \@max@y by \@ne{% - \ifqr@tight\else\rule{4\qr@modulesize}\z@\fi% %Blank space at left. - \qr@for \j=\@ne to \@max@x by \@ne{% + \edef\@tmp@tight{\ifqr@tight\z@\else-4\fi}% + \picture(\qr@minipagewidth,\qr@minipagewidth)(\the\numexpr\@ne+\@tmp@tight,\@tmp@tight) + \qr@for \i=\@ne to \@max@y by \@ne{\qr@for \j=\@ne to \@max@x by \@ne{% \qr@fancy@updateif\i\j \iffancy@qr@do@print@ - \edef\@mid{\qr@matrixentry\fancyqr@currprint{\the\i}{\the\j}}% - \ifnum\@mid=\qr@white - \rule\qr@modulesize\z@ - \else% if not white, get its pattern - \iffancy@qr@roundcut@\qr@fancy@clear@surround\fancyqr@currprint{\the\i}{\the\j}\fi - \edef\@up{\qr@matrixentry\fancyqr@currprint{\the\numexpr\the\i-1}{\the\j}}% - \edef\@left{\qr@matrixentry\fancyqr@currprint{\the\i}{\the\numexpr\the\j-1}}% - \edef\@right{\qr@matrixentry\fancyqr@currprint{\the\i}{\the\numexpr\the\j+1}}% - \edef\@down{\qr@matrixentry\fancyqr@currprint{\the\numexpr\the\i+1}{\the\j}}% - \FancyQrColor{\GetPattern}% - \fi\else \rule\qr@modulesize\z@\fi - }\par}% - \ifqr@tight\else\rule\z@{4\qr@modulesize}\par\fi - \endminipage - \if@fancyqr@image@\nobreak - \llap{\parbox\qr@minipagewidth{\centering\usebox\fancyqr@imgbox}% - % if half the width is odd, offset by half a module width, done by centering - \edef\@halfcheck{\fpeval{round(\fancy@qr@donotprint@center@x/2)}}% - \ifodd\@halfcheck \kern.5\qr@modulesize\fi - }\fi + \edef\@mid{\qr@matrixentry\fancyqr@currprint{\the\i}{\the\j}}% + \ifnum\@mid=\qr@black\relax + \iffancy@qr@roundcut@\qr@fancy@clear@surround\fancyqr@currprint{\the\i}{\the\j}\fi + \edef\@up{\qr@matrixentry\fancyqr@currprint{\the\numexpr\the\i-\@ne}{\the\j}}% + \edef\@left{\qr@matrixentry\fancyqr@currprint{\the\i}{\the\numexpr\the\j-\@ne}}% + \edef\@right{\qr@matrixentry\fancyqr@currprint{\the\i}{\the\numexpr\the\j+\@ne}}% + \edef\@down{\qr@matrixentry\fancyqr@currprint{\the\numexpr\the\i+\@ne}{\the\j}}% + \FancyQrColor{\GetPattern}% + \fi\fi + }}% + \if@fancyqr@image@ + % floating point mid + \put(\fpeval{.5*\@max@x+.5},\fpeval{.5*\@max@y}){% + \edef\@halfcheck{\fpeval{round(\fancy@qr@donotprint@center@x/2)}}% + \raisebox{-.5\height}{\clap{% TODO: remove this offset + \ifodd\@halfcheck \else\kern\qr@modulesize\fi + \usebox\fancyqr@imgbox + }}% + }% + \fi + \endpicture + \endgroup }% \def\fancy@qr@setup#1{% @@ -263,6 +274,15 @@ \define@key{fancyqr}{random color}{\@fancyqr@randomcolor@true\def\@fancyqr@random@colors{#1}} \define@key{fancyqr}{width}{\setkeys{qr}{height=#1}} \define@key{fancyqr}{size}{\setkeys{qr}{height=#1}} +% \fancyqr@loaded@style +\def\fancyqr@flat@style{flat} +\define@boolkey{fancyqr}[@fancyqr@]{classic}[true]{} % if@fancyqr@classic +\def\fancyqr@classic{% +\ifx\fancyqr@loaded@style\fancyqr@flat@style\else\FancyQrLoad{\fancyqr@flat@style}\fi +\setkeys{fancyqr}{% + gradient=false,color=black,l color=black,r color=black% +}% +} \def\fancyqrset#1{\setkeys{qr,fancyqr}{#1}} \fancyqrset{image padding=0,gradient=true,gradient angle=135,r color=teal,l color=purple} @@ -275,12 +295,10 @@ \newcommand\@@fancyqr[1][]{\begingroup\@fancyqr@init \ifqr@starinvoked\qr@hyperlinkfalse\fi \setkeys{qr,fancyqr}{#1}% +\if@fancyqr@classic\fancyqr@classic\fi% \if@fancyqr@randomcolor@% \ifcsname pgfmathdeclarerandomlist\endcsname\else \PackageError{fancyqr}{Random colors requested but pgfmath not loaded}{Please load pgfmath if you want this}\fi \pgfmathdeclarerandomlist{@@fancyqr@@randomcol}{\@fancyqr@random@colors}\let\FancyQrColor\@@fancyqr@color@random\else\if@fancyqr@gradient\let\FancyQrColor\@@fancyqr@color@gradient\fi\fi \bgroup\qr@verbatimcatcodes\qr@setescapedspecials\qrcode@in} \endinput - -% TODO: NEGATIVE PATTERNS IF MIDDLE IS 0 -% => make rounded negative corners diff --git a/graphics/pgf/contrib/fancyqr/qr-example.tex b/graphics/pgf/contrib/fancyqr/qr-example.tex index e0518297eb..fe32ae73c9 100644 --- a/graphics/pgf/contrib/fancyqr/qr-example.tex +++ b/graphics/pgf/contrib/fancyqr/qr-example.tex @@ -3,6 +3,7 @@ % https://opensource.org/licenses/gpl-3.0.html \documentclass{article} +\usepackage[T1]{fontenc} \usepackage{fontawesome} \usepackage{fancyqr} @@ -13,13 +14,18 @@ % to showcase scalebox \usepackage{graphicx} +% for the coding font +\usepackage{FiraMono} + \usepackage[active,tightpage]{preview} % for presentation \setlength\PreviewBorder{15pt} -\fancyqrset{size=3.25cm,level=H,padding} +\fancyqrset{size=3.25cm, level=H, padding} +\errorcontextlines=9999 \begin{document} \preview +\begin{center} % \FancyQrDoNotPrintSquare{8}{9} % \FancyQrHardCut \mbox{\FancyQrLoad{blobs}% @@ -28,6 +34,8 @@ \fancyqr{https://github.com/EagleoutIce/fancyqr}% \FancyQrLoad{dots}% \fancyqr[image={\textsf{\textbf{\textcolor{gray}{fancy}qr}}}, random color={@Red}{@Pink}{@Purple}{@DeepPurple}{@Indigo}{@Blue}{@Cyan}{@Teal}{@Green}{@Amber}{@Orange}{@DeepOrange}{@Brown}]{https://github.com/EagleoutIce/fancyqr}% -}% +}\\[4mm] +\texttt{\textbackslash \textbf{fancyqr}\{\textcolor{@Grey}{https://github.com/EagleoutIce/fancyqr}\}} +\end{center} \endpreview \end{document}
\ No newline at end of file diff --git a/graphics/pgf/contrib/fancyqr/qr-minimal.tex b/graphics/pgf/contrib/fancyqr/qr-minimal.tex new file mode 100644 index 0000000000..b912709808 --- /dev/null +++ b/graphics/pgf/contrib/fancyqr/qr-minimal.tex @@ -0,0 +1,12 @@ +\documentclass{article} + +\usepackage{fancyqr} + +\usepackage[active,tightpage]{preview} +\setlength\PreviewBorder{0pt} + +\begin{document} +\preview +\fancyqr[classic,padding]{https://github.com/EagleoutIce/fancyqr} +\endpreview +\end{document} diff --git a/graphics/pgf/contrib/lie-hasse/README b/graphics/pgf/contrib/lie-hasse/README index e63a82cc60..1bd63c4cba 100644 --- a/graphics/pgf/contrib/lie-hasse/README +++ b/graphics/pgf/contrib/lie-hasse/README @@ -2,9 +2,9 @@ ___________________________________ Lie Hasse - v1.0 + v1.01 - 3 February 2020 + 9 July 2024 ___________________________________ Authors : Ben McKay diff --git a/graphics/pgf/contrib/lie-hasse/lie-hasse.pdf b/graphics/pgf/contrib/lie-hasse/lie-hasse.pdf Binary files differindex 5be5791e7f..ed444cc7d1 100644 --- a/graphics/pgf/contrib/lie-hasse/lie-hasse.pdf +++ b/graphics/pgf/contrib/lie-hasse/lie-hasse.pdf diff --git a/graphics/pgf/contrib/lie-hasse/lie-hasse.sty b/graphics/pgf/contrib/lie-hasse/lie-hasse.sty index d1050d8839..6d727c841c 100644 --- a/graphics/pgf/contrib/lie-hasse/lie-hasse.sty +++ b/graphics/pgf/contrib/lie-hasse/lie-hasse.sty @@ -1,24 +1,20 @@ -% The Lie Hasse package. +% The Lie Hasse package. +% Version 1.01 % -% Version 1.0 % +% This package draws Hasse diagrams of root system posets of simple +% Lie algebraS, in LaTeX documents, using the TikZ package. % -% This package draws Hasse diagrams of root system posets of simple -% Lie algebraS, in LaTeX documents, using the TikZ package. +% Benjamin McKay +% b.mckay@ucc.ie % -% Benjamin McKay -% b.mckay@ucc.ie -% -% Released under the LaTeX Project Public License v1.3c or later, see +% Released under the LaTeX Project Public License v1.3c or later, see % http://www.latex-project.org/lppl.txt -% -% -% -% \NeedsTeXFormat{LaTeX2e}[1994/06/01] -\ProvidesPackage{lie-hasse}[2020/02/02 Lie Hasse] +\ProvidesPackage{lie-hasse}[2024/07/09 Lie Hasse] \RequirePackage[rgb]{xcolor} \RequirePackage{dynkin-diagrams} +\RequirePackage[outline]{contour} \usetikzlibrary{ positioning, fadings, @@ -26,7 +22,7 @@ %%% %%% Application programming interface: %%% - +\NewDocumentCommand\edgeQuote{m}{\contour{white}{\(#1\)}} \newif\iflie@hasse@threeD \lie@hasse@threeDtrue \xdef\lie@hasse@three@D@shift{.3}% @@ -40,14 +36,27 @@ \lie@hasse@show@heightfalse \newif\iflie@hasse@attach@dynkin@diagram \lie@hasse@attach@dynkin@diagramfalse - +\newif\iflie@hasse@show@levi +\lie@hasse@show@levitrue +\newif\iflie@hasse@show@unipotent@radical +\lie@hasse@show@unipotent@radicaltrue \pgfkeys{ /Lie Hasse diagram/.is family, /Lie Hasse diagram, - attach Dynkin diagram/.is if = lie@hasse@attach@dynkin@diagram, + attach Dynkin diagram/.is if + = lie@hasse@attach@dynkin@diagram, attach Dynkin diagram/.default = false, - edge/.style={ultra thick}, - edge quotes/.style={/Dynkin diagram/text style,auto,inner sep=2pt}, + edge/.style = { + ultra thick + }, + edge length/.estore in + = \lie@hasse@edge@length, + edge length = 1cm, + edge quotes/.style={ + /Dynkin diagram/text style, + auto, + inner sep=2pt + }, compact edge/.style={}, noncompact edge/.style={opacity=0}, compact root/.code={\dynkinDrawSolidRootMark{#1}}, @@ -67,7 +76,13 @@ show widths/.default = false, show height/.is if = lie@hasse@show@height, show height/.default = false, - z shift/.estore in = \lie@hasse@three@D@shift, + show Levi/.is if = lie@hasse@show@levi, + show Levi/.default = true, + show unipotent radical/.is if + = lie@hasse@show@unipotent@radical, + show unipotent radical/.default = true, + z shift/.estore in + = \lie@hasse@three@D@shift, z shift/.default = .3, top/.style={black!20,opacity=.4}, left/.style={black!20,opacity=.9}, @@ -90,13 +105,17 @@ \dynkin@integer@rank% }% {% - % Turn Satake codes into Dynkin diagram expressions in \dynkin@string. + % Turn Satake codes into Dynkin diagram + % expressions in \dynkin@string. \dynkin@grok@Satake@codes% }% - % Expand out any digits in \dynkin@string into multiples of the various root marks. + % Expand out any digits in \dynkin@string + % into multiples of the various root marks. \expand@Dynkin@Roots@Digits% - % Assign to \dynkin@roots the input string \dynkin@string with all . symbols removed, - % so we only get the symbols representing the marks for the various roots. + % Assign to \dynkin@roots the input string + % \dynkin@string with all . symbols removed, + % so we only get the symbols representing + % the marks for the various roots. \StrDel{\dynkin@string}{.}[\temp]% \xdef\dynkin@roots{\temp}% \StrLen{\dynkin@roots}[\temp]% @@ -115,58 +134,33 @@ {% \pgfkeys{/Lie Hasse diagram/for all roots={#1}{#2}}% }% +\newif\iflie@hasse@B +\newcount\dynkin@rank@plus@one% \NewDocumentCommand\hasse{O{}mm}% {% \ifdefined\filldraw% - \IfStrEq{#1}{}% - {% + \ifx#1\empty\relax% \studyHasseDiagramOfRootSystem{#2}{#3}% - }% - {% + \else% \studyHasseDiagramOfRootSystem[#1]{#2}{#3}% - }% + \fi% \label@item@count 0\relax% \expandafter\forcsvlist% - \expandafter\add@label% + \expandafter\lie@hasse@add@label% \expandafter{\dynkin@label@list}% \ifnum\dynkin@rank=1% \dynkin{A}{1}% \else% + \global\dynkin@rank@plus@one\the\dynkin@rank\relax% + \global\advance\dynkin@rank@plus@one by 1\relax% \add@compact@simple@roots@to@compact@roots{}% \IfStrEqCase{#2}% {%% {A}{\hasse@A}% - {B}{\hasse@BC}% - {C}{\hasse@BC*}% + {B}{\global\lie@hasse@Btrue\hasse@BC}% + {C}{\global\lie@hasse@Bfalse\hasse@BC}% {D}{\hasse@D}% - {E}% - {% - \ifnum\dynkin@rank=6% - \hasse@E@six% - \else% - \ifnum\dynkin@rank=7% - \hasse@E@seven% - \else% - \ifnum\dynkin@rank=8% - \hasse@E@eight% - \else - \ifnum\dynkin@rank>8% - \ClassError% - {Lie Hasse}% - {Rank of E series Hasse diagram: #3{}% - exceeds 8; not defined yet}% - {}% - \fi% - \ifnum\dynkin@rank<6% - \ClassError% - {Lie Hasse}% - {Rank of E series Hasse diagram: #3{} less than 6}% - {}% - \fi% - \fi% - \fi% - \fi% - }% + {E}{\hasse@E@series}% {F}% {% \ifnum\dynkin@rank=4% @@ -194,10 +188,11 @@ {Lie Hasse}% {Lie algebra series #2{} not A,B,C,D,E,F or G}% {}]% + \forAllPositiveRoots{\draw@lie@hasse@root}% \draw@simple@root@labels% \fi% \lie@hasse@write@widths{}% - \forAllPositiveRootsInHasseDiagram{\doRootThing}% + \forAllPositiveRoots{\doRootThing}% \iflie@hasse@attach@dynkin@diagram% \attachDynkin% \fi% @@ -205,13 +200,42 @@ \begin{tikzpicture}\hasse[#1]{#2}{#3}\end{tikzpicture}% \fi% }% +\NewDocumentCommand\hasse@E@series{}% +{% + \ifnum\dynkin@rank=6% + \hasse@E@six% + \else% + \ifnum\dynkin@rank=7% + \hasse@E@seven% + \else% + \ifnum\dynkin@rank=8% + \hasse@E@eight% + \else% + \ifnum\dynkin@rank>8% + \ClassError% + {Lie Hasse}% + {Rank of E series Hasse diagram: \the\dynkin@rank{}% + exceeds 8; not defined yet}% + {}% + \fi% + \ifnum\dynkin@rank<6% + \ClassError% + {Lie Hasse}% + {Rank of E series Hasse diagram: \the\dynkin@rank{}% + less than 6; not define yet}% + {}% + \fi% + \fi% + \fi% + \fi% +}% \NewDocumentCommand\drawRootAsDynkinSum{mm}% {% \rootSum{#1}{#2}{\rs}% \node at (#1;#2) {% \dynkin[% - labels=\rs,% + expand labels=\rs,% /Lie Hasse diagram/embedded Dynkin diagram]% {\dynkin@series}{\the\dynkin@rank}% };% @@ -239,25 +263,38 @@ }% \fi% }% - -\NewDocumentCommand\backwardsGtwo{}% +\NewDocumentCommand\hasseAttachGtwo{}% {% - \dynkin[label,backwards,x shift in edge lengths=-1]{G}{\dynkin@roots}% + \dynkin[vertical shift=0,% + edge length=\lie@hasse@edge@length,% +% label,% +% backwards,% +% x shift in edge lengths=-1 +]{G}{\dynkin@roots}% }% - \newcount\lie@hasse@E@shift% \NewDocumentCommand\attachDynkin{}% {% \IfStrEqCase{\dynkin@series}{% - {A}{\dynkin{A}{\dynkin@roots}}% - {B}{\dynkin{B}{\dynkin@roots}}% - {C}{\dynkin{C}{\dynkin@roots}}% - {D}{\dynkin[y shift in edge lengths=-1.5,label]% - {D}{\dynkin@roots}}% + {A}{\dynkin[vertical shift=0,% + edge length=\lie@hasse@edge@length]% + {A}{\dynkin@roots}}% + {B}{\dynkin[vertical shift=0,% + edge length=\lie@hasse@edge@length]% + {B}{\dynkin@roots}}% + {C}{\dynkin[vertical shift=0,% + edge length=\lie@hasse@edge@length]% + {C}{\dynkin@roots}}% + {D}{\dynkin[vertical shift=0,% + edge length=\lie@hasse@edge@length,% + y shift in edge lengths=-1.5,label]% + {D}{\dynkin@roots}}% {E}% {%% \ifnum\dynkin@rank=6% \dynkin[% + vertical shift=0,% + edge length=\lie@hasse@edge@length,% upsidedown,% labels*={1,...,6},% y shift in edge lengths=.5]% @@ -266,6 +303,8 @@ \lie@hasse@E@shift\the\dynkin@rank\relax% \advance\lie@hasse@E@shift by -2\relax% \dynkin[% + vertical shift=0,% + edge length=\lie@hasse@edge@length,% backwards,% upsidedown,% label,% @@ -274,16 +313,17 @@ {E}{\dynkin@roots}% \fi% }%% - {F}{\dynkin{F}{\dynkin@roots}}% - {G}{\backwardsGtwo{}}% + {F}{\dynkin[vertical shift=0,% + edge length=\lie@hasse@edge@length]% + {F}{\dynkin@roots}}% + {G}{\hasseAttachGtwo}% }% [\ClassError% {Lie Hasse}% - {Lie algebra series \dynkin@series{} not A,B,C,D,E,F or G when attaching Dynkin diagram}% + {Lie algebra series \dynkin@series{} % + not A,B,C,D,E,F or G when attaching Dynkin diagram}% {}]% }% - - \newif\iflie@hasse@multiple@diagrams \newcommand\doHasseDiagram[1]%% {% @@ -291,8 +331,7 @@ \ % \fi% \begin{tikzpicture}% - [show background rectangle,% - baseline=(current bounding box.east)]]% + [show background rectangle,baseline=(current bounding box.east)]% \hasse#1% \iflie@hasse@show@height% \rootSystemHeight{\lie@hasse@height}% @@ -327,33 +366,25 @@ }% \begin{center}% \expandafter\forscsvlist% - \expandafter\doHasseDiagram% - \expandafter{#1}% + \expandafter\doHasseDiagram\expandafter{#1}% \end{center}% }% - - %%% %%% Package internals: %%% - - \pgfdeclarelayer{Dynkin middle} \pgfdeclarelayer{Dynkin above} \pgfsetlayers{background,Dynkin behind,Dynkin middle,Dynkin above,main} - - \newcommand*\label@list@at[1]{\csname FOOBAR-#1\endcsname} \newcommand*\defn@label@list@entry[1]{\expandafter\def\csname FOOBAR-#1\endcsname} \def\add@to@label@list#1#2{\global\defn@label@list@entry{#1}{#2}}% \newcount\label@item@count% \label@item@count 0\relax% -\newcommand\add@label[1]% +\newcommand\lie@hasse@add@label[1]% {% - \advance\label@item@count by 1\relax% + \global\advance\label@item@count by 1\relax% \global\add@to@label@list{\the\label@item@count}{#1}% }% - \xdef\lie@hasse@compact@roots{}% \NewDocumentCommand\if@compact@root{mmm}% {% @@ -369,9 +400,8 @@ \dynkinOrder{\dynkin@series}{\the\dynkin@rank}.Carter::#1->\dynkin@ordering.% {\current@simple@root}% \StrChar{\dynkin@roots}{\current@simple@root}[\lie@hasse@root@marker]% -\IfStrEq{*}{\lie@hasse@root@marker}{#2}{#3}% +\IfStrEq{x}{\lie@hasse@root@marker}{#3}{#2}% }% - \NewDocumentCommand\add@compact@root{m}% {% \if@compact@root{#1}% @@ -382,53 +412,65 @@ \xdef\lie@hasse@compact@roots{\temp@lie@hasse@compact@roots{ }(#1)}% }% }% - \newcount\lie@hasse@sr% -\newcount\drpo% \NewDocumentCommand\add@compact@simple@roots@to@compact@roots{}% {% -\lie@hasse@sr 1\relax% -\drpo\the\dynkin@rank\relax% -\advance\drpo by 1\relax% -\loop% - \if@compact@simple@root{\the\lie@hasse@sr}% - {%% - \add@compact@root{1;\the\lie@hasse@sr}% - }%% - {%% - }%% - \advance\lie@hasse@sr by 1\relax% -\ifnum\lie@hasse@sr<\the\drpo% -\repeat% + \lie@hasse@sr 1\relax% + \loop% + \if@compact@simple@root{\the\lie@hasse@sr}% + {%% + \add@compact@root{1;\the\lie@hasse@sr}% + }%% + {%% + }%% + \advance\lie@hasse@sr by 1\relax% + \ifnum\lie@hasse@sr<\the\dynkin@rank@plus@one% + \repeat% }% - -\newcount\drmo% \newcount\lie@hasse@root@count% \newcount\lie@hasse@root@count@b% \newcount\max@lie@hasse@root@count% \newcount\lie@hasse@reorder - \NewDocumentCommand\lie@hasse@fix@order{mm}% {% \dynkinOrder{\dynkin@series}{\dynkin@rank}.Carter::{#1}->\dynkin@ordering.{#2}% }% - \NewDocumentCommand\draw@one@simple@root@label{mm}% %% \draw@one@simple@root@label{r}{s}, draw at Carter number r %% the root with text s. {% - \node[below,% - label=% - {% - [below,% - lie@hasse@color,% - /Lie Hasse diagram/edge quotes]% - \(\pgfkeys{/Dynkin diagram/label macro=#2}\)% - }% - ]% - at% - (1;#1)% - {};% + \if@compact@simple@root{#1}% + {% + \iflie@hasse@show@levi% + \global\lie@hasse@ok@roottrue% + \else% + \global\lie@hasse@ok@rootfalse% + \fi% + }% + {% + \iflie@hasse@show@unipotent@radical% + \global\lie@hasse@ok@roottrue% + \else% + \global\lie@hasse@ok@rootfalse% + \fi% + }% + \iflie@hasse@ok@root% + \node[% + below,% + label=% + {% + [% + below,% + lie@hasse@color,% + /Lie Hasse diagram/edge quotes% + ]% + \(\pgfkeys{/Dynkin diagram/label macro={\edgeQuote{#2}}}\)% + }% + ]% + at% + (1;#1)% + {};% + \fi% }% \NewDocumentCommand\draw@simple@root@labels{}% {% @@ -471,27 +513,56 @@ \pgfmathsetmacro{\lie@hasse@huenum}{#1/\the\dynkin@rank}% \global\definecolor{lie@hasse@color}{hsb}{\lie@hasse@huenum,1,.6}% }% -\NewDocumentCommand\draw@lie@hasse@root{m}% +\NewDocumentCommand\draw@lie@hasse@root{mm}% {% -\if@compact@root{#1}% -{%% -\pgfkeys{/Lie Hasse diagram/compact root=#1}% -}%% -{%% -\pgfkeys{/Lie Hasse diagram/noncompact root=#1}% -}%% + \if@compact@root{#1;#2}% + {%% + \iflie@hasse@show@levi% + \pgfkeys{/Lie Hasse diagram/compact root={#1;#2}}% + \fi% + }%% + {%% + \iflie@hasse@show@unipotent@radical% + \pgfkeys{/Lie Hasse diagram/noncompact root={#1;#2}}% + \fi% + }%% }% -\xdef\lie@hasse@grade@a{} -\xdef\lie@hasse@grade@b{} -\xdef\lie@hasse@index@a{} -\xdef\lie@hasse@index@b{} \newcount\root@gpo% \xdef\label@text{}% +\newif\iflie@hasse@is@levi +\newif\iflie@hasse@ok@root \NewDocumentCommand\draw@lie@hasse@edge{O{}mmmm}% %[edge label options]{from grade}{from index}{to index}{simple root} {% \root@gpo #2\relax% \advance\root@gpo by 1\relax% + \if@compact@root{#2;#3}% + {% + \if@compact@simple@root{#5}% + {% + \global\lie@hasse@is@levitrue% + \add@compact@root{\the\root@gpo;#4}% + }% + {% + \global\lie@hasse@is@levifalse% + }% + }% + {% + \global\lie@hasse@is@levifalse% + }% + \iflie@hasse@is@levi% + \iflie@hasse@show@levi% + \global\lie@hasse@ok@roottrue% + \else% + \global\lie@hasse@ok@rootfalse% + \fi% + \else% + \iflie@hasse@show@unipotent@radical% + \global\lie@hasse@ok@roottrue% + \else% + \global\lie@hasse@ok@rootfalse% + \fi% + \fi% \set@lie@hasse@color{#5}% \lie@hasse@fix@order{#5}{\lie@hasse@root@count@b}% \IfStrEq{\dynkin@label@list}{}% @@ -505,31 +576,33 @@ }% }% \if@compact@simple@root{#5}% - {%%% Compact - \draw[% - lie@hasse@color,% - /Lie Hasse diagram/edge,% - /Lie Hasse diagram/compact edge]% - (#2;#3) --% - node[lie@hasse@color,/Lie Hasse diagram/edge quotes,#1]% - {\(\pgfkeys{/Dynkin diagram/label macro=\label@text}\)}% - (\the\root@gpo;#4);% - \IfSubStr{\lie@hasse@compact@roots}{#2;#3}% - {%% adding to a compact - \add@compact@root{\the\root@gpo;#4}% - }%% - {%% - }%% + {%%% Compact simple root, i.e. edge + \iflie@hasse@ok@root% + \draw[% + lie@hasse@color,% + /Lie Hasse diagram/edge,% + /Lie Hasse diagram/compact edge]% + (#2;#3)--% + node[lie@hasse@color,/Lie Hasse diagram/edge quotes,#1]% + {\(\pgfkeys{/Dynkin diagram/label macro={\edgeQuote{\label@text}}}\)}% + (\the\root@gpo;#4);% + \fi% + \iflie@hasse@is@levi% + \fi% }%%% {%%% Noncompact - \draw[% - lie@hasse@color,% - /Lie Hasse diagram/edge,% - /Lie Hasse diagram/noncompact edge]% - (#2;#3) --% + \iflie@hasse@ok@root% + \draw + [% + lie@hasse@color,% + /Lie Hasse diagram/edge,% + /Lie Hasse diagram/noncompact edge% + ]% + (#2;#3)--% node[lie@hasse@color,/Lie Hasse diagram/edge quotes,#1]% - {\(\pgfkeys{/Dynkin diagram/label macro=\label@text}\)}% + {\(\pgfkeys{/Dynkin diagram/label macro={\edgeQuote{\label@text}}}\)}% (\the\root@gpo;#4);% + \fi% }%%% }% \newcount\A@series@grade% @@ -555,8 +628,8 @@ \coordinate (\the\A@series@grade;\the\A@series@j) at - ({.5*\the\A@series@x*\dynkin@edge@length}, - {.25*\the\A@series@y*\dynkin@edge@length}) + ({.5*\the\A@series@x*\lie@hasse@edge@length}, + {.25*\the\A@series@y*\lie@hasse@edge@length}) {};% \advance\A@series@j by 1\relax% \advance\A@series@x by 2\relax% @@ -569,59 +642,35 @@ \ifnum\A@series@grade<\the\max@A@series@grade% \repeat% }% -\newcount\A@series@grade% -\newcount\max@A@series@grade% -\NewDocumentCommand\draw@A@roots{}% -{% - \A@series@grade 1\relax% - \max@A@series@grade \the\dynkin@rank\relax% - \advance\max@A@series@grade by 1\relax% - \loop% - \max@A@series@j\the\dynkin@rank\relax% - \advance\max@A@series@j by -\the\A@series@grade\relax% - \advance\max@A@series@j by 2\relax% - \A@series@j 1\relax% - {% - \loop% - \draw@lie@hasse@root% - {\the\A@series@grade;\the\A@series@j}% - \advance\A@series@j by 1\relax% - \ifnum\A@series@j<\the\max@A@series@j% - \repeat% - }% - \advance\A@series@grade by 1\relax% - \ifnum\A@series@grade<\the\max@A@series@grade% - \repeat% -}% \newcount\maxA@i% \newcount\maxA@j% \newcount\A@lbl% -\newcount\A@i% -\newcount\A@j% -\newcount\A@ipo% +\newcount\lie@hasse@i% +\newcount\lie@hasse@j% +\newcount\lie@hasse@ipo% \newcount\A@rj% \newcount\A@rjmo% \NewDocumentCommand\draw@A@edges{}% {% \maxA@i\the\dynkin@rank\relax% - \A@i 1\relax% + \lie@hasse@i 1\relax% \loop% \maxA@j \the\dynkin@rank\relax% - \advance\maxA@j by -\the\A@i\relax% + \advance\maxA@j by -\the\lie@hasse@i\relax% \advance\maxA@j by 1\relax% \ifnum\maxA@j>-1% - \A@j 1\relax% + \lie@hasse@j 1\relax% {% \loop% - \A@lbl\the\A@i\relax% - \advance\A@lbl by \the\A@j\relax% - \A@ipo \A@i\relax% - \advance\A@ipo by 1\relax% + \A@lbl\the\lie@hasse@i\relax% + \advance\A@lbl by \the\lie@hasse@j\relax% + \lie@hasse@ipo \lie@hasse@i\relax% + \advance\lie@hasse@ipo by 1\relax% \draw@lie@hasse@edge[left]% - {\the\A@i}{\the\A@j}% - {\the\A@j}{\the\A@lbl}% + {\the\lie@hasse@i}{\the\lie@hasse@j}% + {\the\lie@hasse@j}{\the\A@lbl}% \A@rj\the\maxA@j\relax% - \advance\A@rj by -\the\A@j\relax% + \advance\A@rj by -\the\lie@hasse@j\relax% \advance\A@rj by 1\relax% \A@rjmo\the\A@rj\relax% \advance\A@rjmo by -1\relax% @@ -629,15 +678,15 @@ \advance\A@lbl by \the\dynkin@rank% \advance\A@lbl by 1% \draw@lie@hasse@edge[right]% - {\the\A@i}{\the\A@rj}% + {\the\lie@hasse@i}{\the\A@rj}% {\the\A@rjmo}{\the\A@lbl}% - \advance\A@j by 1\relax% - \ifnum\A@j<\the\maxA@j% + \advance\lie@hasse@j by 1\relax% + \ifnum\lie@hasse@j<\the\maxA@j% \repeat% }% \fi% - \advance\A@i by 1\relax% - \ifnum\A@i<\the\maxA@i% + \advance\lie@hasse@i by 1\relax% + \ifnum\lie@hasse@i<\the\maxA@i% \repeat% }% %% \hasse@A@width@at@grade{g}{\w} sets the counter \w to @@ -653,7 +702,6 @@ {% \place@A@roots% \draw@A@edges% - \draw@A@roots% }% %% \hasse@BC@width@at@grade{g}{\w} sets the counter \w to %% the value of the width (number of roots) at grade g of @@ -666,138 +714,116 @@ \global\advance#2 by 1\relax% \global\divide#2 by 2\relax% }% -\newcount\tdrmt% -\newcount\tdrmo% +\newcount\twice@dynkin@rank@minus@one% \newcount\max@BC@r% \newcount\BC@r% \newcount\BC@series@x% \newcount\BC@series@y% \NewDocumentCommand\place@BC@roots{}% {% -\drmo \the\dynkin@rank\relax% -\advance\drmo by -1\relax% -\tdrmt \the\drmo\relax% -\advance\tdrmt by \the\drmo\relax% -\tdrmo \the\tdrmt\relax% -\advance\tdrmo 1\relax% -\max@BC@r \the\dynkin@rank\relax% -\advance\max@BC@r by 1\relax% -\BC@r 1\relax% -\loop% - \BC@series@x \the\BC@r\relax% - \advance\BC@series@x by -1\relax% - \advance\BC@series@x by \the\BC@series@x\relax% - \BC@series@y 1\relax% - {%% + \twice@dynkin@rank@minus@one \the\dynkin@rank\relax% + \advance\twice@dynkin@rank@minus@one by \the\dynkin@rank\relax% + \advance\twice@dynkin@rank@minus@one by -1\relax% + \max@BC@r \the\dynkin@rank\relax% + \advance\max@BC@r by 1\relax% + \BC@r 1\relax% \loop% - \coordinate - (\the\BC@series@y;\the\BC@r) - at - ({.5*\the\BC@series@x*\dynkin@edge@length}, - {.5*(\the\BC@series@y-1)*\dynkin@edge@length}) - {};% - \advance\BC@series@y by 1\relax% - \advance\BC@series@x by 1\relax% - \ifnum\BC@series@x<\the\tdrmo\repeat% - }%% - \advance\BC@r by 1\relax% - \ifnum\BC@r<\the\max@BC@r% -\repeat% + \BC@series@x \the\BC@r\relax% + \advance\BC@series@x by -1\relax% + \advance\BC@series@x by \the\BC@series@x\relax% + \BC@series@y 1\relax% + {%% + \loop% + \coordinate + (\the\BC@series@y;\the\BC@r) + at + ({.5*\the\BC@series@x*\lie@hasse@edge@length}, + {.5*(\the\BC@series@y-1)*\lie@hasse@edge@length}) + {};% + \advance\BC@series@y by 1\relax% + \advance\BC@series@x by 1\relax% + \ifnum\BC@series@x<\the\twice@dynkin@rank@minus@one\repeat% + }%% + \advance\BC@r by 1\relax% + \ifnum\BC@r<\the\max@BC@r% + \repeat% +}% +\newcount\BC@height% +\newcount\BC@g% +\NewDocumentCommand\draw@BC@edges{}% +{% + \rootSystemHeight{\BC@height}% + \ifnum\BC@height>1% + \BC@g 1\relax% + \loop% + \draw@BC@edges@at@grade{\the\BC@g}% + \global\advance\BC@g by 1\relax% + \ifnum\BC@g<\BC@height% + \repeat% + \fi% }% -\newcount\max@BC@i% \newcount\BC@i% -\newcount\BC@series@x% -\newcount\BC@series@y% +\newcount\BC@width% +\newcount\BC@width@plus@one% +\NewDocumentCommand\draw@BC@edges@at@grade{m}% +{% + \rootSystemWidthAtGrade{#1}{\BC@width}% + \BC@width@plus@one \BC@width\relax% + \advance \BC@width@plus@one by 1\relax% + \BC@i 1\relax% + {% + \loop% + \draw@BC@edges@at@root{#1}{\the\BC@i}% + \global\advance\BC@i by 1\relax% + \ifnum\BC@i<\BC@width@plus@one\repeat% + }% +}% +\newcount\BC@height% \newcount\BC@ii% -\newcount\BC@series@yy% -\newcount\BC@series@yy% -\newcount\lbl% +\newif\ifBC@draw% +\newcount\lie@hasse@lbl% \newcount\temp@lbl% -\NewDocumentCommand\draw@BC@edges{s}% -{% -\tdrmo \the\dynkin@rank\relax% -\advance\tdrmo by \the\dynkin@rank\relax% -\advance\tdrmo by -1\relax% -\max@BC@i \the\dynkin@rank\relax% -\advance\max@BC@i by 1\relax% -\BC@i 1\relax% -\loop% - \BC@series@x \the\BC@i\relax% - \advance\BC@series@x by \the\BC@i\relax% - \advance\BC@series@x by -2\relax% - \BC@series@y 1\relax% - {%% - \loop% - \ifnum\BC@i>1% - % draw an edge upward to the left - \BC@ii \the\BC@i\relax% - \advance\BC@ii by -1\relax% - \BC@series@yy \the\BC@series@y\relax% - \advance\BC@series@yy by 1\relax% - \draw@lie@hasse@edge[right]% - {\the\BC@series@y}{\the\BC@i}% - {\the\BC@ii}% - {\the\BC@ii}% +\NewDocumentCommand\draw@BC@edges@at@root{mm}% +{% + \ifnum#2>1% + % draw an edge upward to the left + \BC@ii #2\relax% + \advance\BC@ii by -1\relax% + \draw@lie@hasse@edge[right]% + {#1}{#2}% + {\the\BC@ii} + {\the\BC@ii}% + \fi% + \BC@drawtrue% + \ifodd#1 + \ifnum#2=\the\BC@width% + \global\BC@drawfalse% \fi% - \ifnum\BC@series@y>1% - % draw an edge downward to the left - \BC@series@yy \the\BC@series@y\relax% - \advance\BC@series@yy by -1\relax% - \lbl \the\BC@i\relax% - \advance\lbl by \the\BC@series@y\relax% - \advance\lbl by -1\relax% - \ifnum\dynkin@rank<\the\lbl% - \temp@lbl \the\lbl\relax% - \lbl \the\dynkin@rank\relax% - \advance\lbl by \the\dynkin@rank% - \advance\lbl by -\the\temp@lbl% + \fi% + \ifBC@draw% + % draw an edge upward to the right + \lie@hasse@lbl #2\relax% + \advance\lie@hasse@lbl by #1\relax% + \ifnum\dynkin@rank<\the\lie@hasse@lbl% + \temp@lbl \the\lie@hasse@lbl\relax% + \lie@hasse@lbl \the\dynkin@rank\relax% + \advance\lie@hasse@lbl by \the\dynkin@rank% + \advance\lie@hasse@lbl by -\the\temp@lbl% %% For the B series: - \IfBooleanF{#1}{\global\advance\lbl by 1\relax}% - \draw@lie@hasse@edge[left]% - {\the\BC@series@yy}{\the\BC@i}% - {\the\BC@i}% - {\the\lbl}% - \else% - \draw@lie@hasse@edge[left]% - {\the\BC@series@yy}{\the\BC@i}% - {\the\BC@i}% - {\the\lbl}% + \iflie@hasse@B% + \global\advance\lie@hasse@lbl by 1\relax% \fi% + \draw@lie@hasse@edge[left]% + {#1}{#2}% + {#2}% + {\the\lie@hasse@lbl}% + \else% + \draw@lie@hasse@edge[left]% + {#1}{#2}% + {#2}% + {\the\lie@hasse@lbl}% \fi% - \advance\BC@series@y by 1\relax% - \advance\BC@series@x by 1\relax% - \ifnum\BC@series@x<\the\tdrmo\repeat% - }%% - \advance\BC@i by 1\relax% - \ifnum\BC@i<\the\max@BC@i% -\repeat% -}% -\newcount\tdrpt% -\newcount\BC@r% -\newcount\BC@series@y% -\newcount\maxy% -\NewDocumentCommand\draw@BC@roots{}% -{% -\tdrpt \the\dynkin@rank\relax% -\advance\tdrpt by \the\dynkin@rank\relax% -\advance\tdrpt by 2\relax% -\max@BC@r \the\dynkin@rank\relax% -\advance\max@BC@r by 1\relax% -\BC@r 1\relax% -\loop% - \BC@series@y 1\relax% - \maxy \tdrpt\relax% - \advance\maxy -\the\BC@r\relax% - \advance\maxy -\the\BC@r\relax% - {%% - \loop% - \draw@lie@hasse@root{\the\BC@series@y;\the\BC@r}% - \advance\BC@series@y by 1\relax% - \ifnum\BC@series@y<\the\maxy\repeat% - }%% - \advance\BC@r by 1\relax% - \ifnum\BC@r<\the\max@BC@r% -\repeat% + \fi% }% \NewDocumentCommand\hasse@BC{s}% star for C: {% @@ -809,7 +835,6 @@ {% \draw@BC@edges% }% - \draw@BC@roots% }% \NewDocumentCommand\hasse@D{}% {% @@ -818,51 +843,45 @@ \iflie@hasse@threeD% \draw@D@hasse@three@D% \fi% - \draw@D@roots% }% -\newcount\drmt% \NewDocumentCommand\draw@D@hasse@three@D{}% {% - \drmo \the\dynkin@rank\relax% - \advance\drmo by -1\relax% - \drmt \the\dynkin@rank\relax% - \advance\drmt by -2\relax% \begin{pgfonlayer}{Dynkin middle}% \fill[/Lie Hasse diagram/left] - (\the\drmt;1) -- - (\the\drmo;1) -- + (\the\dynkin@rank@minus@two;1) -- + (\the\dynkin@rank@minus@one;1) -- (\the\dynkin@rank;1) -- - (\the\drmo;2) -- + (\the\dynkin@rank@minus@one;2) -- cycle;% \fill[/Lie Hasse diagram/top] - (\the\drmt;1) -- - (1;\the\drmt) -- - (2;\the\drmo) -- - (\the\drmo;2) -- + (\the\dynkin@rank@minus@two;1) -- + (1;\the\dynkin@rank@minus@two) -- + (2;\the\dynkin@rank@minus@one) -- + (\the\dynkin@rank@minus@one;2) -- cycle;% \fill[/Lie Hasse diagram/top] - (\the\drmo;2) -- + (\the\dynkin@rank@minus@one;2) -- (\the\dynkin@rank;1) -- - (3;\the\drmo) -- - (2;\the\drmo) -- + (3;\the\dynkin@rank@minus@one) -- + (2;\the\dynkin@rank@minus@one) -- cycle;% \fill[/Lie Hasse diagram/top] - (\the\drmo;1) -- + (\the\dynkin@rank@minus@one;1) -- (\the\dynkin@rank;1) -- - (3;\the\drmo) -- - (2;\the\drmt) -- + (3;\the\dynkin@rank@minus@one) -- + (2;\the\dynkin@rank@minus@two) -- cycle;% \fill[/Lie Hasse diagram/top] - (\the\drmt;1) -- - (\the\drmo;1) -- - (2;\the\drmt) -- - (1;\the\drmt) -- + (\the\dynkin@rank@minus@two;1) -- + (\the\dynkin@rank@minus@one;1) -- + (2;\the\dynkin@rank@minus@two) -- + (1;\the\dynkin@rank@minus@two) -- cycle;% \fill[/Lie Hasse diagram/left] - (1;\the\drmt) -- - (2;\the\drmt) -- - (3;\the\drmo) -- - (2;\the\drmo) -- + (1;\the\dynkin@rank@minus@two) -- + (2;\the\dynkin@rank@minus@two) -- + (3;\the\dynkin@rank@minus@one) -- + (2;\the\dynkin@rank@minus@one) -- cycle;% \end{pgfonlayer}% }% @@ -883,9 +902,7 @@ \newcount\D@g% \newcount\maxD@grd% \newcount\D@grd% -\newcount\maxxD% -\newcount\iD% -\newcount\xxD% +\newcount\lie@hasse@D@x% \newcount\sum@D% \NewDocumentCommand\place@D@roots{}% {% @@ -918,37 +935,34 @@ \repeat% }% }% -\newcount\drpo% \NewDocumentCommand\place@D@root@at{mm}% {% - \xxD #1\relax% - \advance\xxD by #2\relax% - \advance\xxD by #2\relax% - \advance\xxD by -3\relax% - \drpo \the\dynkin@rank\relax% - \advance\drpo by 1\relax% + \lie@hasse@D@x #1\relax% + \advance\lie@hasse@D@x by #2\relax% + \advance\lie@hasse@D@x by #2\relax% + \advance\lie@hasse@D@x by -3\relax% \sum@D #1\relax% \advance\sum@D by #2\relax% \ifnum\sum@D=\the\dynkin@rank% \global\def\D@root@x% - {\the\xxD-\lie@hasse@three@D@shift}% + {\the\lie@hasse@D@x-\lie@hasse@three@D@shift}% \else% - \ifnum\sum@D=\the\drpo% + \ifnum\sum@D=\the\dynkin@rank@plus@one% \ifnum#1<\the\dynkin@rank% \global\def\D@root@x% - {\the\xxD-2+\lie@hasse@three@D@shift}% + {\the\lie@hasse@D@x-2+\lie@hasse@three@D@shift}% \else% - \global\def\D@root@x{\the\xxD}% + \global\def\D@root@x{\the\lie@hasse@D@x}% \fi% \else% \ifnum\sum@D<\the\dynkin@rank% - \global\def\D@root@x{\the\xxD}% + \global\def\D@root@x{\the\lie@hasse@D@x}% \else% % if \sum@D exceeds rank+1 \ifnum#1<\the\dynkin@rank% - \global\def\D@root@x{\the\xxD-2}% + \global\def\D@root@x{\the\lie@hasse@D@x-2}% \else% - \global\def\D@root@x{\the\xxD}% + \global\def\D@root@x{\the\lie@hasse@D@x}% \fi% \fi% \fi% @@ -956,7 +970,7 @@ \coordinate (#1;#2) at - ({(\D@root@x)*\dynkin@edge@length/2},{(#1-1)*\dynkin@edge@length/2}) + ({(\D@root@x)*\lie@hasse@edge@length/2},{(#1-1)*\lie@hasse@edge@length/2}) {};% }% \NewDocumentCommand\draw@D@edges{}% @@ -983,7 +997,8 @@ \D@r 1\relax% {% \loop% - \draw@D@edges@at{#1}{\the\D@r}{\the\max@D@roots}% +%%% \draw@D@edges@at{#1}{\the\D@r}{\the\max@D@roots}% + \draw@D@edges@at{#1}{\the\D@r}% \advance\D@r by 1\relax% \ifnum\D@r<\the\max@D@roots@plus@one% \repeat% @@ -1000,10 +1015,6 @@ \newcount\hasse@D@label% \NewDocumentCommand\draw@D@edges@at{mm}% {% - \drmo\the\dynkin@rank\relax% - \advance\drmo by -1\relax% - \drpo \the\dynkin@rank\relax% - \advance\drpo by 1\relax% \hasse@D@gpo#1\relax% \advance\hasse@D@gpo by 1\relax% \hasse@D@gpi#1\relax% @@ -1035,7 +1046,7 @@ \xdef\hasse@D@layer{Dynkin above}% \else% % below or middle. - \ifnum\hasse@D@gpi=\the\drpo% + \ifnum\hasse@D@gpi=\the\dynkin@rank@plus@one% \xdef\hasse@D@layer{Dynkin behind}% \fi% \fi% @@ -1045,7 +1056,7 @@ \fi% \fi% \ifnum\dynkin@rank>#1% - \ifnum\hasse@D@gpi<\the\drpo% + \ifnum\hasse@D@gpi<\the\dynkin@rank@plus@one% \else% \global\advance\hasse@D@label -1\relax% \fi% @@ -1069,7 +1080,7 @@ \fi% \fi% \ifnum#1=1% - \ifnum\drmo=#2% + \ifnum\dynkin@rank@minus@one=#2% \global\hasse@Dfalse\relax% \else% \xdef\hasse@D@LR{right}% @@ -1080,13 +1091,13 @@ \ifnum\hasse@D@label>\the\dynkin@rank% \hasse@D@label -\hasse@D@label\relax% \advance\hasse@D@label \the\dynkin@rank\relax% - \advance\hasse@D@label \the\drmo\relax% + \advance\hasse@D@label \the\dynkin@rank@minus@one\relax% \fi% - \ifnum\drmo<#1% + \ifnum\dynkin@rank@minus@one<#1% \else% \ifnum#2=1% \else% - \ifnum\hasse@D@gpi<\the\drpo% + \ifnum\hasse@D@gpi<\the\dynkin@rank@plus@one% \else% \advance\hasse@D@label 1\relax% \fi% @@ -1099,11 +1110,11 @@ \global\advance\hasse@D@target by 1\relax% \fi% \else% - \ifnum\drmo=#1% + \ifnum\dynkin@rank@minus@one=#1% \global\advance\hasse@D@target by -1\relax% \fi% \fi% - \ifnum\hasse@D@gpi=\the\drpo% + \ifnum\hasse@D@gpi=\the\dynkin@rank@plus@one% \ifnum#2>1% \xdef\hasse@D@layer{Dynkin behind}% \xdef\hasse@D@LR{right}% @@ -1112,7 +1123,7 @@ \ifnum\hasse@D@gpi=\the\dynkin@rank% \xdef\hasse@D@layer{Dynkin above}% \else% - \ifnum\hasse@D@gpi=\the\drmo% + \ifnum\hasse@D@gpi=\the\dynkin@rank@minus@one% \xdef\hasse@D@layer{Dynkin above}% \else% \xdef\hasse@D@layer{Dynkin middle}% @@ -1129,7 +1140,7 @@ \end{pgfonlayer}% \fi% % % Draw any other edges. - \ifnum\hasse@D@gpi=\the\drmo% + \ifnum\hasse@D@gpi=\the\dynkin@rank@minus@one% \hasse@D@target#2\relax% \advance\hasse@D@target by 1\relax% \begin{pgfonlayer}{Dynkin behind} @@ -1142,38 +1153,7 @@ }% \newcount\maxD@grd% \newcount\D@grd% -\newcount\maxxD% \newcount\sum@D% -\NewDocumentCommand\draw@D@roots{}% -{% - \drmo \the\dynkin@rank\relax% - \advance\drmo by -1\relax% - \maxD@grd \the\dynkin@rank\relax% - \advance\maxD@grd by \the\dynkin@rank\relax% - \advance\maxD@grd by -2\relax% - \D@grd 1\relax% - \loop% - % Construct the roots at grade \D@grd. - \draw@D@roots@at@grade{\D@grd}% - \advance\D@grd by 1\relax% - \ifnum\D@grd<\the\maxD@grd% - \repeat% -}% -\NewDocumentCommand\draw@D@roots@at@grade{m}% -{% - \hasse@D@width@at@grade{#1}{\max@D@roots}% - \max@D@roots@plus@one \the\max@D@roots\relax% - \advance\max@D@roots@plus@one 1\relax% - \D@r 1\relax% - {% - \loop% - \draw@lie@hasse@root{\the\D@grd;\the\D@r}% - \advance\D@r by 1\relax% - \ifnum\D@r<\the\max@D@roots@plus@one% - \repeat% - }% -}% -%}% \newcount\lie@hasse@grade@no \newcount\lie@hasse@root@no \def\lie@hasse@XX{} @@ -1205,14 +1185,14 @@ \coordinate (\the\lie@hasse@grade@no;\the\lie@hasse@root@no) at - ({\lie@hasse@XX*\dynkin@edge@length/2}, - {(\the\lie@hasse@grade@no-1)*\dynkin@edge@length/2}) {};% + ({\lie@hasse@XX*\lie@hasse@edge@length/2}, + {(\the\lie@hasse@grade@no-1)*\lie@hasse@edge@length/2}) {};% \global\advance\lie@hasse@root@no by 1% }% \NewDocumentCommand\lie@hasse@place@root@list{m}% {% \global\lie@hasse@root@no 1\relax% - \expandafter\forcsvlist\expandafter{\lie@hasse@place@root}{#1}% + \expandafter\forcsvlist\expandafter\lie@hasse@place@root{#1}% \global\advance\lie@hasse@grade@no by 1% }% \NewDocumentCommand\lie@hasse@place@roots{m}% @@ -1224,26 +1204,6 @@ }% \expandafter\docsvlist\expandafter{#1}% }% -\NewDocumentCommand\lie@hasse@draw@root{m}% -{% - \draw@lie@hasse@root{\the\lie@hasse@grade@no;\the\lie@hasse@root@no}% - \global\advance\lie@hasse@root@no by 1% -}% -\NewDocumentCommand\lie@hasse@root@draw@list{m}% -{% - \global\lie@hasse@root@no 1\relax% - \expandafter\forcsvlist\expandafter{\lie@hasse@draw@root}{#1}% - \global\advance\lie@hasse@grade@no by 1% -}% -\NewDocumentCommand\lie@hasse@draw@roots{m}% -{% - \global\lie@hasse@grade@no 1\relax% - \renewcommand*{\do}[1]% - {% - \lie@hasse@root@draw@list{##1}% - }% - \expandafter\docsvlist\expandafter{#1}% -}% \newcount\lie@hasse@grade@no@plus@one% \newcount\lie@hasse@edge@count% \def\lie@hasse@edge@go{% @@ -1256,7 +1216,8 @@ {% \global\advance\lie@hasse@edge@count by 1\relax% \begin{pgfonlayer}{Dynkin above}% - \lie@hasse@finish@edge#1!% +%%? \lie@hasse@finish@edge#1!% + \lie@hasse@finish@edge#1\relax% \end{pgfonlayer}% }% \def\lie@hasse@process@edge@behind#1!% @@ -1289,13 +1250,12 @@ \NewDocumentCommand\lie@hasse@process@edge@lists{m}% {% \global\lie@hasse@grade@no 1\relax% - \expandafter\forcsvlist\expandafter{\lie@hasse@process@edge@list}{#1}% + \expandafter\forcsvlist\expandafter\lie@hasse@process@edge@list{#1}% }% \NewDocumentCommand\hasse@X{mm}% {% \lie@hasse@place@roots{#1}% \lie@hasse@process@edge@lists{#2}% - \lie@hasse@draw@roots{#1}% }% \NewDocumentCommand\hasse@E@six@width@at@grade{mm}% {% @@ -1323,7 +1283,11 @@ #2 1% \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi% }% -% In the following code, edges are described by grade: in grade g, the expression i+r<j. means an edge from g;i to (g+1);j labelled by root r, with a label on the left; use > instead of < to get the right. Use a star in front to get this edge on the higher layer. +% In the following code, edges are described by grade: +% in grade g, the expression i+r<j. means an edge from +% g;i to (g+1);j labelled by root r, with a label on +% the left; use > instead of < to get the right. Use a +% star in front to get this edge on the higher layer. \NewDocumentCommand\hasse@E@six{}% {% \hasse@X% @@ -1353,13 +1317,45 @@ }%%% \iflie@hasse@threeD% \begin{pgfonlayer}{Dynkin middle}% -\fill[/Lie Hasse diagram/top] (2;1) -- (5;3) -- (2;5) -- (1;5) -- (2;4) -- (1;3) -- (2;2) -- (1;2) -- cycle;% -\fill[/Lie Hasse diagram/top] (2;3) -- (4;1) -- (6;2) -- (4;5) -- cycle;% -\fill[/Lie Hasse diagram/right] (1;3) -- (2;3) -- (4;5) -- (3;5) -- cycle;% -\fill[/Lie Hasse diagram/left] (3;1) -- (4;1) -- (2;3) -- (1;3) -- cycle;% -\fill[/Lie Hasse diagram/left] (4;3) -- (5;1) -- (6;1) -- (5;2) -- cycle;% -\fill[/Lie Hasse diagram/right] (4;3) -- (5;2) -- (6;3) -- (5;4) -- cycle;% -\fill[/Lie Hasse diagram/top] (5;2) -- (7;1) -- (9;1) -- (7;3) -- cycle;% + \fill[/Lie Hasse diagram/top] + (2;1) -- + (5;3) -- + (2;5) -- + (1;5) -- + (2;4) -- + (1;3) -- + (2;2) -- + (1;2) -- cycle;% + \fill[/Lie Hasse diagram/top] + (2;3) -- + (4;1) -- + (6;2) -- + (4;5) -- cycle;% + \fill[/Lie Hasse diagram/right] + (1;3) -- + (2;3) -- + (4;5) -- + (3;5) -- cycle;% + \fill[/Lie Hasse diagram/left] + (3;1) -- + (4;1) -- + (2;3) -- + (1;3) -- cycle;% + \fill[/Lie Hasse diagram/left] + (4;3) -- + (5;1) -- + (6;1) -- + (5;2) -- cycle;% + \fill[/Lie Hasse diagram/right] + (4;3) -- + (5;2) -- + (6;3) -- + (5;4) -- cycle;% + \fill[/Lie Hasse diagram/top] + (5;2) -- + (7;1) -- + (9;1) -- + (7;3) -- cycle;% \end{pgfonlayer}% \fi% }% @@ -1399,7 +1395,6 @@ #2 1% \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi% }% - \NewDocumentCommand\hasse@E@seven{}% {% \hasse@X% @@ -1457,20 +1452,64 @@ }%%% \iflie@hasse@threeD% \begin{pgfonlayer}{Dynkin middle}% -\fill[/Lie Hasse diagram/top] (2;1) -- (6;3) -- (2;6) -- (1;6) -- (2;5) -- (1;4) -- (2;3) -- (1;3) -- - (2;2) -- (1;2) -- cycle;% -\fill[/Lie Hasse diagram/top] (5;1) -- (7;3) -- (4;6) -- (2;4) -- cycle;% -\fill[/Lie Hasse diagram/top] (7;1) -- (9;3) -- (7;5) -- (5;4) -- cycle;% -\fill[/Lie Hasse diagram/top] (9;1) -- (12;1) -- (13;1) -- (14;1) -- (11;3) -- (7;2) -- cycle;% -\fill[/Lie Hasse diagram/right] (1;4) -- (2;4) -- (4;6) -- (3;6) -- cycle;% -\fill[/Lie Hasse diagram/left] (4;1) -- (5;1) -- (2;4) -- (1;4) -- cycle;% -\fill[/Lie Hasse diagram/left] (4;4) -- (6;1) -- (8;1) -- (7;2) -- (6;2) -- (5;4) -- cycle;% -\fill[/Lie Hasse diagram/right] (4;4) -- (5;4) -- (6;5) -- (5;6) -- cycle;% -\fill[/Lie Hasse diagram/right] (6;2) -- (7;2) -- (9;4) -- (8;4) -- cycle;% + \fill[/Lie Hasse diagram/top] + (2;1) -- + (6;3) -- + (2;6) -- + (1;6) -- + (2;5) -- + (1;4) -- + (2;3) -- + (1;3) -- + (2;2) -- + (1;2) -- cycle;% + \fill[/Lie Hasse diagram/top] + (5;1) -- + (7;3) -- + (4;6) -- + (2;4) -- cycle;% + \fill[/Lie Hasse diagram/top] + (7;1) -- + (9;3) -- + (7;5) -- + (5;4) -- cycle;% + \fill[/Lie Hasse diagram/top] + (9;1) -- + (12;1) -- + (13;1) -- + (14;1) -- + (11;3) -- + (7;2) -- cycle;% + \fill[/Lie Hasse diagram/right] + (1;4) -- + (2;4) -- + (4;6) -- + (3;6) -- cycle;% + \fill[/Lie Hasse diagram/left] + (4;1) -- + (5;1) -- + (2;4) -- + (1;4) -- cycle;% + \fill[/Lie Hasse diagram/left] + (4;4) -- + (6;1) -- + (8;1) -- + (7;2) -- + (6;2) -- + (5;4) -- cycle;% + \fill[/Lie Hasse diagram/right] + (4;4) -- + (5;4) -- + (6;5) -- + (5;6) -- cycle;% + \fill[/Lie Hasse diagram/right] + (6;2) -- + (7;2) -- + (9;4) -- + (8;4) -- cycle;% \end{pgfonlayer}% \fi% }% - \NewDocumentCommand\hasse@E@eight@width@at@grade{mm}% {% \ifnum#1=1% @@ -1527,7 +1566,6 @@ #2 1% \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi% }% - \NewDocumentCommand\hasse@E@eight{}% {% \hasse@X{% @@ -1754,11 +1792,11 @@ {{0,2,4,6},{1,3,5},{2,3:1,4},{2:1,3,4:1},{1:1,3:1,5:1},{2:1,4:1},{1:1,3:1},{2:1},{2:2},{2:3},{2:4}}% {% grades: {% 1 -1+2<1,*2+3<2,*3+4<3,*2+1>1,*3+2>2,4+3>3}, +1+2<1,*2+3>2,*3+4>3,*2+1<1,*3+2<2,4+3>3}, {% 2 -*1+3<1,*2+4<3,*2+3<2,*2+1<1,3+2>3}, +*1+3<1,*2+4>3,*2+1<1,*2+3>2,3+2>3}, {% 3 -*1+3<1,1+4<2,*2+4<3,*2+1<1,3+1>2,*3+3>3}, +*1+3<1,1+4>2,*2+4>3,*2+1<1,3+1>2,*3+3>3}, {% 4 *1+2<1,*1+4<2,2+3<2,*3+1>2,*3+4>3}, {% 5 @@ -2026,8 +2064,8 @@ }% \global\root@sum@resetfalse% }% -\xdef\my@root@sum{}% -\xdef\my@fixed@root@sum{}% +\xdef\lie@hasse@root@sum{}% +\xdef\lie@hasse@fixed@root@sum{}% \NewDocumentCommand\rootSum{oommm}% {% \IfValueT{#1}% @@ -2053,15 +2091,15 @@ \fi% \IfStrEqCase{\dynkin@series}% {% - {A}{\hasse@A@root@sum{#3}{#4}{\my@root@sum}}% - {B}{\hasse@B@root@sum{#3}{#4}{\my@root@sum}}% - {C}{\hasse@C@root@sum{#3}{#4}{\my@root@sum}}% - {D}{\hasse@D@root@sum{#3}{#4}{\my@root@sum}}% - {E}{\xdef\my@root@sum{\exceptional@root@sum{#3;#4}}}% - {F}{\xdef\my@root@sum{\exceptional@root@sum{#3;#4}}}% - {G}{\xdef\my@root@sum{\exceptional@root@sum{#3;#4}}}% + {A}{\hasse@A@root@sum{#3}{#4}{\lie@hasse@root@sum}}% + {B}{\hasse@B@root@sum{#3}{#4}{\lie@hasse@root@sum}}% + {C}{\hasse@C@root@sum{#3}{#4}{\lie@hasse@root@sum}}% + {D}{\hasse@D@root@sum{#3}{#4}{\lie@hasse@root@sum}}% + {E}{\xdef\lie@hasse@root@sum{\exceptional@root@sum{#3;#4}}}% + {F}{\xdef\lie@hasse@root@sum{\exceptional@root@sum{#3;#4}}}% + {G}{\xdef\lie@hasse@root@sum{\exceptional@root@sum{#3;#4}}}% }% - \StrSubstitute{\my@root@sum}{.}{,}[#5]% + \StrSubstitute{\lie@hasse@root@sum}{.}{,}[#5]% }% %% \rootSystemHeight[G][2]{\h} sets the counter \h to the height of the poset %% of the root system G2. \rootSystemHeight{\h} uses the current root system. @@ -2451,7 +2489,7 @@ 4;1=3.1,% 5;1=3.2}% }% -\NewDocumentCommand\forAllPositiveRootsInHasseDiagram{m}% +\NewDocumentCommand\forAllPositiveRoots{m}% {% \rootSystemHeight{\lie@hasse@height}% \foreach \root@grady in {1,...,\the\lie@hasse@height}% diff --git a/graphics/pgf/contrib/lie-hasse/lie-hasse.tex b/graphics/pgf/contrib/lie-hasse/lie-hasse.tex index 82643fee14..762639c603 100644 --- a/graphics/pgf/contrib/lie-hasse/lie-hasse.tex +++ b/graphics/pgf/contrib/lie-hasse/lie-hasse.tex @@ -1,5 +1,5 @@ \documentclass{amsart} -\title[The Lie Hasse package]{The Lie Hasse package \\ Version 1.0} +\title[The Lie Hasse package]{The Lie Hasse package \\ Version 1.01} %% My name: \makeatletter \DeclareRobustCommand{\scotsMc}{\scotsMcx{c}} @@ -19,8 +19,7 @@ \author{\authorsname} \address{School of Mathematical Sciences, University College Cork, Cork, Ireland} \email{b.mckay@ucc.ie} -\date{3 February 2020} -\usepackage{etex} +\date{9 July 2024} \usepackage[T1]{fontenc} \usepackage[utf8]{inputenx} \usepackage{etoolbox} @@ -87,7 +86,7 @@ root radius=.02cm, edge length=.5cm, edge quotes/.style={opacity=0}% - ]{E}{8}% + ]E8% \end{tikzpicture}% \end{center}% \begin{center} @@ -106,26 +105,26 @@ This package draws the Hasse diagram of the poset of the positive simple roots o \begin{document} The Hasse diagram of \(F_4\) is \begin{center} -\hasse[edge length=1cm]{F}{4} +\hasse F4 \end{center} \end{document} \end{Verbatim} \end{tcolorbox} \par\noindent{}The Hasse diagram of \(F_4\) is \begin{center} -\hasse[edge length=1cm]{F}{4} +\hasse[edge length=1cm]F4 \end{center} Each edge is labelled with the simple root by which vertices differ. \begin{tcblisting}{title={Inside a \TikZ statement}} -\(B_4\) has Dynkin diagram \tikz \dynkin[edge length=.35cm]{B}{4};, Hasse diagram +\(B_4\) has Dynkin diagram \tikz \dynkin{B}{4};, Hasse diagram \begin{center} -\hasse[edge length=1cm]{B}{4} +\hasse[edge length=1cm]B4 \end{center} \end{tcblisting} \begin{tcblisting}{title={Inside a Dynkin diagram environment, diagrams fit together}} The Hasse diagram of \(B_4\) is \begin{dynkinDiagram}[vertical shift=0,edge length=1cm]{B}{4} -\hasse{B}{4} +\hasse[edge length=1cm]B4 \end{dynkinDiagram} \end{tcblisting} We shut off the default vertical shift of the Dynkin diagram, so that it starts at the origin. @@ -133,35 +132,26 @@ There is an option to \verb!\hasse! for this: \begin{tcblisting}{title={Attaching the Dynkin diagram}} The Hasse diagram of \(B_4\) is \begin{center} -\hasse[attach Dynkin diagram=true]{B}{4} +\hasse[attach Dynkin diagram=true]B4 \end{center} \end{tcblisting} Unfortunately, attaching a Dynkin diagram looks terrible for \(D\) or \(E\) series, so a Dynkin diagram appears below. \begin{tcblisting}{title={Attaching the Dynkin diagram}} The Hasse diagram of \(D_5\) is \begin{center} -\hasse[attach Dynkin diagram=true]{D}{5} +\hasse[attach Dynkin diagram=true]D5 \end{center} \end{tcblisting} \begin{tcblisting}{title={Inside a \TikZ environment}} \begin{tikzpicture} -\hasse{A}{4} +\hasse A4 \draw (4;1) circle (5pt); \draw[red] (2;3) circle (5pt); \end{tikzpicture} \end{tcblisting} In this example, we see that the roots of the Hasse diagram are \TikZ{} nodes labelled \(g;i\) for grade \(g\) (i.e. \(g\) units up the page) and index \(i\) (i.e. \(i^{\text{th}}\) root of grade \(g\) drawn on the page, starting from the left). -\section{Inherited options} -The Lie Hasse package inherits options from the Dynkin diagrams package: the edge lengths are set with -\begin{Verbatim} -\tikzset{/Dynkin diagram/edge lengths=1.2cm} -\end{Verbatim} -and similarly the ordering of roots with -\begin{Verbatim} -\tikzset{/Dynkin diagram/ordering=Bourbaki} -\end{Verbatim} - +\newpage \section{Prettier} The package includes a more elaborate \verb!\hasseDiagrams! command, taking a list of semicolon separated Dynkin diagram identfiers. \begin{tcolorbox}[title={With some global options to make prettier diagrams}] @@ -198,11 +188,20 @@ The package includes a more elaborate \verb!\hasseDiagrams! command, taking a li \endgroup Global options: \begin{verbatim} - edge/.style={ultra thick}, - edge quotes/.style={/Dynkin diagram/text style,auto,inner sep=2pt}, +\tikzset{/Lie Hasse, + edge/.style={ultra thick}, + edge quotes/.style={ + /Dynkin diagram/text style, + auto, + inner sep=2pt}, \end{verbatim} allow to change the edges, and to change the way that labels are printed, and how close labels are to the edges. - +To give even greater control, the user can define a command \verb!\edgeQuote! of one argument, which is applied to the label placed on every edge of the Hasse diagram. +The default is +\begin{verbatim} +\NewDocumentCommand\edgeQuote{m}{\contour{white}{#1}} +\end{verbatim} +which ensures that every label, which is black text by default, has a slight white outline to make it easier to read against a coloured background. \section{Root order} @@ -222,6 +221,10 @@ We can use this like: \hasseDiagrams{[ordering=Carter]E6;[ordering=Dynkin]E6} \hasseDiagrams{[ordering=Kac]E6} \endgroup +The Lie Hasse package inherits the ordering of roots from the Dynkin diagrams package, so we can set it with +\begin{Verbatim} +\tikzset{/Dynkin diagram/ordering=Bourbaki} +\end{Verbatim} \section{Graph height and width} The \emph{height} of a Hasse diagram is the number of grades. @@ -238,7 +241,7 @@ to store the height of \(G_2\) in a counter called \verb!\h!, and \end{Verbatim} to store the width of \(G_2\) at grade \(3\) in a counter called \verb!\w!. -Once you use \verb!\dynkin{G}{2}! or \verb!\hasse{G}{2}! or the other commands, like +Once you use \verb!\dynkin G2! or \verb!\hasse G2! or the other commands, like \begin{Verbatim} \rootSystemHeight[G][2]{\h} \end{Verbatim} @@ -260,7 +263,8 @@ The \verb!show height! option: \hasseDiagrams{G2} \end{Verbatim} \tikzset{/Lie Hasse diagram,show name=true,show height=true} -\hasseDiagrams{G2} +\hasse G2 + The \verb!show widths! option: \begin{Verbatim} \tikzset{/Lie Hasse diagram/show widths=true} @@ -293,11 +297,11 @@ Here is the Dynkin diagram of \(E_8\), indicating the order of the roots in Cart Here is the same Dynkin diagram, except showing, at each simple root, the coefficient of that simple root in the highest root. \begin{Verbatim} \rootSum[E][8]{29}{1}{\rs} -\dynkin[labels=\rs,ordering=Carter,edge length=.35cm]{E}{8} +\dynkin[expand labels=\rs,ordering=Carter,edge length=.35cm]{E}{8} \end{Verbatim} \rootSum[E][8]{29}{1}{\rs} \begin{center} -\dynkin[labels=\rs,ordering=Carter,edge length=.35cm]{E}{8} +\dynkin[expand labels=\rs,ordering=Carter,edge length=.35cm]{E}{8} \end{center} The option \verb!for all roots! allows execution of code once on every root. @@ -312,7 +316,7 @@ The option \verb!for all roots! allows execution of code once on every root. root radius=.05cm }, for all roots/.code 2 args={\drawRootAsDynkinSum{#1}{#2}}} -\hasseDiagrams{D5} +\hasse D5 \end{Verbatim} \begingroup \tikzset{/Lie Hasse diagram, @@ -341,23 +345,23 @@ A simple example: \end{Verbatim} \newcommand{\foo}[2]% {% - \node[below,scale=.75] at (#1;#2) {\(#1,#2\)};% + \node[below,scale=.5] at (#1;#2) {\(#1,#2\)};% }% Inside a \TikZ{} or \verb!dynkinDiagram! environment: \begin{Verbatim} \tikzset{/Lie Hasse diagram/edge quotes/.style={opacity=0}, /Dynkin diagram/edge length=1.5cm} \begin{tikzpicture} - \hasse{D}{6}% - \forAllPositiveRootsInHasseDiagram{\foo}% + \hasse D6% + \forAllPositiveRoots{\foo}% \end{tikzpicture} \end{Verbatim} \begingroup \tikzset{/Lie Hasse diagram/edge quotes/.style={opacity=0}, /Dynkin diagram/edge length=1.5cm} \begin{tikzpicture} - \hasse{D}{6}% - \forAllPositiveRootsInHasseDiagram{\foo}% + \hasse D6% + \forAllPositiveRoots{\foo}% \end{tikzpicture} If you put this into the \verb!for all roots! option, it executes on its own: @@ -378,19 +382,19 @@ Opposite sides of any square have the same edge label, by commutativity of addit Hence we don't need to see every edge perfectly. The three dimensional effect is the default: \begin{Verbatim} -\hasse{D}{4}\hasse{E}{6} +\hasse D4\hasse E6 \end{Verbatim} \begin{center} -\hasse{D}{4}\hasse{E}{6} +\hasse D4\hasse E6 \end{center} We can turn it off: \begin{Verbatim} -\hasse[three D=false]{D}{4} -\hasse[three D=false]{E}{6} +\hasse[three D=false] D4 +\hasse[three D=false] E6 \end{Verbatim} \begin{center} -\hasse[three D=false]{D}{4} -\hasse[three D=false]{E}{6} +\hasse[three D=false] D4 +\hasse[three D=false] E6 \end{center} or globally with \verb!\tikzset{/Lie Hasse diagram/three D=false}!. @@ -430,9 +434,9 @@ You can change these: \section{Label the simple roots} Ringel \cite{Ringel:2013} labels his edges like \begin{Verbatim} -\hasseDiagrams{[labels={f,e,d,c,u,b,a}]E7} +\hasse[labels={f,e,d,c,u,b,a}]E7 \end{Verbatim} -\hasseDiagrams{[labels={f,e,d,c,u,b,a}]E7} +\hasse[labels={f,e,d,c,u,b,a}]E7 \section{Parabolic subgroups} This package offers nothing over Ringel's original pictures, except that the user can pick some simple roots whose associated edges are drawn differently. @@ -440,47 +444,48 @@ The chosen simple roots are called \emph{compact}, following terminology from th We let the reader explore the notation for parabolic subgroups in the Dynkin diagrams package, and use this to declare various roots compact. \begin{Verbatim} \tikzset{/Lie Hasse diagram,attach Dynkin diagram=true,three D=false} -\hasseDiagrams{D{**x*x*x*}} +\hasse D{**x*x*x*} \end{Verbatim} \begingroup \tikzset{/Lie Hasse diagram,attach Dynkin diagram=true,three D=false} -\hasseDiagrams{D{**x*x*x*}} +\hasse D{**x*x*x*} \endgroup + Our motivation comes from trying to identify the invariant vector subbundles of the tangent bundle of a rational homogeneous variety \cite{MathOverflow:123801}. Such diagrams are often unreadable if we don't turn off the three dimensional graphics. By default, noncompact root edges are not drawn. \begingroup \tikzset{/Lie Hasse diagram,attach Dynkin diagram=true,show name=false,three D=false} \begin{Verbatim} -\hasseDiagrams{E{*xx*x*}} +\hasse E{*xx*x*} \end{Verbatim} -\hasseDiagrams{E{*xx*x*}} +\hasse E{*xx*x*} \begin{Verbatim} -\hasseDiagrams{A{x*x*}} +\hasse A{x*x*} \end{Verbatim} -\hasseDiagrams{A{x*x*}} +\hasse A{x*x*} \begin{Verbatim} -\hasseDiagrams{[parabolic=113]B8} +\hasse[parabolic=113]B8 \end{Verbatim} -\hasseDiagrams{[parabolic=113]B8} +\hasse[parabolic=113]B8 \begin{Verbatim} -\hasseDiagrams{C{**xx*x**}} +\hasse C{**xx*x**} \end{Verbatim} -\hasseDiagrams{C{**xx*x**}} +\hasse C{**xx*x**} \newpage \begin{Verbatim} -\hasseDiagrams{E{*x*x*x**}} +\hasse E{*x*x*x**} \end{Verbatim} -\hasseDiagrams{E{*x*x*x**}} +\hasse E{*x*x*x**} \newpage \begin{Verbatim} -\hasseDiagrams{F{**xx}} +\hasse F{**xx} \end{Verbatim} -\hasseDiagrams{F{**xx}} +\hasse F{**xx} \begin{Verbatim} -\hasseDiagrams{G{*x}} +\hasse G{*x} \end{Verbatim} -\hasseDiagrams{G{*x}} +\hasse G{*x} \endgroup \section{Examples} diff --git a/graphics/pgf/contrib/outilsgeomtikz/doc/OutilsGeomTikz-doc.pdf b/graphics/pgf/contrib/outilsgeomtikz/doc/OutilsGeomTikz-doc.pdf Binary files differindex bf929693ef..aa999d601b 100644 --- a/graphics/pgf/contrib/outilsgeomtikz/doc/OutilsGeomTikz-doc.pdf +++ b/graphics/pgf/contrib/outilsgeomtikz/doc/OutilsGeomTikz-doc.pdf diff --git a/graphics/pgf/contrib/outilsgeomtikz/doc/OutilsGeomTikz-doc.tex b/graphics/pgf/contrib/outilsgeomtikz/doc/OutilsGeomTikz-doc.tex index b05a67fe68..f3c60c9d00 100644 --- a/graphics/pgf/contrib/outilsgeomtikz/doc/OutilsGeomTikz-doc.tex +++ b/graphics/pgf/contrib/outilsgeomtikz/doc/OutilsGeomTikz-doc.tex @@ -1,13 +1,16 @@ % !TeX TXS-program:compile = txs:///arara -% arara: lualatex: {shell: yes, synctex: no, interaction: batchmode} -% arara: lualatex: {shell: yes, synctex: no, interaction: batchmode} if found('log', '(undefined references|Please rerun|Rerun to get)') +% arara: pdflatex: {shell: yes, synctex: no, interaction: batchmode} +% arara: pdflatex: {shell: yes, synctex: no, interaction: batchmode} if found('log', '(undefined references|Please rerun|Rerun to get)') \documentclass[french,a4paper,11pt]{article} \usepackage[margin=2cm,includefoot]{geometry} -\def\TPversion{0.1.5} -\def\TPdate{13 décembre 2023} +\def\TPversion{0.1.6} +\def\TPdate{29 août 2024} +\usepackage{amssymb} \usepackage[table,svgnames]{xcolor} -\usepackage[bold-style=ISO,math-style=french]{concmath-otf} +\usepackage[utf8]{inputenc} +\usepackage[T1]{fontenc} +%\usepackage[bold-style=ISO,math-style=french]{concmath-otf} %\usepackage[bold-style=ISO,math-style=french]{unicode-math} %\setmainfont{TeX Gyre Schola} %\setmathfont{TeX Gyre Schola Math} @@ -91,8 +94,8 @@ \newcommand\affichegrille[4]{% \draw[xstep=1,ystep=1,lightgray] (#1,#3) grid (#2,#4) ; - \foreach \x in {#1,\inteval{1+#1},...,#2} \draw[lightgray] (\x,#4)--++(0,3pt) node[font=\scriptsize,above] {$\x$} ; - \foreach \y in {#3,\inteval{1+#3},...,#4} \draw[lightgray] (#1,\y)--++(-3pt,0) node[font=\scriptsize,left] {$\y$} ; + \foreach \x in {#1,\inteval{1+#1},...,#2} {\draw[lightgray] (\x,#4)--++(0,3pt) node[font=\scriptsize,above] {$\x$} ;} + \foreach \y in {#3,\inteval{1+#3},...,#4} {\draw[lightgray] (#1,\y)--++(-3pt,0) node[font=\scriptsize,left] {$\y$} ;} } \newcommand\pointsutiles[1]{% \foreach \point in {#1} {\draw[thick,fill=red] \point circle[radius=3pt] ;} @@ -170,7 +173,7 @@ \vfill -\hfill\textit{Merci à Arnaud pour ses retours et idées !!} +\hfill\textit{Merci à Arnaud et Cyril pour leurs retours et idées !!} \vfill @@ -197,7 +200,9 @@ \part{Historique} -\verb|v0.1.4 : |Modification de la graduation intérieure pour les rapporteurs 180° +\verb|v0.1.6 : |Correction d'un bug avec une compilation en \textsf{pdflatex} + Améliorations pour les rotations des labels + +\verb|v0.1.5 : |Modification de la graduation intérieure pour les rapporteurs 180° \verb|v0.1.4 : |Possibilité de positionner certains outils avec deux points (angle calculé automatiquement) @@ -288,10 +293,8 @@ Les différents outils disponibles ont \textit{grosso-modo} le même mode de fon \item pour certains outils, des dimensions minimales sont requises pour un aspect acceptable ; \item les options personnalisables sont (sauf exceptions) : \begin{itemize} - \item la \textit{taille} ; - \item l'\textit{échelle} globale ou l'\textit{échelle} des éventuels labels ; - \item les \textit{couleurs} ; - \item le \textit{fond} (couleur et opacité) ; + \item la \textit{taille}, l'\textit{échelle} globale ou l'\textit{échelle} des éventuels labels ; + \item les \textit{couleurs}, le \textit{fond} (couleur et opacité) ; \item la position (\textit{placement} et/ou \textit{rotation}) ; \item un \textit{placement automatique} avec la données de 2 points. \end{itemize} @@ -326,7 +329,7 @@ Les outils disponibles sont à insérer dans un environnement \TikZ, et pour le \tkzCompas[clés]{pointe}{mine} \end{PresentationCode} -\subsection{Utilisation d'unités} +\subsection{Utilisation d'unités et/ou de rotations} \begin{tipblock} Les outils ont été créés avec unité de base de 1~cm, afin que les graduations soient \textit{en taille réelle}. @@ -338,6 +341,10 @@ Il est toutefois possible de modifier les unités de l'environnement \TikZ, dans \smallskip Ce choix est donc à \textit{réserver} dans l'optique de faire des petits schémas pour illustrer des positions d'outils. + +\smallskip + +Du fait des rotations effectuées par le code pour correctement placer les objets et les graduations, il est conseillé (même si cela devrait fonctionner) de ne pas trop spécifier de rotation globale pour l'environnement \texttt{tikzpicture}\ldots \end{tipblock} \pagebreak @@ -430,6 +437,7 @@ Quelques \Cle{clés} de personnalisation sont disponibles : \item \Cle{CouleurFond} pour la couleur du fond de la règle ;\hfill~(défaut : \Cle{black}) \item \Cle{Opacite} pour régler l'opacité du fond de la règle ;\hfill~(défaut : \Cle{0.5}) \item le booléen \Cle{AfficheValeurs} pour afficher les valeurs des graduations ;\hfill~(défaut : \Cle{true}) + \item \Cle{EchelleValeurs} pour l'échelle (relative) des valeurs ;\hfill~(défaut : \Cle{0.8}) \item \Cle{PosVal} pour spécifier la position (haut, milieu, etc) des valeurs, parmi \Cle{h/m/b/hb}. \hfill~(défaut : \Cle{m}) @@ -501,6 +509,7 @@ Quelques \Cle{clés} de personnalisation sont disponibles : \item \Cle{CouleurFond} pour la couleur du fond de la règle-repère ;\hfill~(défaut : \Cle{black}) \item \Cle{Opacite} pour régler l'opacité du fond de la règle-repère ;\hfill~(défaut : \Cle{0.5}) \item le booléen \Cle{AfficheValeurs} pour afficher les valeurs des graduations ;\hfill~(défaut : \Cle{true}) + \item \Cle{EchelleValeurs} pour l'échelle (relative) des valeurs ;\hfill~(défaut : \Cle{0.8}) \item le booléen \Cle{Retourne} pour \textit{inverser la position des graduations}. \hfill~(défaut : \Cle{false}) @@ -564,6 +573,7 @@ Quelques \Cle{clés} de personnalisation sont disponibles : \item \Cle{Origine} pour le placer l'équerre (au niveau du coin) ;\hfill~(défaut : \Cle{\{(0,0)\}}) \item \Cle{Rotation} pour pivoter l'équerre (au niveau du coin) ;\hfill~(défaut : \Cle{0}) \item \Cle{Echelle} pour l'échelle globale de l'équerre ;\hfill~(défaut : \Cle{1}) + \item \Cle{EchelleValeurs} pour l'échelle (relative) des valeurs ;\hfill~(défaut : \Cle{0.8}) \item \Cle{Couleur} pour la couleur des éléments de l'équerre ;\hfill~(défaut : \Cle{black}) \item le booléen \Cle{Fond} pour afficher une couleur de fond pour l'équerre ;\hfill~(défaut : \Cle{false}) \item \Cle{CouleurFond} pour la couleur du fond de l'équerre ;\hfill~(défaut : \Cle{black}) @@ -749,7 +759,8 @@ Quelques \Cle{clés} de personnalisation sont disponibles : \item le booléen \Cle{Fond} pour afficher une couleur de fond pour la réquerre ;\hfill~(défaut : \Cle{false}) \item \Cle{CouleurFond} pour la couleur du fond de la réquerre ;\hfill~(défaut : \Cle{black}) \item \Cle{Opacite} pour régler l'opacité du fond de la réquerre ;\hfill~(défaut : \Cle{0.5}) - \item le booléen \Cle{AfficheValeurs} pour afficher les valeurs des graduations.\hfill~(défaut : \Cle{true}) + \item le booléen \Cle{AfficheValeurs} pour afficher les valeurs des graduations ;\hfill~(défaut : \Cle{true}) + \item \Cle{EchelleValeurs} pour l'échelle (relative) des valeurs.\hfill~(défaut : \Cle{0.8}) \end{itemize} À noter que pour la clé \Cle{Rotation}, il est possible de préciser un deuxième point, et dans ce cas la clé sera précisée sous la forme \Cle{Rotation=auto/pt}. Dans \textbf{ce cas}, les points \textit{support} \textbf{devront} avoir été déclarés au préalable ! diff --git a/graphics/pgf/contrib/outilsgeomtikz/tex/OutilsGeomTikz.sty b/graphics/pgf/contrib/outilsgeomtikz/tex/OutilsGeomTikz.sty index bb79723d21..5f6cd30410 100644 --- a/graphics/pgf/contrib/outilsgeomtikz/tex/OutilsGeomTikz.sty +++ b/graphics/pgf/contrib/outilsgeomtikz/tex/OutilsGeomTikz.sty @@ -2,7 +2,8 @@ % licence........: Released under the LaTeX Project Public License v1.3c or later, see http://www.latex-project.org/lppl.txtf \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{OutilsGeomTikz}[2023/12/13 v0.1.5 Outils geometriques en TikZ] +\ProvidesPackage{OutilsGeomTikz}[2024/08/29 v0.1.6 Outils geometriques en TikZ] +% 0.1.6 Correction de bugs avec pdflatex + amélioration de la gestion des rotations/échelles des labels (tks Cyril I. ^^) % 0.1.5 Modification de la graduation intérieure pour les rapporteurs 180° % 0.1.4 Possibilité de positionner les outils avec deux points (angle calculé automatiquement) % 0.1.3 Ajout du pourcenteur @@ -60,7 +61,8 @@ Origine=\xdef\REGLposOrigin{#1},% Rotation=\def\REGLangle{#1},% Opacite=\def\REGLopac{#1},% - PosVal=\def\REGLposval{#1} + PosVal=\def\REGLposval{#1},% + EchelleValeurs=\def\REGLechlabel{#1} } \setKVdefault[RegleGeom]{% @@ -74,7 +76,8 @@ AfficheValeurs=true,% Fond=false,% Opacite=0.5,% - PosVal=m + PosVal=m,% + EchelleValeurs=0.8 } \NewDocumentCommand{\tkzRegle}{ O{} }{% @@ -88,7 +91,7 @@ }{}% \xdef\REGLlongueur{\fpeval{max(3,\REGLlongueur)}}%valeurs mini \xdef\REGLlargeur{\fpeval{max(1.5,\REGLlargeur)}} - \begin{scope}[shift={(\REGLposOrigin)},rotate=\REGLangle,scale=\REGLechelle] + \begin{scope}[shift={(\REGLposOrigin)},rotate=\REGLangle,scale=\REGLechelle,transform shape] \ifboolKV[RegleGeom]{Fond} {% \begin{scope} @@ -104,13 +107,13 @@ \ifboolKV[RegleGeom]{AfficheValeurs}% {% \IfSubStr{\REGLposval}{h} - {\foreach \i in {0,1,...,\REGLlongueur} \draw[\REGLcouleur] (\i,{-0.5}) node[inner sep=1pt,outer sep=1pt,rotate=\REGLangle,scale={0.8*\REGLechelle},font=\small,below] {$\i$} ;} + {\foreach \i in {0,1,...,\REGLlongueur} {\draw[\REGLcouleur] (\i,{-0.5}) node[inner sep=1pt,outer sep=1pt,scale={\REGLechlabel},font=\small,below] {$\i$} ;}} {} \IfSubStr{\REGLposval}{m} - {\foreach \i in {0,1,...,\REGLlongueur} \draw[\REGLcouleur] (\i,{-0.5*\REGLlargeur}) node[inner sep=1pt,outer sep=1pt,rotate=\REGLangle,scale={0.8*\REGLechelle},font=\small] {$\i$} ;} + {\foreach \i in {0,1,...,\REGLlongueur} {\draw[\REGLcouleur] (\i,{-0.5*\REGLlargeur}) node[inner sep=1pt,outer sep=1pt,scale={\REGLechlabel},font=\small] {$\i$} ;}} {} \IfSubStr{\REGLposval}{b} - {\foreach \i in {0,1,...,\REGLlongueur} \draw[\REGLcouleur] (\i,{-\REGLlargeur+0.5}) node[inner sep=1pt,outer sep=1pt,rotate=\REGLangle,scale={0.8*\REGLechelle},font=\small,above] {\rotatebox{180}{$\fpeval{trunc(\REGLlongueur)-\i}$}} ;} + {\foreach \i in {0,1,...,\REGLlongueur} {\draw[\REGLcouleur] (\i,{-\REGLlargeur+0.5}) node[inner sep=1pt,outer sep=1pt,scale={\REGLechlabel},font=\small,above] {\rotatebox{180}{$\fpeval{trunc(\REGLlongueur)-\i}$}} ;}} {} }% {}% @@ -126,7 +129,8 @@ CouleurFond=\def\REGLREPcouleurfond{#1},% Origine=\def\REGLREPposOrigin{#1},% Rotation=\def\REGLREPangle{#1},% - Opacite=\def\REGLREPopac{#1} + Opacite=\def\REGLREPopac{#1},% + EchelleValeurs=\def\REGLREPechlabel{#1} } \setKVdefault[RegleRepereGeom]{% @@ -140,7 +144,8 @@ AfficheValeurs=true,% Fond=false,% Opacite=0.5,% - Retourne=false + Retourne=false,% + EchelleValeurs=0.8 } \NewDocumentCommand{\tkzRegleRepere}{ O{} }{% @@ -154,7 +159,7 @@ \pgfmathanglebetweenpoints{\pgfpointanchor{\REGLREPposOrigin}{center}}{\pgfpointanchor{\tmppointdeux}{center}}% \edef\REGLREPangle{\pgfmathresult}% }{}% - \begin{scope}[shift={(\REGLREPposOrigin)},rotate=\REGLREPangle,scale=\REGLREPechelle] + \begin{scope}[shift={(\REGLREPposOrigin)},rotate=\REGLREPangle,scale=\REGLREPechelle,transform shape] %bases de la règle-repère \ifboolKV[RegleRepereGeom]{Fond}% {\draw[draw=none,fill=\REGLREPcouleurfond!10!white,fill opacity=\REGLREPopac,rounded corners] (-0.5,0) rectangle++ ({\REGLREPlongueur+1},{-\REGLREPlargeur}) ;}% @@ -175,12 +180,12 @@ {% \ifboolKV[RegleRepereGeom]{Retourne}% {% - {\foreach \i in {0,1,...,\REGLREPlongueur} \draw[\REGLREPcouleur] (\i,{-0.5}) node[inner sep=1pt,outer sep=1pt,rotate=\REGLREPangle,scale={0.8*\REGLREPechelle},font=\small,below] {$\fpeval{-trunc(0.5*\REGLREPlongueur)+\i}$} ;} - {\foreach \i in {0,1,...,\REGLREPlongueur} \draw[\REGLREPcouleur] (\i,{-\REGLREPlargeur+0.5}) node[inner sep=1pt,outer sep=1pt,rotate=\REGLREPangle,scale={0.8*\REGLREPechelle},font=\small,above] {\rotatebox{180}{$\inteval{\REGLREPlongueur-\i}$}} ;} + {\foreach \i in {0,1,...,\REGLREPlongueur} {\draw[\REGLREPcouleur] (\i,{-0.5}) node[inner sep=1pt,outer sep=1pt,scale={\REGLREPechlabel},font=\small,below] {$\fpeval{-trunc(0.5*\REGLREPlongueur)+\i}$} ;}} + {\foreach \i in {0,1,...,\REGLREPlongueur} {\draw[\REGLREPcouleur] (\i,{-\REGLREPlargeur+0.5}) node[inner sep=1pt,outer sep=1pt,scale={\REGLREPechlabel},font=\small,above] {\rotatebox{180}{$\inteval{\REGLREPlongueur-\i}$}} ;}} }% {% - {\foreach \i in {0,1,...,\REGLREPlongueur} \draw[\REGLREPcouleur] (\i,{-0.5}) node[inner sep=1pt,outer sep=1pt,rotate=\REGLREPangle,scale={0.8*\REGLREPechelle},font=\small,below] {$\i$} ;} - {\foreach \i in {0,1,...,\REGLREPlongueur} \draw[\REGLREPcouleur] (\i,{-\REGLREPlargeur+0.5}) node[inner sep=1pt,outer sep=1pt,rotate=\REGLREPangle,scale={0.8*\REGLREPechelle},font=\small,above] {\rotatebox{180}{$\fpeval{trunc(0.5*\REGLREPlongueur)-\i}$}} ;} + {\foreach \i in {0,1,...,\REGLREPlongueur} {\draw[\REGLREPcouleur] (\i,{-0.5}) node[inner sep=1pt,outer sep=1pt,scale={\REGLREPechlabel},font=\small,below] {$\i$} ;}} + {\foreach \i in {0,1,...,\REGLREPlongueur} {\draw[\REGLREPcouleur] (\i,{-\REGLREPlargeur+0.5}) node[inner sep=1pt,outer sep=1pt,scale={\REGLREPechlabel},font=\small,above] {\rotatebox{180}{$\fpeval{trunc(0.5*\REGLREPlongueur)-\i}$}} ;}} }% } {}% @@ -196,7 +201,8 @@ CouleurFond=\def\REQcouleurfond{#1},% Origine=\def\REQposOrigin{#1},% Rotation=\def\REQangle{#1},% - Opacite=\def\REQopac{#1} + Opacite=\def\REQopac{#1},% + EchelleValeurs=\def\REQechlabel{#1} } \setKVdefault[RequerreGeom]{% @@ -209,7 +215,8 @@ Rotation=0,% AfficheValeurs=true,% Fond=false,% - Opacite=0.5 + Opacite=0.5,% + EchelleValeurs=0.8 } \NewDocumentCommand{\tkzRequerre}{ O{} }{% @@ -223,7 +230,7 @@ \pgfmathanglebetweenpoints{\pgfpointanchor{\REQposOrigin}{center}}{\pgfpointanchor{\tmppointdeux}{center}}% \edef\REQangle{\pgfmathresult}% }{}% - \begin{scope}[shift={(\REQposOrigin)},rotate=\REQangle,scale=\REQechelle] + \begin{scope}[shift={(\REQposOrigin)},rotate=\REQangle,scale=\REQechelle,transform shape] \ifboolKV[RequerreGeom]{Fond} { \fill[draw=none,rounded corners,fill=\REQcouleurfond!10!white,fill opacity=\REQopac] ({-\REQlongueur*0.5},0) rectangle ({\REQlongueur*0.5},{-\REQlargeur}) ; @@ -243,10 +250,10 @@ \end{scope} \ifboolKV[RequerreGeom]{AfficheValeurs}% {% - \draw[\REQcouleur] (0,-0.5) node[inner sep=1pt,outer sep=1pt,rotate=\REQangle,scale={0.8*\REQechelle},font=\small,below] {$0$} ; + \draw[\REQcouleur] (0,-0.5) node[inner sep=1pt,outer sep=1pt,scale={\REQechlabel},font=\small,below] {$0$} ; \foreach \i in {1,2,...,\fpeval{0.5*\REQlongueur-0.5}}{% - \draw[\REQcouleur] (\i,-0.5) node[inner sep=1pt,outer sep=1pt,rotate=\REQangle,scale={0.8*\REQechelle},font=\small,below] {$\i$} ; - \draw[\REQcouleur] (-\i,-0.5) node[inner sep=1pt,outer sep=1pt,rotate=\REQangle,scale={0.8*\REQechelle},font=\small,below] {$-\i$} ;} + \draw[\REQcouleur] (\i,-0.5) node[inner sep=1pt,outer sep=1pt,scale={\REQechlabel},font=\small,below] {$\i$} ; + \draw[\REQcouleur] (-\i,-0.5) node[inner sep=1pt,outer sep=1pt,scale={\REQechlabel},font=\small,below] {$-\i$} ;} }% {}% \end{scope} @@ -260,7 +267,8 @@ CouleurFond=\def\EQcouleurfond{#1},% Origine=\def\EQposOrigin{#1},% Rotation=\def\EQangle{#1},% - Opacite=\def\EQopac{#1} + Opacite=\def\EQopac{#1},% + EchelleValeurs=\def\EQechlabel{#1} } \setKVdefault[EquerreGeom]{% @@ -273,7 +281,8 @@ AfficheValeurs=true,% Fond=false,% Opacite=0.5,% - PetitCote=false + PetitCote=false,% + EchelleValeurs=0.8 } \NewDocumentCommand{\tkzEquerre}{ O{} }{% @@ -293,7 +302,7 @@ \edef\EQangle{\fpeval{\pgfmathresult-90}}% }% }{}% - \begin{scope}[shift={(\EQposOrigin)},rotate=\EQangle,scale=\EQechelle] + \begin{scope}[shift={(\EQposOrigin)},rotate=\EQangle,scale=\EQechelle,transform shape] \ifboolKV[EquerreGeom]{Fond} {% \begin{scope} %diff extérieur-intérieur @@ -318,10 +327,12 @@ \foreach \y in {0,1,...,\fpeval{0.925*\EQlongueur}} {\draw[\EQcouleur] (0,\y)--(0.4,\y) ;} \ifboolKV[EquerreGeom]{AfficheValeurs}% {% - \foreach \i in {1,2,...,\fpeval{0.9*\EQlongueur-1}} - \draw[\EQcouleur] (0.4,\i) node[inner sep=1pt,outer sep=1pt,rotate=\EQangle,scale={0.8*\EQechelle},font=\small,right] {\rotatebox{90}{$\i$}} ; - \foreach \i in {1,2,...,\fpeval{0.9*\EQlargeur-0.5}} - \draw[\EQcouleur] (\i,0.4) node[inner sep=1pt,outer sep=1pt,rotate=\EQangle,scale={0.8*\EQechelle},font=\small,above] {\rotatebox{180}{$\i$}} ; + \foreach \i in {1,2,...,\fpeval{0.9*\EQlongueur-1}}{% + \draw[\EQcouleur] (0.4,\i) node[inner sep=1pt,outer sep=1pt,scale={\EQechlabel},font=\small,right] {\rotatebox{90}{$\i$}} ; + }% + \foreach \i in {1,2,...,\fpeval{0.9*\EQlargeur-0.5}}{% + \draw[\EQcouleur] (\i,0.4) node[inner sep=1pt,outer sep=1pt,scale={\EQechlabel},font=\small,above] {\rotatebox{180}{$\i$}} ; + }% }% {}% \end{scope} @@ -336,7 +347,8 @@ CouleurFond=\def\RAPPcouleurfond{#1},% Origine=\def\RAPPposOrigin{#1},% Rotation=\def\RAPPangle{#1},% - Opacite=\def\RAPPopac{#1} + Opacite=\def\RAPPopac{#1},% + EchelleValeurs=\def\RAPPechlabel{#1} } \setKVdefault[RapporteurGeom]{% @@ -350,13 +362,14 @@ Fond=false,% Opacite=0.5,% Complet=false,% - GraduationsInt=false + GraduationsInt=false,% + EchelleValeurs=0.8 } \NewDocumentCommand{\tkzRapporteur}{ O{} }{% \useKVdefault[RapporteurGeom]% \setKV[RapporteurGeom]{#1}% - \begin{scope}[shift={(\RAPPposOrigin)},rotate=\RAPPangle,scale=\RAPPechelle,every node/.style={rotate=\RAPPangle}] + \begin{scope}[shift={(\RAPPposOrigin)},rotate=\RAPPangle,scale=\RAPPechelle,transform shape] \ifboolKV[RapporteurGeom]{Complet} { %fond @@ -382,27 +395,27 @@ %valeurs si booléen \ifboolKV[RapporteurGeom]{AfficheAngles} {% - \draw[\RAPPcouleur] (0:2.75) node[rotate=90,scale=\fpeval{0.8*\RAPPechelle*\RAPPechangle},font=\tiny] {$0$} ; - \draw[\RAPPcouleur] (180:3.25) node[rotate=90,scale=\fpeval{0.8*\RAPPechelle*\RAPPechangle},font=\tiny] {$\pm 180$} ; - \draw[\RAPPcouleur] (180:2.75) node[rotate=90,scale=\fpeval{0.8*\RAPPechelle*\RAPPechangle},font=\tiny] {$\pm \pi$} ; + \draw[\RAPPcouleur] (0:2.75) node[rotate=90,scale=\fpeval{\RAPPechlabel*\RAPPechangle},font=\tiny] {$0$} ; + \draw[\RAPPcouleur] (180:3.25) node[rotate=90,scale=\fpeval{\RAPPechlabel*\RAPPechangle},font=\tiny] {$\pm 180$} ; + \draw[\RAPPcouleur] (180:2.75) node[rotate=90,scale=\fpeval{\RAPPechlabel*\RAPPechangle},font=\tiny] {$\pm \pi$} ; \foreach \i in {0,10,...,170} - {\draw[\RAPPcouleur] (\i:3.25) node[rotate={\i-90},scale=\fpeval{0.8*\RAPPechelle*\RAPPechangle},font=\tiny] {$\i$} ;} - \draw[\RAPPcouleur] (30:2.75) node[rotate={30-90},scale=\fpeval{0.8*\RAPPechelle*\RAPPechangle},font=\tiny] {$\nicefrac{\pi}{6}$} ; - \draw[\RAPPcouleur] (45:2.75) node[rotate={45-90},scale=\fpeval{0.8*\RAPPechelle*\RAPPechangle},font=\tiny] {$\nicefrac{\pi}{4}$} ; - \draw[\RAPPcouleur] (60:2.75) node[rotate={60-90},scale=\fpeval{0.8*\RAPPechelle*\RAPPechangle},font=\tiny] {$\nicefrac{\pi}{3}$} ; - \draw[\RAPPcouleur] (90:2.75) node[rotate={90-90},scale=\fpeval{0.8*\RAPPechelle*\RAPPechangle},font=\tiny] {$\nicefrac{\pi}{2}$} ; - \draw[\RAPPcouleur] (120:2.75) node[rotate={120-90},scale=\fpeval{0.8*\RAPPechelle*\RAPPechangle},font=\tiny] {$\nicefrac{2\pi}{3}$} ; - \draw[\RAPPcouleur] (135:2.75) node[rotate={135-90},scale=\fpeval{0.8*\RAPPechelle*\RAPPechangle},font=\tiny] {$\nicefrac{3\pi}{4}$} ; - \draw[\RAPPcouleur] (150:2.75) node[rotate={150-90},scale=\fpeval{0.8*\RAPPechelle*\RAPPechangle},font=\tiny] {$\nicefrac{5\pi}{6}$} ; + {\draw[\RAPPcouleur] (\i:3.25) node[rotate={\i-90},scale=\fpeval{\RAPPechlabel*\RAPPechangle},font=\tiny] {$\i$} ;} + \draw[\RAPPcouleur] (30:2.75) node[rotate={30-90},scale=\fpeval{\RAPPechlabel*\RAPPechangle},font=\tiny] {$\nicefrac{\pi}{6}$} ; + \draw[\RAPPcouleur] (45:2.75) node[rotate={45-90},scale=\fpeval{\RAPPechlabel*\RAPPechangle},font=\tiny] {$\nicefrac{\pi}{4}$} ; + \draw[\RAPPcouleur] (60:2.75) node[rotate={60-90},scale=\fpeval{\RAPPechlabel*\RAPPechangle},font=\tiny] {$\nicefrac{\pi}{3}$} ; + \draw[\RAPPcouleur] (90:2.75) node[rotate={90-90},scale=\fpeval{\RAPPechlabel*\RAPPechangle},font=\tiny] {$\nicefrac{\pi}{2}$} ; + \draw[\RAPPcouleur] (120:2.75) node[rotate={120-90},scale=\fpeval{\RAPPechlabel*\RAPPechangle},font=\tiny] {$\nicefrac{2\pi}{3}$} ; + \draw[\RAPPcouleur] (135:2.75) node[rotate={135-90},scale=\fpeval{\RAPPechlabel*\RAPPechangle},font=\tiny] {$\nicefrac{3\pi}{4}$} ; + \draw[\RAPPcouleur] (150:2.75) node[rotate={150-90},scale=\fpeval{\RAPPechlabel*\RAPPechangle},font=\tiny] {$\nicefrac{5\pi}{6}$} ; \foreach \i in {10,20,...,170} - {\draw[\RAPPcouleur] ({-\i}:3.25) node[rotate={270-\i},scale=\fpeval{0.8*\RAPPechelle*\RAPPechangle},font=\tiny] {$-\i$} ;} - \draw[\RAPPcouleur] (-30:2.75) node[rotate={270-30},scale=\fpeval{0.8*\RAPPechelle*\RAPPechangle},font=\tiny] {$\nicefrac{-\pi}{6}$} ; - \draw[\RAPPcouleur] (-45:2.75) node[rotate={270-45},scale=\fpeval{0.8*\RAPPechelle*\RAPPechangle},font=\tiny] {$\nicefrac{-\pi}{4}$} ; - \draw[\RAPPcouleur] (-60:2.75) node[rotate={270-60},scale=\fpeval{0.8*\RAPPechelle*\RAPPechangle},font=\tiny] {$\nicefrac{-\pi}{3}$} ; - \draw[\RAPPcouleur] (-90:2.75) node[rotate={270-90},scale=\fpeval{0.8*\RAPPechelle*\RAPPechangle},font=\tiny] {$\nicefrac{-\pi}{2}$} ; - \draw[\RAPPcouleur] (-120:2.75) node[rotate={270-120},scale=\fpeval{0.8*\RAPPechelle*\RAPPechangle},font=\tiny] {$\nicefrac{-2\pi}{3}$} ; - \draw[\RAPPcouleur] (-135:2.75) node[rotate={270-135},scale=\fpeval{0.8*\RAPPechelle*\RAPPechangle},font=\tiny] {$\nicefrac{-3\pi}{4}$} ; - \draw[\RAPPcouleur] (-150:2.75) node[rotate={270-150},scale=\fpeval{0.8*\RAPPechelle*\RAPPechangle},font=\tiny] {$\nicefrac{-5\pi}{6}$} ; + {\draw[\RAPPcouleur] ({-\i}:3.25) node[rotate={270-\i},scale=\fpeval{\RAPPechlabel*\RAPPechangle},font=\tiny] {$-\i$} ;} + \draw[\RAPPcouleur] (-30:2.75) node[rotate={270-30},scale=\fpeval{\RAPPechlabel*\RAPPechangle},font=\tiny] {$\nicefrac{-\pi}{6}$} ; + \draw[\RAPPcouleur] (-45:2.75) node[rotate={270-45},scale=\fpeval{\RAPPechlabel*\RAPPechangle},font=\tiny] {$\nicefrac{-\pi}{4}$} ; + \draw[\RAPPcouleur] (-60:2.75) node[rotate={270-60},scale=\fpeval{\RAPPechlabel*\RAPPechangle},font=\tiny] {$\nicefrac{-\pi}{3}$} ; + \draw[\RAPPcouleur] (-90:2.75) node[rotate={270-90},scale=\fpeval{\RAPPechlabel*\RAPPechangle},font=\tiny] {$\nicefrac{-\pi}{2}$} ; + \draw[\RAPPcouleur] (-120:2.75) node[rotate={270-120},scale=\fpeval{\RAPPechlabel*\RAPPechangle},font=\tiny] {$\nicefrac{-2\pi}{3}$} ; + \draw[\RAPPcouleur] (-135:2.75) node[rotate={270-135},scale=\fpeval{\RAPPechlabel*\RAPPechangle},font=\tiny] {$\nicefrac{-3\pi}{4}$} ; + \draw[\RAPPcouleur] (-150:2.75) node[rotate={270-150},scale=\fpeval{\RAPPechlabel*\RAPPechangle},font=\tiny] {$\nicefrac{-5\pi}{6}$} ; }{} } { @@ -440,9 +453,9 @@ \ifboolKV[RapporteurGeom]{AfficheAngles} {% \foreach \i in {0,10,...,180} - {\draw[\RAPPcouleur] (\i:3.2) node[rotate={\i-90},scale=\fpeval{\RAPPechelle*\RAPPechangle},font=\tiny] {\i} ;} + {\draw[\RAPPcouleur] (\i:3.2) node[rotate={\i-90},scale=\fpeval{\RAPPechangle},font=\tiny] {\i} ;} \foreach \i in {0,10,...,180} - {\draw[\RAPPcouleur] (\i:2.7) node[rotate={\i-90},scale=\fpeval{\RAPPechelle*\RAPPechangle},font=\tiny] {\inteval{180-\i}} ;} + {\draw[\RAPPcouleur] (\i:2.7) node[rotate={\i-90},scale=\fpeval{\RAPPechangle},font=\tiny] {\inteval{180-\i}} ;} }{} } \end{scope} @@ -455,7 +468,8 @@ CouleurFond=\def\POURCcouleurfond{#1},% Origine=\def\POURCposOrigin{#1},% Rotation=\def\POURCangle{#1},% - Opacite=\def\POURCopac{#1} + Opacite=\def\POURCopac{#1},% + EchelleValeurs=\def\POURCechlabel{#1} } \setKVdefault[Pourcenteur]{% @@ -468,13 +482,14 @@ AfficheValeurs=true,% Fond=false,% Opacite=0.5,% - Decoration=true + Decoration=true,% + EchelleValeurs=0.8 } \NewDocumentCommand{\tkzPourcenteur}{ O{} }{% \useKVdefault[Pourcenteur]% \setKV[Pourcenteur]{#1}% - \begin{scope}[shift={(\POURCposOrigin)},rotate=\POURCangle,scale=\POURCechelle,every node/.style={rotate=\POURCangle}] + \begin{scope}[shift={(\POURCposOrigin)},rotate=\POURCangle,scale=\POURCechelle,transform shape] \ifboolKV[Pourcenteur]{Fond} {% \fill[draw=none,fill=\POURCcouleurfond!10!white,fill opacity=\POURCopac] (0,0) circle[radius=3] ; @@ -483,7 +498,7 @@ \draw[\POURCcouleur,semithick] (0,0) circle[radius=3] ; \draw[\POURCcouleur,semithick] ({-0.15*3},0)--({0.15*3},0) (0,{-0.15*3})--(0,{0.15*3}) ; \foreach \pct in {0,1,...,199} - {\draw[\POURCcouleur,thin] ({0.5*\pct*3.6}:{3})--({0.5*\pct*3.6}:{3-0.2}) ;} + {\draw[\POURCcouleur,thin] ({0.5*\pct*3.6}:{3})--({0.5*\pct*3.6}:{3-0.2}) ;} \foreach \pct in {0,10,...,90}{% \draw[\POURCcouleur,thin] ({(\pct+1)*3.6}:{3})--({(\pct+1)*3.6}:{3-0.35}) ; \filldraw[\POURCcouleur] ({(\pct+1)*3.6}:{3-0.35}) circle[fill=\POURCcouleur,radius=0.75pt] ; @@ -505,14 +520,14 @@ \foreach \pct in {5,10,15,20,30,35,40,45,55,60,65,70,80,85,90,95}{% \draw[\POURCcouleur,semithick] ({\pct*3.6}:{3})--({\pct*3.6}:{3-0.5}) ; \ifboolKV[Pourcenteur]{AfficheValeurs} - {\draw ({-\pct*3.6+90}:{3-0.6}) node[\POURCcouleur,rotate={-3.6*\pct},scale=\fpeval{0.8*\POURCechelle*\POURCechangle},font=\tiny] {\pct\,\%} ;}{} + {\draw ({-\pct*3.6+90}:{3-0.6}) node[\POURCcouleur,rotate={-3.6*\pct},scale=\fpeval{\POURCechlabel*\POURCechangle},font=\tiny] {\pct\,\%} ;}{} } \foreach \pct in {0,25,50,75}{% \draw[\POURCcouleur,semithick] ({\pct*3.6}:{3})--({\pct*3.6}:{3-0.5}) ; \ifboolKV[Pourcenteur]{AfficheValeurs} {% - \draw ({-\pct*3.6+90}:{3-0.61}) node[\POURCcouleur,rotate={-3.6*\pct},scale=\fpeval{0.8*\POURCechelle*\POURCechangle},font=\scriptsize\bfseries] {\pct\,\%} ; - \draw ({-\pct*3.6+90}:{2+0.15}) node[\POURCcouleur,rotate={-3.6*\pct},scale=\fpeval{0.8*\POURCechelle*\POURCechangle},font=\tiny\bfseries] {\pct\,\%} ; + \draw ({-\pct*3.6+90}:{3-0.61}) node[\POURCcouleur,rotate={-3.6*\pct},scale=\fpeval{\POURCechlabel*\POURCechangle},font=\scriptsize\bfseries] {\pct\,\%} ; + \draw ({-\pct*3.6+90}:{2+0.15}) node[\POURCcouleur,rotate={-3.6*\pct},scale=\fpeval{\POURCechlabel*\POURCechangle},font=\tiny\bfseries] {\pct\,\%} ; }{}% } \draw[\POURCcouleur,semithick] (0,1)--(0,2) (1.6,0)--(2,0) (0,-1.6)--(0,-2) (-1.6,0)--(-2,0) ; @@ -533,7 +548,7 @@ CouleurFond=\def\RAPPEQcouleurfond{#1},% Origine=\def\RAPPEQposOrigin{#1},% Rotation=\def\RAPPEQangle{#1},% - Opacite=\def\RAPPEQopac{#1} + Opacite=\def\RAPPEQopac{#1},% } \setKVdefault[RapporteurEquerreGeom]{% @@ -561,7 +576,7 @@ \pgfmathanglebetweenpoints{\pgfpointanchor{\RAPPEQposOrigin}{center}}{\pgfpointanchor{\tmppointdeux}{center}}% \edef\RAPPEQangle{\pgfmathresult}% }{}% - \begin{scope}[shift={(\RAPPEQposOrigin)},rotate=\RAPPEQangle,scale=\RAPPEQechelle,every node/.style={rotate=\RAPPEQangle}] + \begin{scope}[shift={(\RAPPEQposOrigin)},rotate=\RAPPEQangle,scale=\RAPPEQechelle,transform shape] %fond \ifboolKV[RapporteurEquerreGeom]{Fond} {% @@ -591,16 +606,16 @@ \ifboolKV[RapporteurEquerreGeom]{AfficheAngles} {% \foreach \i in {10,20,...,170} - {\draw[\RAPPEQcouleur] ({-\i}:{0.6125*\RAPPEQlargeur}) node[rotate={90-\i},scale=\fpeval{\RAPPEQlargeur/8*\RAPPEQechelle*\RAPPEQechangle},font=\tiny] {\i} ;} + {\draw[\RAPPEQcouleur] ({-\i}:{0.6125*\RAPPEQlargeur}) node[rotate={90-\i},scale=\fpeval{\RAPPEQlargeur/8*\RAPPEQechangle},font=\tiny] {\i} ;} %angles "extérieurs" \foreach \i in {10,20,...,170} - {\draw[\RAPPEQcouleur] ({-\i}:{0.6375*\RAPPEQlargeur}) node[rotate={90-\i},scale=\fpeval{\RAPPEQlargeur/8*\RAPPEQechelle*\RAPPEQechangle},font=\tiny] {\inteval{180-\i}} ;} + {\draw[\RAPPEQcouleur] ({-\i}:{0.6375*\RAPPEQlargeur}) node[rotate={90-\i},scale=\fpeval{\RAPPEQlargeur/8*\RAPPEQechangle},font=\tiny] {\inteval{180-\i}} ;} }% {}% \ifboolKV[RapporteurEquerreGeom]{AfficheValeurs} {% \foreach \i in {-1,0,1} - {\draw[\RAPPEQcouleur] ({\i},-0.375) node[scale=\fpeval{\RAPPEQechelle*\RAPPEQechangle},font=\tiny] {$\i$} ;} + {\draw[\RAPPEQcouleur] ({\i},-0.375) node[scale=\fpeval{\RAPPEQechangle},font=\tiny] {$\i$} ;} }% {}% %tracés intérieurs diff --git a/graphics/pgf/contrib/pgf-periodictable/README b/graphics/pgf/contrib/pgf-periodictable/README index f33f53fa72..bfdfafd70a 100644 --- a/graphics/pgf/contrib/pgf-periodictable/README +++ b/graphics/pgf/contrib/pgf-periodictable/README @@ -1,4 +1,4 @@ -This is pgf-PeriodicTable, version 2.1.0a (2024/04/03). +This is pgf-PeriodicTable, version 2.1.4 (2024/09/08). The purpose of this package is to provide the Periodic Table of Elements in a simple way. It relies on pgf/TikZ to offer a full or partial periodic table with @@ -22,6 +22,27 @@ ____________________________________________________________ Major changes: +*** v2.1.4 (08/09/2024) *** +Fixed wrong box width on extra legend of Country of Discovery. +Fixed minor issues in pgfPTbuildcell macros. +Added the prefix 'pgfPT' to the built-in back color schemes. They are now 'pgfPTdefault', 'pgfPTSoft', 'pgfPTJmol', +'pgfPTCPK', 'pgfPTRasmol', 'pgfPTRasmolNew', 'pgfPTWikipedia', 'pgfPTMNM', 'pgfPTPS', 'pgfPTRadio' and 'pgfPTBlocks'. +Fixed some typos in the manual. + +*** v2.1.3 (07/08/2024) *** +The engine's detection mechanism (pdfLaTeX, LuaLaTeX or XeTeX) has been changed to prevent erroneous detection when the packages 'hyperref' or 'bookmark' are loaded and the document is compiled with LuaLaTeX - in this case, pgf-PeriodicTable disturbs the selection of the document font. +Fixed an issue with the Chemical Symbol color when a non-rgb color is used, such as cyan or yellow , which are defined in the xcolor package using the cmyk model (when loaded without options). + +*** v2.1.2 (01/08/2024) *** +Fixed incorrect Spanish translations of some element names. +Minor code improvements to eliminate runtime warnings («LaTeX Font Warning: Font shape `TU/TeXGyreHeros(0)/l/n' undefined» or «Missing character: There is no m (U+006D) in font nullfont!» ... ) + +*** v2.1.1 (07/07/2024) *** +New keys: +- group numbers (to display group numbers in arabic numerals, Roman numerals or both) +- Roman label color (sets the color of the Roman numerals) +- O Roman (the oxidation numbers are presnted in Roman numerals) + *** v2.1.0a (03/04/2024) *** Translation files have been renamed from 'lang.{undefined,nl}.tex' to 'pgfPT.lang.{undefined,nl}.tex' to match the runtime tree of TeX Live (names must be globally unique for reliable searching). diff --git a/graphics/pgf/contrib/pgf-periodictable/manualfiles/pgf-PeriodicTableManual_DiscY.tex b/graphics/pgf/contrib/pgf-periodictable/manualfiles/pgf-PeriodicTableManual_DiscY.tex index 66e67fc3c7..9a18c1f8dd 100644 --- a/graphics/pgf/contrib/pgf-periodictable/manualfiles/pgf-PeriodicTableManual_DiscY.tex +++ b/graphics/pgf/contrib/pgf-periodictable/manualfiles/pgf-PeriodicTableManual_DiscY.tex @@ -1,23 +1,23 @@ %\vfill% -\subsubsection{\texorpdfstring{\ding{224} The discovery year}{The discovery year}}\vspace{6pt}% +\subsubsection{\texorpdfstring{\ding{224} The year of discovery}{The year of discovery}}\vspace{6pt}% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % DiscY color \pgfPTMoption{4}{DiscY color}{black}{% -Sets the discovery year color. +Sets the color of the discovery year. } \\ [5pt]\pgfPTMmacrobox{pgfPT}[Z list={1,...,36},cell style=pgfPTdisc,DiscY color=red]% \\ [10pt]\makebox[\linewidth][c]{\scalebox{.6}{\pgfPT[Z list={1,...,36},cell style=pgfPTdisc,DiscY color=red]}}% \\ [5pt]\pgfPTendoption% % DiscY font \pgfPTMoption{4}{DiscY font}{\string\tiny\string\bfseries}{% -Sets the discovery year font. +Sets the font of the discovery year. } \\ [5pt]\pgfPTMmacrobox{pgfPT}[Z list={1,...,36},cell style=pgfPTdisc,DiscY font=\string\fontfamily{pbk}\string\selectfont\string\tiny\string\bfseries]% \\ [10pt]\makebox[\linewidth][c]{\scalebox{.6}{\pgfPT[Z list={1,...,36},cell style=pgfPTdisc,DiscY font=\fontfamily{pbk}\selectfont\tiny\bfseries]}}% \\ [5pt]\pgfPTendoption% % DiscY BC scale \pgfPTMoption{4}{DiscY BC scale}{1}{% -Sets the font factor scaling for the Before Christ (BC) acronym in the discovery year. +Sets the font factor scaling for the Before Christ (BC) acronym in the year of discovery. } \\ [5pt]\pgfPTMmacrobox{pgfPT}[Z list={1,...,36},cell style=pgfPTdisc,DiscY BC scale=.8]% \\ [10pt]\makebox[\linewidth][c]{\scalebox{.6}{\pgfPT[Z list={1,...,36},cell style=pgfPTdisc,DiscY BC scale=.8]}}% diff --git a/graphics/pgf/contrib/pgf-periodictable/manualfiles/pgf-PeriodicTableManual_Examples.tex b/graphics/pgf/contrib/pgf-periodictable/manualfiles/pgf-PeriodicTableManual_Examples.tex index b9b76f64d1..4b9211dc54 100644 --- a/graphics/pgf/contrib/pgf-periodictable/manualfiles/pgf-PeriodicTableManual_Examples.tex +++ b/graphics/pgf/contrib/pgf-periodictable/manualfiles/pgf-PeriodicTableManual_Examples.tex @@ -71,7 +71,7 @@ The following examples could be used for students or for any other purposes. \def\grupo[#1][#2] #3{% \begin{tikzpicture}[inner xsep=0pt] \node[below left,text width=1.75cm,text centered] (figura) at (0,0) % -{\scalebox{.5}{\pgfPT[show title=false,show label LaAc=true,show legend=false,back color scheme=MNM,% +{\scalebox{.5}{\pgfPT[show title=false,show label LaAc=true,show legend=false,back color scheme=pgfPTMNM,% font=Roboto-TLF,CS font=\fontfamily{RobotoSlab-TLF}\bfseries\large,eDist color=blue!70!black,% DiscC font=\fontsize{4}{4}\selectfont,DiscY font=\fontsize{4}{4}\selectfont\bfseries,% name font=\fontseries{l}\fontsize{6pt}{6pt}\selectfont,name color=red!50!black,% diff --git a/graphics/pgf/contrib/pgf-periodictable/manualfiles/pgf-PeriodicTableManual_O.tex b/graphics/pgf/contrib/pgf-periodictable/manualfiles/pgf-PeriodicTableManual_O.tex new file mode 100644 index 0000000000..06f322d5ee --- /dev/null +++ b/graphics/pgf/contrib/pgf-periodictable/manualfiles/pgf-PeriodicTableManual_O.tex @@ -0,0 +1,33 @@ +\vfill% +\subsubsection{\texorpdfstring{\ding{224} The oxidation states}{The oxidation states}}%\vspace{6pt}% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% O color +\pgfPTMoption{4}{O color}{black}{% +Sets the color of the oxidation states. +} +\\ [10pt]\pgfPTMbuildcell(5,3)[(1;1-2;Z),(1;3;radio),(2-3;1.5-3.5;CS),(4;1-3;name),(5;1-3;O)]% +\pgfPTbuildcell(5,3)[(1;1-2;Z),(1;3;radio),(2-3;1.5-3.5;CS),(4;1-3;name),(5;1-3;O)]% +\\ [5pt]\pgfPTMmacrobox{pgfPTstyle}[show title=false]% +\pgfPTstyle[show title=false]% +\\ [-1pt]\pgfPTMmacrobox{pgfPT}[Z list={1,...,36},O color=red]% +\\ [5pt]\makebox[\linewidth][c]{\scalebox{.6}{\pgfPT[Z list={1,...,36},O color=red]}}% +\\ [0pt]\pgfPTendoption% +% O font \tiny\bfseries +\pgfPTMoption{4}{O font}{\string\tiny\string\bfseries}{% +Sets the font of the oxidation states. +} +\\ [5pt]\pgfPTMmacrobox{pgfPT}[Z list={1,...,36},O font=\string\itshape\string\tiny]% +\\ [5pt]\makebox[\linewidth][c]{\scalebox{.6}{\pgfPT[Z list={1,...,36},O font=\itshape\tiny]}}% +\\ [0pt]\pgfPTendoption% +% O Roman +\newpage\vspace{-34pt}\ % +\pgfPTMoption[\mbox{\pgfPTnewinversion{2.1.1}}]{4}{O Roman}{false}{% +When set to \red{true} the oxidation states are displayed in Roman numerals, otherwise they are displayed in arabic numerals. +} +%\\ [5pt]\pgfPTMmacrobox{pgfPT}[Z list={1,...,36},O Roman]% +%\\ [5pt]\makebox[\linewidth][c]{\scalebox{.6}{\pgfPT[Z list={1,...,36},O Roman]}}% +\\ [5pt]\pgfPTMmacrobox{pgfPT}[Z list=spd,O Roman,group numbers=CAS]% +\\ [5pt]\makebox[\linewidth][c]{\scalebox{.6}{\pgfPT[Z list=spd,O Roman,group numbers=CAS]}}% +\\ [5pt]\pgfPTendoption% +\pgfPTresetcell% +\endinput diff --git a/graphics/pgf/contrib/pgf-periodictable/manualfiles/pgf-PeriodicTableManual_OtherCont.tex b/graphics/pgf/contrib/pgf-periodictable/manualfiles/pgf-PeriodicTableManual_OtherCont.tex index e74b8bf418..6b57de7bb0 100644 --- a/graphics/pgf/contrib/pgf-periodictable/manualfiles/pgf-PeriodicTableManual_OtherCont.tex +++ b/graphics/pgf/contrib/pgf-periodictable/manualfiles/pgf-PeriodicTableManual_OtherCont.tex @@ -7,12 +7,12 @@ For all the \textit{other contents} available for the cells of the periodic tabl \begin{itemlist} %\item\red{\textbf{name}}:\hspace{.5ex}element name \item\red{\textbf{R}}:\hspace{.5ex}atomic radius -\item\red{\textbf{Rcov}}:\hspace{.5ex}covalente radius +\item\red{\textbf{Rcov}}:\hspace{.5ex}covalent radius \item\red{\textbf{Rion}}:\hspace{.5ex}ionic radius \item\red{\textbf{Ei}}:\hspace{.5ex}first ionization energy \item\red{\textbf{eneg}}:\hspace{.5ex}electronegativity (Pauling) \item\red{\textbf{eaff}}:\hspace{.5ex}electroaffnity -\item\red{\textbf{O}}:\hspace{.5ex}oxidation states +%\item\red{\textbf{O}}:\hspace{.5ex}oxidation states \item\red{\textbf{Tmelt}}:\hspace{.5ex}melting point (Kelvin) \item\red{\textbf{TmeltC}}:\hspace{.5ex}melting point (Celsius degrees) \item\red{\textbf{Tboil}}:\hspace{.5ex}boiling point (Kelvin) @@ -29,7 +29,7 @@ For all the \textit{other contents} available for the cells of the periodic tabl \item\red{\textbf{lsb}}:\hspace{.5ex}lattice constant -- b \item\red{\textbf{lsc}}:\hspace{.5ex}lattice constant -- c \item\red{\textbf{lsca}}:\hspace{.5ex}lattice c/a ratio -\item\red{\textbf{DiscC}}:\hspace{.5ex}discover country +\item\red{\textbf{DiscC}}:\hspace{.5ex}country of discovery \item\red{\textbf{spectra}}:\hspace{.5ex}visible range spectral lines \end{itemlist} \end{minipage} diff --git a/graphics/pgf/contrib/pgf-periodictable/manualfiles/pgf-PeriodicTableManual_commands.tex b/graphics/pgf/contrib/pgf-periodictable/manualfiles/pgf-PeriodicTableManual_commands.tex index 9e1ba55405..cbc7cbc2fa 100644 --- a/graphics/pgf/contrib/pgf-periodictable/manualfiles/pgf-PeriodicTableManual_commands.tex +++ b/graphics/pgf/contrib/pgf-periodictable/manualfiles/pgf-PeriodicTableManual_commands.tex @@ -33,8 +33,8 @@ \\ [0pt]\pgfPTMline% \newpage% This command can also be used with options -- as described in section \hyperlink{OPTIONS}{Options for \textbackslash pgfPT: creating a Periodic Table} -- to modify, for instance, the font of the Periodic Table or the colors of the cells: -\\ [10pt]\pgfPTMmacrobox{pgfPT}[font=pnc,back color scheme=MNM]% -\\ [10pt]\makebox[\linewidth][c]{\scalebox{.6}{\pgfPT[font=pnc,back color scheme=MNM]}}% +\\ [10pt]\pgfPTMmacrobox{pgfPT}[font=pnc,back color scheme=pgfPTMNM]% +\\ [10pt]\makebox[\linewidth][c]{\scalebox{.6}{\pgfPT[font=pnc,back color scheme=pgfPTMNM]}}% \\ [0pt]\pgfPTMline% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \\ [-32pt]\ % @@ -87,7 +87,7 @@ It is possible to locally override the \textit{global style} defined: \\ [-32pt]\ % \def\tmpSection{\bs{pgfPTresetcell}}% \subsection*{}{\normalfont\large\bfseries\raisebox{1.25pt}{\color{black}$\mathbf{\blacktriangleright}$}\ Utilization of \tmpSection}% -\label{command:pgfPTresetcell}\addcontentsline{toc}{subsection}{\texorpdfstring{\tmpSection{}}{\textbackslash pgfPTbuildcellstyle}}% +\label{command:pgfPTresetcell}\addcontentsline{toc}{subsection}{\texorpdfstring{\tmpSection{}}{\textbackslash pgfPTresetcell}}% \index{COMMANDS@\textbf{COMMANDS}!\textbackslash pgfPTresetcell}% \\ [4pt]The \pgfPTMmacro{pgfPTresetcell}[] resets the cell to its default layout. \\ [-32pt]\ % @@ -154,16 +154,16 @@ It is possible to locally override the \textit{global style} defined: There are a few \textit{color schemes} predefined: \index{BUILT-IN@\textbf{BUILT-IN}!color schemes}% \begin{itembar} -\item\textbf{default}, the default built-in color scheme, which is loaded if no value is passed to the \red{back color scheme} key. -\item\textbf{Soft}, a soft color pattern for cells, differentiating metals, non metals, semimetals, lanthanides and actinides. -\item\textbf{Jmol}, a color scheme based upon \href{http://www.jmol.org/}{Jmol: an open-source Java viewer for chemical structures in 3D}. -\item\textbf{CPK}, a color scheme that is based upon the colors of the popular plastic spacefilling models which were developed by Corey, Pauling and later improved by Kultun. -\item\textbf{Rasmol} and \textbf{RasmolNew}, two color schemes based upon the computer program \href{http://www.rasmol.org/}{RasMol}. -\item\textbf{Wikipedia}, a color scheme built on the Periodic Table of Elements available at \href{https://en.wikipedia.org/wiki/Periodic_table#Classification_of_elements}{Wikipedia}. -\item\textbf{MNM}, a color pattern which distinguishes between \textbf{M}etals, semimetals and \textbf{N}on \textbf{M}etals. -\item\textbf{PS}, a color scheme depicting the \textbf{P}hysical \textbf{S}tate at room temperature. -\item\textbf{Radio}, a two color color scheme showing the radioactivity of the elements. -\item\textbf{Blocks}, a four colored color scheme showing the \textit{s}, \textit{p}, \textit{d} and \textit{f} blocks of the Periodic Table. +\item\textbf{pgfPTdefault}, the default built-in color scheme, which is loaded if no value is passed to the \red{back color scheme} key. +\item\textbf{pgfPTSoft}, a soft color pattern for cells, differentiating metals, non metals, semimetals, lanthanides and actinides. +\item\textbf{pgfPTJmol}, a color scheme based upon \href{http://www.jmol.org/}{Jmol: an open-source Java viewer for chemical structures in 3D}. +\item\textbf{pgfPTCPK}, a color scheme that is based upon the colors of the popular plastic spacefilling models which were developed by Corey, Pauling and later improved by Kultun. +\item\textbf{pgfPTRasmol} and \textbf{pgfPTRasmolNew}, two color schemes based upon the computer program \href{http://www.rasmol.org/}{RasMol}. +\item\textbf{pgfPTWikipedia}, a color scheme built on the Periodic Table of Elements available at \href{https://en.wikipedia.org/wiki/Periodic_table#Classification_of_elements}{Wikipedia}. +\item\textbf{pgfPTMNM}, a color pattern which distinguishes between \textbf{M}etals, semimetals and \textbf{N}on \textbf{M}etals. +\item\textbf{pgfPTPS}, a color scheme depicting the \textbf{P}hysical \textbf{S}tate at room temperature. +\item\textbf{pgfPTRadio}, a two color color scheme showing the radioactivity of the elements. +\item\textbf{pgfPTBlocks}, a four colored color scheme showing the \textit{s}, \textit{p}, \textit{d} and \textit{f} blocks of the Periodic Table. \end{itembar} \vspace{5pt} Writing a color scheme can be painstaking work, so a \textit{script} is provided for that: diff --git a/graphics/pgf/contrib/pgf-periodictable/manualfiles/pgf-PeriodicTableManual_density.tex b/graphics/pgf/contrib/pgf-periodictable/manualfiles/pgf-PeriodicTableManual_density.tex index 2a33c0371e..511bd765c6 100644 --- a/graphics/pgf/contrib/pgf-periodictable/manualfiles/pgf-PeriodicTableManual_density.tex +++ b/graphics/pgf/contrib/pgf-periodictable/manualfiles/pgf-PeriodicTableManual_density.tex @@ -14,28 +14,28 @@ Sets the density value text color.} \pgfPTMoption{4}{d font}{\string\tiny\string\bfseries}{% Sets the density value text font. } -\\ [5pt]\pgfPTMmacrobox{pgfPT}[Z list={1,...,36},cell style=myd,show title=false]% -\\ [5pt]\makebox[\linewidth][c]{\scalebox{.6}{\pgfPT[Z list={1,...,36},Z list={1,...,36},cell style=myd,show title=false]}}% -\\ [10pt]\pgfPTMmacrobox{pgfPT}[Z list={1,...,36},cell style=myd,show title=false,d font=\string\tiny\string\itshape]% +%\\ [5pt]\pgfPTMmacrobox{pgfPT}[Z list={1,...,36},cell style=myd,show title=false]% +%\\ [5pt]\makebox[\linewidth][c]{\scalebox{.6}{\pgfPT[Z list={1,...,36},Z list={1,...,36},cell style=myd,show title=false]}}% +\\ [5pt]\pgfPTMmacrobox{pgfPT}[Z list={1,...,36},cell style=myd,show title=false,d font=\string\tiny\string\itshape]% \\ [5pt]\makebox[\linewidth][c]{\scalebox{.6}{\pgfPT[Z list={1,...,36},Z list={1,...,36},cell style=myd,show title=false,d font=\tiny\itshape]}}% \\ [0pt]\pgfPTendoption% -% d unit=<g/cm3|g/dm3|both> .default=g/dm3 \vfill% +% d unit=<g/cm3|g/dm3|both> .default=g/dm3 \pgfPTMoption[\pgfPTnewinversion{1.0.1}]{4}{d unit}{both}{% Sets the unit for the density of the elements. The two possible values to this key are \red{g/dm3} ($\mathsf{g/dm^3}$), \red{g/cm3} ($\mathsf{g/cm^3}$) and \red{both} ($\mathsf{g/dm^3}$ for elements in the gaseous state and $\mathsf{g/cm^3}$ for all other elements). }% \\ [5pt]\pgfPTMmacrobox{pgfPT}[Z list={1,...,36},cell style=myd,show title=false]% -\\ [10pt]\makebox[\linewidth][c]{\scalebox{.6}{\pgfPT[Z list={1,...,36},cell style=myd,show title=false]}}% +\\ [5pt]\makebox[\linewidth][c]{\scalebox{.6}{\pgfPT[Z list={1,...,36},cell style=myd,show title=false]}}% \\ [5pt]\pgfPTMmacrobox{pgfPT}[Z list={1,...,36},cell style=myd,show title=false,d unit=g/cm3]% -\\ [10pt]\makebox[\linewidth][c]{\scalebox{.6}{\pgfPT[Z list={1,...,36},cell style=myd,show title=false,d unit=g/cm3]}}% +\\ [5pt]\makebox[\linewidth][c]{\scalebox{.6}{\pgfPT[Z list={1,...,36},cell style=myd,show title=false,d unit=g/cm3]}}% \\ [5pt]\pgfPTMmacrobox{pgfPT}[Z list={1,...,36},cell style=myd,show title=false,d unit=g/dm3]% -\\ [10pt]\makebox[\linewidth][c]{\scalebox{.6}{\pgfPT[Z list={1,...,36},cell style=myd,show title=false,d unit=g/dm3]}}% +\\ [5pt]\makebox[\linewidth][c]{\scalebox{.6}{\pgfPT[Z list={1,...,36},cell style=myd,show title=false,d unit=g/dm3]}}% \\ [0pt]\pgfPTendoption% -\vfill\newpage\ \\ [-32pt]% +\newpage\ \\ [-32pt]% % d precision \pgfPTMoption{4}{d precision}{-1}{% Sets the density precision, \ie, the decimal places displayed in their value, performing the respective rounding, without zero padding the value. -\\ [10pt]\tikz{\node[text width=\linewidth-.6666em,fill=orange!5!white,draw=orange,rounded corners=2pt] {\textbf{\red{NOTE}}:\\ Rounding is performed over density values witch actually have a maximum 5 or 8 decimal places, when the values are in $\mathsf{g/dm^3}$ or in $\mathsf{g/cm^3}$, respectively.. So giving this key a value of -1 (the value of the melting or boiling point as-is) or 5 or 8 has the same effect. +\\ [10pt]\tikz{\node[text width=\linewidth-.6666em,fill=orange!5!white,draw=orange,rounded corners=2pt] {\textbf{\red{NOTE}}:\\ Rounding is performed over density values witch actually have a maximum 5 or 8 decimal places, when the values are in $\mathsf{g/dm^3}$ or in $\mathsf{g/cm^3}$, respectively.. So giving this key a value of -1 (the value of the density as-is) or 5 or 8 has the same effect. \\ \textit{Therefore the values provided to this key should be any integer between -1 and 4 ($\mathsf{g/dm^3}$) or 7 ($\mathsf{g/cm^3}$). Any other integer provided will be processed as -1.}};} } \vfill%\\ [10pt] diff --git a/graphics/pgf/contrib/pgf-periodictable/manualfiles/pgf-PeriodicTableManual_generallayout.tex b/graphics/pgf/contrib/pgf-periodictable/manualfiles/pgf-PeriodicTableManual_generallayout.tex index 6658536639..3c32e1a95c 100644 --- a/graphics/pgf/contrib/pgf-periodictable/manualfiles/pgf-PeriodicTableManual_generallayout.tex +++ b/graphics/pgf/contrib/pgf-periodictable/manualfiles/pgf-PeriodicTableManual_generallayout.tex @@ -151,27 +151,27 @@ any \textbf{user defined} name via \pgfPTMmacro{pgfPTnewZlist}[]\{name\}\{list\} % back color scheme \label{option_back color scheme}% \vfill -\pgfPTMoption{4}{back color scheme}{default}% +\pgfPTMoption{4}{back color scheme}{pgfPTdefault}% {Sets a \blue{named} back color scheme for the Periodic Table.}% -\\ [5pt]\pgfPTMmacrobox{pgfPT}[back color scheme=Soft]% -\\ [5pt]\makebox[\linewidth][c]{\scalebox{.6}{\pgfPT[back color scheme=Soft]}}% +\\ [5pt]\pgfPTMmacrobox{pgfPT}[back color scheme=pgfPTSoft]% +\\ [5pt]\makebox[\linewidth][c]{\scalebox{.6}{\pgfPT[back color scheme=pgfPTSoft]}}% \newpage% \pgfPTMoptiontxt{% The possible \lblue{name} is one of the following: \begin{itembar} \item\textbf{built-in}: \begin{itemize} -\item[\raisebox{1pt}{\scriptsize$\vartriangleright\,$}]\sq{Soft}, a soft color scheme that distinguishes metal, non metals, silicon and germanium, lanthanoids and actinoids. -\item[\raisebox{1pt}{\scriptsize$\vartriangleright\,$}]\sq{Jmol}, is the color scheme used in the computer software \href{http://jmol.sourceforge.net/}{Jmol}: an open-source Java viewer for chemical structures in 3D. -\item[\raisebox{1pt}{\scriptsize$\vartriangleright\,$}]\sq{CPK}, is the color scheme of the popular color convention for distinguishing atoms of different chemical +\item[\raisebox{1pt}{\scriptsize$\vartriangleright\,$}]\sq{pgfPTSoft}, a soft color scheme that distinguishes metals, non metals, silicon and germanium, lanthanoids and actinoids. +\item[\raisebox{1pt}{\scriptsize$\vartriangleright\,$}]\sq{pgfPTJmol}, is the color scheme used in the computer software \href{http://jmol.sourceforge.net/}{Jmol}: an open-source Java viewer for chemical structures in 3D. +\item[\raisebox{1pt}{\scriptsize$\vartriangleright\,$}]\sq{pgfPTCPK}, is the color scheme of the popular color convention for distinguishing atoms of different chemical elements in molecular models. The scheme is named after the CPK molecular models designed by chemists Robert Corey and Linus Pauling, and improved by Walter Koltun. -\item[\raisebox{1pt}{\scriptsize$\vartriangleright\,$}]\sq{Rasmol}, is the color scheme used in the computer software \href{http://www.rasmol.org/}{RasMol}, a program for molecular graphics visualization originally developed by Roger Sayle. -\item[\raisebox{1pt}{\scriptsize$\vartriangleright\,$}]\sq{RasmolNew}, is a color scheme used in RasMol with revision of CPK colors made by C. Chigbo (RasMol 2.7.3). -\item[\raisebox{1pt}{\scriptsize$\vartriangleright\,$}]\sq{Wikipedia}, is the color scheme based on the \href{https://en.wikipedia.org/wiki/Periodic_table\#Classification_of_elements}{Wikipedia Periodic Table of Elements}. -\item[\raisebox{1pt}{\scriptsize$\vartriangleright\,$}]\sq{MNM}, is designed to show \textbf{M}etals and \textbf{N}on \textbf{M}etals in two different colors, showing also the semi-metals in a third color. -\item[\raisebox{1pt}{\scriptsize$\vartriangleright\,$}]\sq{PS}, is designed to show the \textbf{P}hysical \textbf{S}tate of the elements at normal temperature and pressure (NTP) in different colors. -\item[\raisebox{1pt}{\scriptsize$\vartriangleright\,$}]\sq{Radio}, is designed to show the \textbf{R}adioactive elements in one color and the non radioactive elements in another color. -\item[\raisebox{1pt}{\scriptsize$\vartriangleright\,$}]\sq{Blocks}, for showing the elements in each block of the Periodic Table with the same color. +\item[\raisebox{1pt}{\scriptsize$\vartriangleright\,$}]\sq{pgfPTRasmol}, is the color scheme used in the computer software \href{http://www.rasmol.org/}{RasMol}, a program for molecular graphics visualization originally developed by Roger Sayle. +\item[\raisebox{1pt}{\scriptsize$\vartriangleright\,$}]\sq{pgfPTRasmolNew}, is a color scheme used in RasMol with revision of CPK colors made by C. Chigbo (RasMol 2.7.3). +\item[\raisebox{1pt}{\scriptsize$\vartriangleright\,$}]\sq{pgfPTWikipedia}, is the color scheme based on the \href{https://en.wikipedia.org/wiki/Periodic_table\#Classification_of_elements}{Wikipedia Periodic Table of Elements}. +\item[\raisebox{1pt}{\scriptsize$\vartriangleright\,$}]\sq{pgfPTMNM}, is designed to show \textbf{M}etals and \textbf{N}on \textbf{M}etals in two different colors, showing also the semi-metals in a third color. +\item[\raisebox{1pt}{\scriptsize$\vartriangleright\,$}]\sq{pgfPTPS}, is designed to show the \textbf{P}hysical \textbf{S}tate of the elements at normal temperature and pressure (NTP) in different colors. +\item[\raisebox{1pt}{\scriptsize$\vartriangleright\,$}]\sq{pgfPTRadio}, is designed to show the \textbf{R}adioactive elements in one color and the non radioactive elements in another color. +\item[\raisebox{1pt}{\scriptsize$\vartriangleright\,$}]\sq{pgfPTBlocks}, for showing the elements in each block of the Periodic Table with the same color. \item[\raisebox{1pt}{\scriptsize$\vartriangleright\,$}]\sq{solid}, to show the background of each cell of the Periodic Table with the same color specified by the key \sq{\red{back color}}. \end{itemize} \item any \textbf{user defined} name via \bs{pgfPTnewColorScheme}\lb\red{name}\rb\lb\red{color list}\rb% @@ -201,7 +201,7 @@ elements in molecular models. The scheme is named after the CPK molecular models \newpage\vspace{-34pt}\ % \foreach \csName/\x in {Soft/0,Jmol/1,CPK/0,Rasmol/1,RasmolNew/0,Wikipedia/1,MNM/0,PS/1,Radio/0,Blocks/1}{% \pgfPTMstyletxt{4}{cs\csName}{no value}% -{A style equivalent to \red{back color scheme=\csName}}% +{A style equivalent to \red{back color scheme=pgfPT\csName}}% \\ [5pt]\pgfPTMmacrobox{pgfPT}[cs\csName]% \\ [10pt]\makebox[\linewidth][c]{\scalebox{.6}{\pgfPT[cs\csName]}}% \\ [0pt]\pgfPTendstyle% @@ -262,7 +262,7 @@ elements in molecular models. The scheme is named after the CPK molecular models \vfill \label{option_languages}% \pgfPTMoption[\pgfPTchangedinversion{2.1.0}]{4}{languages}{\{\}}% -{Sets a language list to use in the Periodic Table. It is a comma separated list of language flags: \sq{pt}, \sq{en}, \sq{fr}, \sq{de}, \sq{it}, \sq{es} or \sq{br}. If a user language has been loaded, the corresponding ISO 639-1 code can also be used as a language flag. \textit{This key overrides the default language, that is, the language loaded at package inclusion}.\\ \ }% +{Sets a language list to use in the Periodic Table. It is a comma separated list of language flags: \sq{pt}, \sq{en}, \sq{fr}, \sq{de}, \sq{it}, \sq{es} or \sq{br}. If a user language has been loaded, the corresponding ISO 639-1 code can also be used as a language flag. \textit{This key locally overrides the default language, that is, the language loaded at package inclusion}.\\ \ }% \\ [5pt]\pgfPTMmacrobox{pgfPT}[Z list={1,...,36},languages=pt]% \\ [10pt]\makebox[\linewidth][c]{\scalebox{.6}{\pgfPT[Z list={1,...,36},languages=pt]}}% \\ [10pt]\pgfPTMmacrobox{pgfPT}[Z list={1,...,36},cell style=pgfPT2lang,languages={en,fr}]% diff --git a/graphics/pgf/contrib/pgf-periodictable/manualfiles/pgf-PeriodicTableManual_libCS.tex b/graphics/pgf/contrib/pgf-periodictable/manualfiles/pgf-PeriodicTableManual_libCS.tex index 5e8ffea167..e973146b7f 100644 --- a/graphics/pgf/contrib/pgf-periodictable/manualfiles/pgf-PeriodicTableManual_libCS.tex +++ b/graphics/pgf/contrib/pgf-periodictable/manualfiles/pgf-PeriodicTableManual_libCS.tex @@ -232,7 +232,7 @@ P6=*[RGB:62;82;126],P7=*[RGB:101;117;153]}\rb% \label{command:pgfPTCScombine}\addcontentsline{toc}{subsubsection}{\texorpdfstring{\tmpSectionIII{}}{\textbackslash pgfPTCScombine}}% \index{LIBRARIES@\textbf{\cyan{LIBRARIES}}!colorschemes@\textbf{\red{Color Schemes Library}}!\tmpSectionIII}% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\\ [10pt]This command \textbf{combines two named Color Schemes} and merges the result in a new Color Scheme with \red{name of the new color scheme}. +\\ [10pt]This command \textbf{combines two named Color Schemes} and merges the result into a new Color Scheme with \red{name of the new color scheme}. \\ For example \bs{pgfPTCScombine}\lb\red{myCSA,myCSB,myCSC}\rb\ adds the color scheme \red{myCSA} to the color scheme \red{myCSB} and their sum will be available as the color scheme \red{myCSC}. \\ [3pt]\blue{\textbf{NOTE}}: if the Color Schemes have different sizes (\ie, different number of colors), the last color from the color scheme that ends first will be used until the other color scheme also ends. \\ [3pt]The optional parameters \lp\red{prop1:prop2,mode}\rp\ are for controlling how the two Color Schemes are combined: @@ -292,24 +292,24 @@ P6=*[RGB:62;82;126],P7=*[RGB:101;117;153]}\rb% }{% \scalebox{.425}{\pgfPT[back color scheme=mix,show title=false]}% }% ----- -\vfill\pgfPTCScombine[add]{Soft,group,mix}% +\vfill\pgfPTCScombine[add]{pgfPTSoft,group,mix}% \textit{Built-in color schemes can also be mixed}: \\ [10pt]\pgfPTMlibexample{% -\bs{pgfPTCScombine}\lp\red{add}\rp\lb\red{Soft,group,mix}\rb% +\bs{pgfPTCScombine}\lp\red{add}\rp\lb\red{pgfPTSoft,group,mix}\rb% \\ \pgfPTMmacro{pgfPT}[back color scheme=mix,show title=false]% }{% \scalebox{.425}{\pgfPT[back color scheme=mix,show title=false]}% }% ----- -\newpage\pgfPTCScombine[add,3:1]{Soft,PS,mix}% +\newpage\pgfPTCScombine[add,3:1]{pgfPTSoft,pgfPTPS,mix}% \pgfPTMlibexample{% -\bs{pgfPTCScombine}\lp\red{add,3:1}\rp\lb\red{Soft,PS,mix}\rb% +\bs{pgfPTCScombine}\lp\red{add,3:1}\rp\lb\red{pgfPTSoft,pgfPTPS,mix}\rb% \\ \pgfPTMmacro{pgfPT}[back color scheme=mix,show title=false]% }{% \scalebox{.425}{\pgfPT[back color scheme=mix,show title=false]}% }% ----- -\\ [4pt]\pgfPTCScombine{Radio,Wikipedia,mix}% +\\ [4pt]\pgfPTCScombine{pgfPTRadio,pgfPTWikipedia,mix}% \pgfPTMlibexample{% -\bs{pgfPTCScombine}\lp\red{add}\rp\lb\red{Radio,Wikipedia,mix}\rb% +\bs{pgfPTCScombine}\lp\red{add}\rp\lb\red{pgfPTRadio,pgfPTWikipedia,mix}\rb% \\ \pgfPTMmacro{pgfPT}[back color scheme=mix,show title=false]% }{% \scalebox{.425}{\pgfPT[back color scheme=mix,show title=false]}% @@ -322,7 +322,7 @@ P6=*[RGB:62;82;126],P7=*[RGB:101;117;153]}\rb% \index{LIBRARIES@\textbf{\cyan{LIBRARIES}}!colorschemes@\textbf{\red{Color Schemes Library}}!\tmpSectionIV}% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \\ [10pt]This command \textbf{writes the provided Color Schemes to a file} for later use without loading this library. It has a mandatory argument, the \red{list of the color schemes names} to be written and an optional argument, the \red{filename}. If no \red{filename} is provided the first name on the \red{list of the color schemes names} is used. -\\ For example, \bs{pgfPTCSwrite}\lp\red{myGroupColors}\rp\lb\red{myGroupGradGreenToRed,myGroupGreens, myGroupGradYellowToRed}\rb, \dcyan{\textit{will create (or overwrite), in the current working directory, a file with name} \texttt{\large myGroupColors.tex} \textit{with the follwing contents}}: +\\ For example, \bs{pgfPTCSwrite}\lp\red{myGroupColors}\rp\lb\red{myGroupGradGreenToRed,myGroupGreens, myGroupGradYellowToRed}\rb, \dcyan{\textit{will create (or overwrite), in the current working directory, a file with name} \texttt{\large myGroupColors.tex} \textit{with the following contents}}: \mymfbox{\textsf{% \textbackslash pgfPTnewColorScheme\{myGroupGradGreenToRed\}\{0/1/0,\myldots% \\ \textbackslash pgfPTnewColorScheme\{myGroupGreens\}\{0/1/.1,\myldots% diff --git a/graphics/pgf/contrib/pgf-periodictable/manualfiles/pgf-PeriodicTableManual_name.tex b/graphics/pgf/contrib/pgf-periodictable/manualfiles/pgf-PeriodicTableManual_name.tex index 78f8178826..0fcc955dd2 100644 --- a/graphics/pgf/contrib/pgf-periodictable/manualfiles/pgf-PeriodicTableManual_name.tex +++ b/graphics/pgf/contrib/pgf-periodictable/manualfiles/pgf-PeriodicTableManual_name.tex @@ -11,7 +11,7 @@ Sets the color of the element name. \\ [5pt]\makebox[\linewidth][c]{\scalebox{.6}{\pgfPT[Z list={1,...,36},name color=red]}}% \\ [0pt]\pgfPTendoption% % name font -\pgfPTMoption{4}{name font}{\string\fontseries\{l\}\string\selectfont\string\tiny}{% +\pgfPTMoption{4}{name font}{\string\tiny}{% \string\fontseries\{l\}\string\selectfont (removed @v2.1.2) Sets the font of the element name. } \\ [5pt]\pgfPTMmacrobox{pgfPT}[Z list={1,...,36},name font=\string\itshape\string\tiny]% diff --git a/graphics/pgf/contrib/pgf-periodictable/manualfiles/pgf-PeriodicTableManual_periodgroup.tex b/graphics/pgf/contrib/pgf-periodictable/manualfiles/pgf-PeriodicTableManual_periodgroup.tex index 59e27e553e..ff09b0b2e1 100644 --- a/graphics/pgf/contrib/pgf-periodictable/manualfiles/pgf-PeriodicTableManual_periodgroup.tex +++ b/graphics/pgf/contrib/pgf-periodictable/manualfiles/pgf-PeriodicTableManual_periodgroup.tex @@ -1,4 +1,3 @@ -%\vfill\vfill% \subsubsection{\texorpdfstring{\ding{224} Periods and Groups}{Periods and Groups}}%\vspace{6pt}% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % show period numbers @@ -10,17 +9,38 @@ \\ [10pt]\pgfPTMmacrobox{pgfPT}[Z list={1,...,36},show period numbers=false]% \\ [5pt]\makebox[\linewidth][c]{\scalebox{.6}{\pgfPT[Z list={1,...,36},show period numbers=false]}}% \\ [5pt]\pgfPTendoption% -%\vfill% -%\newpage\ \\ [-32pt]% % show group numbers \label{option_show group numbers}% \pgfPTMoption{4}{show group numbers}{true}% {When set to \red{true} the group numbers are shown, otherwise they are not shown.}% \\ [5pt]\pgfPTMmacrobox{pgfPT}[Z list={1,...,36}]% -\\ [10pt]\makebox[\linewidth][c]{\scalebox{.6}{\pgfPT[Z list={1,...,36}]}}% +\\ [5pt]\makebox[\linewidth][c]{\scalebox{.6}{\pgfPT[Z list={1,...,36}]}}% \\ [10pt]\pgfPTMmacrobox{pgfPT}[Z list={1,...,36},show group numbers=false]% -\\ [10pt]\makebox[\linewidth][c]{\scalebox{.6}{\pgfPT[Z list={1,...,36},show group numbers=false]}}% -\\ [5pt]\pgfPTendoption% +\\ [5pt]\makebox[\linewidth][c]{\scalebox{.6}{\pgfPT[Z list={1,...,36},show group numbers=false]}}% +\\ [0pt]\pgfPTendoption% +\vfill% +% group numbers +\label{option_group numbers}% +\pgfPTMoption[\pgfPTnewinversion{2.1.1}]{4}{group numbers}{arabic}% +{This key controls how group numbering is displayed: +\vspace{4pt}\begin{itemlist} +\item\red{\textbf{arabic}}: group numbers are shown in arabic numerals as recommended by IUPAC since 1988. +\item\red{\textbf{CAS}}: group numbers are shown in Roman numerals and `A' or `B' suffix. This is an older naming scheme, used by the Chemical Abstract Service (CAS), more popular in the United States. +\item\red{\textbf{IUPAC}}: group numbers are shown in Roman numerals and `A' or `B' suffix. This is an older naming scheme, used by IUPAC before 1988, more popular in Europe. +\item\red{\textbf{CAS*}}: combines the option \red{CAS} and \red{arabic}. Roman numerals and `A' or `B' suffix are above the group and the arabic numerals above them. +\item\red{\textbf{IUPAC*}}: combines the option \red{IUPAC} and \red{arabic}. Roman numerals and `A' or `B' suffix are above the group and the arabic numerals above them. +\end{itemlist} +}% +\\ [5pt]\pgfPTMmacrobox{pgfPT}[Z list={1,...,36},group numbers=CAS]% +\\ [5pt]\makebox[\linewidth][c]{\scalebox{.6}{\pgfPT[Z list={1,...,36},group numbers=CAS]}}% +\newpage\vspace{-34pt}\ %\\ [10pt] +\pgfPTMmacrobox{pgfPT}[Z list={1,...,36},group numbers=IUPAC]% +\\ [5pt]\makebox[\linewidth][c]{\scalebox{.6}{\pgfPT[Z list={1,...,36},group numbers=IUPAC]}}% +\\ [10pt]\pgfPTMmacrobox{pgfPT}[Z list={1,...,36},group numbers=CAS*]% +\\ [5pt]\makebox[\linewidth][c]{\scalebox{.6}{\pgfPT[Z list={1,...,36},group numbers=CAS*]}}% +\\ [10pt]\pgfPTMmacrobox{pgfPT}[Z list={1,...,36},group numbers=IUPAC*]% +\\ [5pt]\makebox[\linewidth][c]{\scalebox{.6}{\pgfPT[Z list={1,...,36},group numbers=IUPAC*]}}% +\\ [0pt]\pgfPTendoption% \vfill% % period label color \label{option_period label color}% @@ -28,19 +48,26 @@ {Sets the period label color.}% \\ [5pt]\pgfPTMmacrobox{pgfPT}[Z list={1,...,36},period label color=black]% \\ [10pt]\makebox[\linewidth][c]{\scalebox{.6}{\pgfPT[Z list={1,...,36},period label color=black]}}% -\\ [5pt]\pgfPTendoption% -\vfill% -%\newpage\ \\ [-32pt]% +\\ [0pt]\pgfPTendoption% +\newpage\vspace{-34pt}\ %\vfill% % group label color \label{option_group label color}% \pgfPTMoption{4}{group label color}{blue!50!black}% {Sets the group label color.}% -\vfill% -\newpage%\\ [5pt] -\pgfPTMmacrobox{pgfPT}[Z list={1,...,36},group label color=black]% +\\ [5pt]\pgfPTMmacrobox{pgfPT}[Z list={1,...,36},group label color=black]% \\ [10pt]\makebox[\linewidth][c]{\scalebox{.6}{\pgfPT[Z list={1,...,36},group label color=black]}}% \\ [0pt]\pgfPTendoption% \vfill% +% Roman label color +\label{option_Roman label color}% +\pgfPTMoption[\pgfPTnewinversion{2.1.1}]{4}{Roman label color}{blue!70!black}% +{Sets the Roman group label color.}% +\\ [5pt]\pgfPTMmacrobox{pgfPT}[Z list={1,...,36},group numbers=CAS*,Roman label color=purple]% +\\ [10pt]\makebox[\linewidth][c]{\scalebox{.6}{\pgfPT[Z list={1,...,36},group numbers=CAS*,Roman label color=purple]}}% +\\ [5pt]\pgfPTMmacrobox{pgfPT}[Z list={1,...,36},group numbers=CAS*,Roman label color=purple, group label color=teal]% +\\ [10pt]\makebox[\linewidth][c]{\scalebox{.6}{\pgfPT[Z list={1,...,36},group numbers=CAS*,Roman label color=purple,group label color=teal]}}% +\\ [0pt]\pgfPTendoption% +\vfill% % label font \label{option_label font}% \pgfPTMoption{4}{label font}{\string\small\string\bfseries}% @@ -62,7 +89,6 @@ The key \red{show period numbers} is set to \red{true}. \\ [10pt]\makebox[\linewidth][c]{\scalebox{.6}{\pgfPT[Z list={1,...,36},per={gr=false,c=green!50!black}]}}% \\ [0pt]\pgfPTendstyle% \vfill% -%\newpage\ \\ [-32pt]% % gr={per=??,c=??,f=??} -> auto sets 'show groups numbers=true'; 'show period numbers' can be set to 'false' by the user % gr/.default={per=true,c=blue!50!black,f=\small\bfseries} % gr (pseudo style) @@ -72,11 +98,10 @@ The key \red{show period numbers} is set to \red{true}. The key \red{show group numbers} is set to \red{true}. \\ [3pt]\makebox[\linewidth][c]{\use{gr=\{per=<true|false>,c=<color>,f=<font commands>\}}}% }% -\vfill% -\newpage%\\ [5pt] -\pgfPTMmacrobox{pgfPT}[Z list={1,...,36},gr={per=false,c=green!50!black}]% +\\ [5pt]\pgfPTMmacrobox{pgfPT}[Z list={1,...,36},gr={per=false,c=green!50!black}]% \\ [10pt]\makebox[\linewidth][c]{\scalebox{.6}{\pgfPT[Z list={1,...,36},gr={per=false,c=green!50!black}]}}% \\ [0pt]\pgfPTendstyle% +\newpage\vspace{-34pt}\ %% % per+gr={c=??,pc=??,gc=??,f=??} -> auto sets 'show period numbers=true' & 'show groups numbers=true' % per+gr/.default={pc=red!50!black,gc=blue!50!black,f=\small\bfseries} % per+gr (pseudo style) diff --git a/graphics/pgf/contrib/pgf-periodictable/manualfiles/pgf-PeriodicTableManual_variations.tex b/graphics/pgf/contrib/pgf-periodictable/manualfiles/pgf-PeriodicTableManual_variations.tex index 04a606adfd..019fcf8e2b 100644 --- a/graphics/pgf/contrib/pgf-periodictable/manualfiles/pgf-PeriodicTableManual_variations.tex +++ b/graphics/pgf/contrib/pgf-periodictable/manualfiles/pgf-PeriodicTableManual_variations.tex @@ -21,7 +21,7 @@ {Sets the color used in the filling of the \textit{arrows} for the atomic radius variations. \\ [10pt]\tikz{\node[text width=\linewidth-.6666em,fill=orange!5!white,draw=orange,rounded corners=2pt] {\textbf{\orange{NOTE}}:\\ The color provided to \red{varR color} could be any defined color via the command \texttt{\normalsize\textbackslash definecolor} or by \textit{mixing} colors, using, for instance, the syntax \texttt{\normalsize color1!value!color2}, as explained in the \href{https://ctan.org/pkg/xcolor}{xcolor} package documentation.};} }% -\\ [5pt]\pgfPTMmacrobox{pgfPT}[show periodic variations,cell style=pgfPTR,varR color=teal,R color=purple]% +\\ [5pt]\pgfPTMmacrobox{pgfPT}[show periodic variations,cell style=pgfPTR,varR color=purple!50!white,R color=purple]% \\ [5pt]\makebox[\linewidth][c]{\scalebox{.6}{\pgfPT[show periodic variations,cell style=pgfPTR,varR color=purple!50!white, R color=purple]}}% \\ [5pt]\pgfPTendoption% % varR font diff --git a/graphics/pgf/contrib/pgf-periodictable/manualfiles/pgfPTmanual.macros.tex b/graphics/pgf/contrib/pgf-periodictable/manualfiles/pgfPTmanual.macros.tex index 70d6e325ca..0783999e80 100644 --- a/graphics/pgf/contrib/pgf-periodictable/manualfiles/pgfPTmanual.macros.tex +++ b/graphics/pgf/contrib/pgf-periodictable/manualfiles/pgfPTmanual.macros.tex @@ -1,12 +1,16 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Definitions for pgf-PeriodicTable Manual -% Hugo Gomes @ 04/03/2024 v2.1.0a +% Hugo Gomes @ 09/09/2024 v2.1.4 +% Hugo Gomes @ 07/08/2024 v2.1.3 +% Hugo Gomes @ 01/08/2024 v2.1.2 +% Hugo Gomes @ 07/07/2024 v2.1.1 +% Hugo Gomes @ 03/04/2024 v2.1.0a % Hugo Gomes @ 14/02/2024 v2.1.0 % Hugo Gomes @ 29/05/2023 v2.0.1 % Hugo Gomes @ 20/02/2023 v2.0.0 % Hugo Gomes @ 08/11/2022 v1.0.1 % Hugo Gomes @ 10/10/2022 v1.0.0 -\def\pgfPTversion{2.1.0a}% +\def\pgfPTversion{2.1.4}% \def\pgfPTnewinversion#1{new in v#1}% \def\pgfPTchangedinversion#1{changed in v#1}% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -21,31 +25,6 @@ \setcounter{secnumdepth}{1}% \setcounter{tocdepth}{4} % -\makeatletter% -\global\renewcommand\thesection{}% -\renewcommand\thesubsection{\@arabic\c@subsection}% -\renewcommand\section{\@startsection{section}{1}{\z@}% - {-3.5ex \@plus -1ex \@minus -.2ex}% - {2.3ex \@plus.2ex}% - {\hskip-1.4395em\normalfont\Large\bfseries}}% -\renewcommand*\l@section[2]{% - \ifnum \c@tocdepth >\z@% - \addpenalty\@secpenalty% - \addvspace{1.0em \@plus\p@}% - \setlength\@tempdima{0em}% - \begingroup% - \parindent \z@ \rightskip \@pnumwidth% - \parfillskip -\@pnumwidth% - \leavevmode \bfseries% - \advance\leftskip\@tempdima% - \hskip -\leftskip% - #1\nobreak\hfil \nobreak\hb@xt@\@pnumwidth{\hss #2}\par% - \endgroup% - \fi}% -\renewcommand*\l@subsection{\@dottedtocline{2}{1.5em}{1.5em}}% -\renewcommand*\l@subsubsection{\@dottedtocline{3}{3.0em}{2.4em}}% -\renewcommand*\l@paragraph{\@dottedtocline{4}{4.25em}{1.35em}}% -\makeatother% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \pgfdeclarelayer{back}% \pgfsetlayers{back,main}% diff --git a/graphics/pgf/contrib/pgf-periodictable/pgf-PeriodicTable.sty b/graphics/pgf/contrib/pgf-periodictable/pgf-PeriodicTable.sty index 3768fc4f24..41e135194f 100644 --- a/graphics/pgf/contrib/pgf-periodictable/pgf-PeriodicTable.sty +++ b/graphics/pgf/contrib/pgf-periodictable/pgf-PeriodicTable.sty @@ -1,4 +1,8 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Hugo Gomes @ 09/09/2024 v2.1.4 +% Hugo Gomes @ 07/08/2024 v2.1.3 +% Hugo Gomes @ 01/08/2024 v2.1.2 +% Hugo Gomes @ 07/07/2024 v2.1.1 % Hugo Gomes @ 03/04/2024 v2.1.0a % Hugo Gomes @ 14/02/2024 v2.1.0 % Hugo Gomes @ 29/05/2023 v2.0.1 @@ -7,7 +11,7 @@ % Hugo Gomes @ 10/10/2022 v1.0.0 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \NeedsTeXFormat{LaTeX2e}% -\ProvidesPackage{pgf-PeriodicTable}[03/04/2024 pgf-PeriodicTable v2.1.0a]%% +\ProvidesPackage{pgf-PeriodicTable}[08/09/2024 pgf-PeriodicTable v2.1.4]%% \RequirePackage{tikz}% \usetikzlibrary{fadings}% \tikzfading[name=aumentax, left color=transparent!80, right color=transparent!1]% @@ -16,11 +20,19 @@ \tikzfading[name=diminuiy, bottom color=transparent!80, top color=transparent!1]% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % check the engine and load font packages -\ifx\pdfliteral\undefined\relax% XeLaTeX or LuaLaTeX -\RequirePackage{fontspec}[2020/02/03]\edef\pgfPT@fontspec{1}% -\else% pdfLaTeX -\RequirePackage[T1]{fontenc}\edef\pgfPT@fontspec{0}% -\fi% +% changed in v2.1.3 +% pdfLaTeX -------------------------------------------------- +\ifx\pdftexversion\undefined\else% +\RequirePackage[T1]{fontenc}\edef\pgfPT@fontspec{0}\edef\pgfPT@engine{0}% +\fi% ----------------------------------------------------------- +% LuaLaTeX -------------------------------------------------- +\ifx\directlua\undefined\else% +\RequirePackage{fontspec}[2020/02/03]\edef\pgfPT@fontspec{1}\edef\pgfPT@engine{1}% +\fi% ----------------------------------------------------------- +% XeLaTeX --------------------------------------------------- +\ifx\XeTeXrevision\undefined\else% +\RequirePackage{fontspec}[2020/02/03]\edef\pgfPT@fontspec{1}\edef\pgfPT@engine{2}% +\fi% ----------------------------------------------------------- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % ifs to user language and list of user translations available \newif\ifpgfPT@user@lang\pgfPT@user@langfalse% @@ -190,10 +202,10 @@ font,IUPAC,capitalize element names=false,show title,show period numbers,show gr show legend,legend acronyms,legend back color,show legend pins,show extra legend,legend radio color,% legend CS color,legend Z color,show blocks=false,show families=false,show MNM line,show periodic variations=false,% show label LaAc,title font,title color,cell width,cell height,cell style,label font,period label color,group label color,% -label LaAc font,Z list,CS solid, CS liquid,CS gas,CS synt,CS font,CS render mode,CS outline color,CS outline width,% +label LaAc font,group numbers,Roman label color,Z list,CS solid, CS liquid,CS gas,CS synt,CS font,CS render mode,CS outline color,CS outline width,% Z backcolor,Z color,Z font,Z align,Z padding,Z use box width=false,name color,name font,name align,Ar color,Ar font,Ar label,Ar precision,% R color,R font,Rcov color,Rcov font,Rion color,Rion font,Ei color,Ei font,eneg color,eneg font,eaff color,eaff font,% -O color,O font,Tmelt color,Tmelt font,TmeltC color,TmeltC font,Tboil color,Tboil font,TboilC color,TboilC font,% +O color,O font,O Roman=false,Tmelt color,Tmelt font,TmeltC color,TmeltC font,Tboil color,Tboil font,TboilC color,TboilC font,% eDist color,eDist font,eDist sep,eConfign color,eConfign font,eConfignl color,eConfignl font,d color,d font,Cp color,Cp font,% kT color,kT font,ls color,ls font,ls align,ls,lsa color,lsa font,lsb color,lsb font,lsc color,lsc font,lsca color,lsca font,% DiscY color,DiscY font,DiscY BC scale,DiscC color,DiscC font,spectra color,spectra font,MNM line color,MNM line width,%DiscC, @@ -661,6 +673,16 @@ d unit,d precision,E precision,ls unit,ls precision,T precision,Cp precision,kT \fi% % O -> Oxidation States \ifpgfPT@O\relax% + \ifpgfPTORoman% new in v2.1.1 + \ifnum\Z=25\relax% Mn + \node[font=\pgfPTOfont,text=\pgfPTOcolor,text width=\pgfPT@data@O@wd,text centered]% + at ([xshift=\pgfPT@data@O@x,yshift=-\pgfPT@data@O@y]\Z) {\vbox to\pgfPT@data@O@ht{\vfil\pgfPT@box@zerodepth{\resizebox{.95\linewidth}{\height}{\pgfPT@data@ORoman}} + \vfil}};% + \else% + \node[font=\pgfPTOfont,text=\pgfPTOcolor,text width=\pgfPT@data@O@wd,text centered]% + at ([xshift=\pgfPT@data@O@x,yshift=-\pgfPT@data@O@y]\Z) {\vbox to\pgfPT@data@O@ht{\vfil\pgfPT@box@zerodepth{\pgfPT@data@ORoman}\vfil}};% + \fi% + \else% \ifnum\Z=25\relax% Mn \node[font=\pgfPTOfont,text=\pgfPTOcolor,text width=\pgfPT@data@O@wd,text centered]% at ([xshift=\pgfPT@data@O@x,yshift=-\pgfPT@data@O@y]\Z) {\vbox to\pgfPT@data@O@ht{\vfil\pgfPT@box@zerodepth{\resizebox{.95\linewidth}{\height}{\pgfPT@data@O}} @@ -669,6 +691,7 @@ d unit,d precision,E precision,ls unit,ls precision,T precision,Cp precision,kT \node[font=\pgfPTOfont,text=\pgfPTOcolor,text width=\pgfPT@data@O@wd,text centered]% at ([xshift=\pgfPT@data@O@x,yshift=-\pgfPT@data@O@y]\Z) {\vbox to\pgfPT@data@O@ht{\vfil\pgfPT@box@zerodepth{\pgfPT@data@O}\vfil}};% \fi% + \fi% \fi% % Tmelt -> Melting Point (Kelvin) \ifpgfPT@Tmelt\relax% @@ -1188,15 +1211,21 @@ d unit,d precision,E precision,ls unit,ls precision,T precision,Cp precision,kT % groups --> \ifpgfPTgrlabels% \global\pgfPTis@labeldrawnfalse% +\pgfPT@gr@numbers{\pgfPTgrnum}% new in v2.1.1 \ifpgfPTIUPACMMIX% \foreach \group in {1,2,4,5,...,18} {% \edef\pgfPT@@grlist{\csname pgfPT@cells@G\@Roman\group\endcsname}% \foreach \Zsearch in \pgfPT@@grlist{% \foreach \Z in \pgfPT@@cellslist {% \ifnum\Z=\Zsearch\global\pgfPTis@labeldrawntrue% - {\pgfPTlabfont\pgfPTnumberfont\ifpgfPT@zhnumbers@gr\let\pgfPT@printnum\zhnumber\else\let\pgfPT@printnum\relax\fi% - \node[above,font=\pgfPTlabfont,text=\pgfPTlabgrcolor] at% - ([xshift=\pgfPT@@xshift,yshift=\pgfPT@grlabel@yshift]\Z) {\pgfPT@printnum{\group}};}\breakforeach\fi% + {\pgfPTlabfont\pgfPTnumberfont\colorlet{pgfPT@grcolor}{\pgfPTlabgrcolor}\ifpgfPT@zhnumbers@gr\let\pgfPT@printnum\zhnumber\else% + \ifpgfPT@grRoman\let\pgfPT@printnum\pgfPT@gr@Roman\colorlet{pgfPT@grcolor}{\pgfPTRomanlabgrcolor}\else\let\pgfPT@printnum\relax\fi\fi% + \node[above,font=\pgfPTlabfont,text=pgfPT@grcolor] at% + ([xshift=\pgfPT@@xshift,yshift=\pgfPT@grlabel@yshift]\Z) {\pgfPT@printnum{\group}}; + \ifpgfPT@grarabic\colorlet{pgfPT@grcolor}{\pgfPTlabgrcolor}% + \node[above,font=\pgfPTlabfont,text=pgfPT@grcolor] at% + ([xshift=\pgfPT@@xshift,yshift=\pgfPT@grlabel@yshift+2ex]\Z) {\group};\fi}% + \breakforeach\fi% }% \ifpgfPTis@labeldrawn\global\pgfPTis@labeldrawnfalse\breakforeach\fi% }% @@ -1205,9 +1234,14 @@ d unit,d precision,E precision,ls unit,ls precision,T precision,Cp precision,kT \foreach \Zsearch in \pgfPT@cells@GIIILaAc{% \foreach \Z in \pgfPT@@cellslist {% \ifnum\Z=\Zsearch\global\pgfPTis@labeldrawntrue% - {\pgfPTlabfont\pgfPTnumberfont\ifpgfPT@zhnumbers@gr\let\pgfPT@printnum\zhnumber\else\let\pgfPT@printnum\relax\fi% - \node[above,font=\pgfPTlabfont,text=\pgfPTlabgrcolor] at% - ([xshift=\pgfPT@@xshift,yshift=\pgfPT@grlabel@yshift]\Z) {\pgfPT@printnum{3}};}\breakforeach\fi% + {\pgfPTlabfont\pgfPTnumberfont\colorlet{pgfPT@grcolor}{\pgfPTlabgrcolor}\ifpgfPT@zhnumbers@gr\let\pgfPT@printnum\zhnumber\else% + \ifpgfPT@grRoman\let\pgfPT@printnum\pgfPT@gr@Roman\colorlet{pgfPT@grcolor}{\pgfPTRomanlabgrcolor}\else\let\pgfPT@printnum\relax\fi\fi% + \node[above,font=\pgfPTlabfont,text=pgfPT@grcolor] at% + ([xshift=\pgfPT@@xshift,yshift=\pgfPT@grlabel@yshift]\Z) {\pgfPT@printnum{3}}; + \ifpgfPT@grarabic\colorlet{pgfPT@grcolor}{\pgfPTlabgrcolor}% + \node[above,font=\pgfPTlabfont,text=pgfPT@grcolor] at% + ([xshift=\pgfPT@@xshift,yshift=\pgfPT@grlabel@yshift+2ex]\Z) {3};\fi}% + \breakforeach\fi% }% \ifpgfPTis@labeldrawn\global\pgfPTis@labeldrawnfalse\breakforeach\fi% }% @@ -1217,9 +1251,14 @@ d unit,d precision,E precision,ls unit,ls precision,T precision,Cp precision,kT \foreach \Zsearch in \pgfPT@@grlist{% \foreach \Z in \pgfPT@@cellslist {% \ifnum\Z=\Zsearch\global\pgfPTis@labeldrawntrue% - {\pgfPTlabfont\pgfPTnumberfont\ifpgfPT@zhnumbers@gr\let\pgfPT@printnum\zhnumber\else\let\pgfPT@printnum\relax\fi% - \node[above,font=\pgfPTlabfont,text=\pgfPTlabgrcolor] at% - ([xshift=\pgfPT@@xshift,yshift=\pgfPT@grlabel@yshift]\Z) {\pgfPT@printnum{\group}};}\breakforeach\fi% + {\pgfPTlabfont\pgfPTnumberfont\colorlet{pgfPT@grcolor}{\pgfPTlabgrcolor}\ifpgfPT@zhnumbers@gr\let\pgfPT@printnum\zhnumber\else% + \ifpgfPT@grRoman\let\pgfPT@printnum\pgfPT@gr@Roman\colorlet{pgfPT@grcolor}{\pgfPTRomanlabgrcolor}\else\let\pgfPT@printnum\relax\fi\fi% + \node[above,font=\pgfPTlabfont,text=pgfPT@grcolor] at% + ([xshift=\pgfPT@@xshift,yshift=\pgfPT@grlabel@yshift]\Z) {\pgfPT@printnum{\group}};% + \ifpgfPT@grarabic\colorlet{pgfPT@grcolor}{\pgfPTlabgrcolor}% + \node[above,font=\pgfPTlabfont,text=pgfPT@grcolor] at% + ([xshift=\pgfPT@@xshift,yshift=\pgfPT@grlabel@yshift+2ex]\Z) {\group};\fi}% + \breakforeach\fi% }% \ifpgfPTis@labeldrawn\global\pgfPTis@labeldrawnfalse\breakforeach\fi% }% @@ -2408,7 +2447,7 @@ d unit,d precision,E precision,ls unit,ls precision,T precision,Cp precision,kT \tikz{% \node[text width=\pgfPT@boxwd,text centered,inner sep=0pt] (exFlag) at (0,0) {\includegraphics[height=\pgfPT@boxht]{flags/\pgfPT@country@flag.pdf}};% \global\pgfPT@countc=0% - \node[below right,text width=3.75*\pgfPTcellwd,inner xsep=0pt] at ([xshift=.025*\pgfPTcellwd]exFlag.north east) {% + \node[below right,text width=2.2*\pgfPTcellwd,inner xsep=0pt] at ([xshift=.025*\pgfPTcellwd]exFlag.north east) {% \@for\pgfPT@tmp:=\pgfPTlanguages\do{% \ifnum\pgfPT@countc=0\relax% \pgfPT@box@zerodepth{\csname pgfPT@country@name@\pgfPT@tmp\endcsname}% @@ -2979,7 +3018,9 @@ rectangle \fi% \pgfPT@element@count=118 \fi\fi% min=1 & max 118 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\@pgfPT@resetlayers% Restoring pgf layers to those used in the document +% corrected in v2.1.2: \@pgfPT@resetlayers -> \pgfsetlayers{\@pgfPT@resetlayers} +% ... Warning: Missing character: There is no m (U+006D) in font nullfont! ... +\pgfsetlayers{\@pgfPT@resetlayers}% Restoring pgf layers to those used in the document \fontseries{\seriesdefault}\fontshape{\shapedefault}\fontfamily{\familydefault}\selectfont% Restoring the font settings to normal mode in the document }% end tikz }% @@ -3054,15 +3095,14 @@ rectangle % renders text via pdfliteral: ------------- % #1 outline width width #2 txt #3 #4 #5 rgb stroke color #6 #7 #8 rgb fill color ----------- % #9 txt render mode (0 - fill 1 - stroke 2 - fill then stroke --------- -\ifx\pdfliteral\undefined\relax% -\ifx\pdfextension\undefined\relax% XeLaTeX -\def\pgfPT@lt[#1](#2)(#3,#4,#5)(#6,#7,#8)(#9){\special{pdf:literal direct #1 w #3 #4 #5 RG #6 #7 #8 rg #9 Tr}#2\special{pdf:literal direct 0 0 0 rg 1 w 0 Tr}}% -\else% LuaLaTeX -\protected\def\pdfliteral{\pdfextension literal} +% changed in v2.1.3 +\ifcase\pgfPT@engine\relax% pdfLaTeX \def\pgfPT@lt[#1](#2)(#3,#4,#5)(#6,#7,#8)(#9){\pdfliteral direct {#1 w #3 #4 #5 RG #6 #7 #8 rg #9 Tr}{#2}\pdfliteral direct {0 0 0 rg 1 w 0 Tr}}% -\fi% -\else% pdfLaTeX +\or% LuaLaTeX +\protected\def\pdfliteral{\pdfextension literal}% \def\pgfPT@lt[#1](#2)(#3,#4,#5)(#6,#7,#8)(#9){\pdfliteral direct {#1 w #3 #4 #5 RG #6 #7 #8 rg #9 Tr}{#2}\pdfliteral direct {0 0 0 rg 1 w 0 Tr}}% +\or% XeLaTeX +\def\pgfPT@lt[#1](#2)(#3,#4,#5)(#6,#7,#8)(#9){\special{pdf:literal direct #1 w #3 #4 #5 RG #6 #7 #8 rg #9 Tr}#2\special{pdf:literal direct 0 0 0 rg 1 w 0 Tr}}% \fi% % END !! \pgfPT@lt -------------------------------------------------------------------------------- % @@ -3073,9 +3113,10 @@ rectangle % auxiliary macros to set the rgb components of one color --------------------------------------- % with use of \extractcolorspecs from xcolor package --------------------------------------------- % each component is stored in \pgfPT@r, g or b & s or f ------------------------------------- -\def\pgfPT@extract@rgb@stroke#1{\extractcolorspecs{#1}{\pgfPTcolmodel}{\pgfPTcolinfo}\expandafter\pgfPT@set@rgb@stroke\pgfPTcolinfo\relax}% +% v3.1.3: added conversion of the color to rgb :: \colorlet{#1}[rgb]{#1} +\def\pgfPT@extract@rgb@stroke#1{\colorlet{#1}[rgb]{#1}\extractcolorspecs{#1}{\pgfPTcolmodel}{\pgfPTcolinfo}\expandafter\pgfPT@set@rgb@stroke\pgfPTcolinfo\relax}% \def\pgfPT@set@rgb@stroke#1,#2,#3\relax{\def\pgfPT@rs{#1}\def\pgfPT@gs{#2}\def\pgfPT@bs{#3}}% -\def\pgfPT@extract@rgb@fill#1{\extractcolorspecs{#1}{\pgfPTcolmodel}{\pgfPTcolinfo}\expandafter\pgfPT@set@rgb@fill\pgfPTcolinfo\relax}% +\def\pgfPT@extract@rgb@fill#1{\colorlet{#1}[rgb]{#1}\extractcolorspecs{#1}{\pgfPTcolmodel}{\pgfPTcolinfo}\expandafter\pgfPT@set@rgb@fill\pgfPTcolinfo\relax}% \def\pgfPT@set@rgb@fill#1,#2,#3\relax{\def\pgfPT@rf{#1}\def\pgfPT@gf{#2}\def\pgfPT@bf{#3}}% % END !! \pgfPT@color macros ------------------------------------------------------------------ % diff --git a/graphics/pgf/contrib/pgf-periodictable/pgf-PeriodicTableManual.pdf b/graphics/pgf/contrib/pgf-periodictable/pgf-PeriodicTableManual.pdf Binary files differindex 7c0b250d7c..9eff3db20b 100644 --- a/graphics/pgf/contrib/pgf-periodictable/pgf-PeriodicTableManual.pdf +++ b/graphics/pgf/contrib/pgf-periodictable/pgf-PeriodicTableManual.pdf diff --git a/graphics/pgf/contrib/pgf-periodictable/pgf-PeriodicTableManual.tex b/graphics/pgf/contrib/pgf-periodictable/pgf-PeriodicTableManual.tex index 659f09fd72..c2b22dd9ad 100644 --- a/graphics/pgf/contrib/pgf-periodictable/pgf-PeriodicTableManual.tex +++ b/graphics/pgf/contrib/pgf-periodictable/pgf-PeriodicTableManual.tex @@ -10,7 +10,7 @@ \date{\today} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \begin{document}% -\usefont{T1}{verdana}{m}{n}% +\usefont{T1}{vna}{m}{n} \begin{titlepage} \vspace{\stretch{1}}% \maketitle\thispagestyle{empty}% @@ -114,8 +114,8 @@ This option works with the \textrm{Xe\LaTeX} and \textrm{Lua\LaTeX} engines to t \\ [3pt]\pgfPTMline \subsection{Interaction with other packages} \subsubsection{fontspec} -To correctly set the font in each cell contents the command \bs{fontspec} must be used. For example if you want to use \textit{Arial} for the \red{name font}, it must be set using \red{font name=\bs{fontspec}\lb Arial\rb\bs{selectfont}}.\\ All other font selection commands, \eg, \bs{large}, \mbox{\bs{itshape}}, are used as usual. For example if you want to use \textit{Arial}\hfil\ in\hfil\ \textit{large}\hfil\ size\hfil\ and\hfil\ \textit{bold}\hfil\ weight\hfil\ for\hfil\ the \red{name font}, then you type -\\ \makebox[\linewidth][s]{\red{font name=\bs{large}\bs{bfseries}\bs{fontspec}\lb Arial\rb\bs{selectfont}}\hfil\ or\hfil\ \red{font name=\bs{fontspec}\lb Arial\rb}} +To correctly set the font in each cell contents the command \bs{fontspec} must be used. For example if you want to use \textit{Arial} for the \red{name font}, it must be set using \red{name font=\bs{fontspec}\lb Arial\rb\bs{selectfont}}.\\ All other font selection commands, \eg, \bs{large}, \mbox{\bs{itshape}}, are used as usual. For example if you want to use \textit{Arial}\hfil\ in\hfil\ \textit{large}\hfil\ size\hfil\ and\hfil\ \textit{bold}\hfil\ weight\hfil\ for\hfil\ the \red{name font}, then you type +\\ \makebox[\linewidth][s]{\red{name font=\bs{large}\bs{bfseries}\bs{fontspec}\lb Arial\rb\bs{selectfont}}\hfil\ or\hfil\ \red{name font=\bs{fontspec}\lb Arial\rb}} \\ \bs{large}\bs{bfseries}\bs{selectfont}. \subsubsection{ragged2e} Using \texttt{\large\textcolor{green!40!black}{\textbackslash usepackage}\textcolor{blue!70!black}{[}\textcolor{brown!60!black}{document}% @@ -203,6 +203,8 @@ The following options and styles are used for customizing the contents available \input{manualfiles/pgf-PeriodicTableManual_name.tex}% \label{file:Ar}% \input{manualfiles/pgf-PeriodicTableManual_Ar.tex}% +\label{file:O}% +\input{manualfiles/pgf-PeriodicTableManual_O.tex}% \label{file:density}% \input{manualfiles/pgf-PeriodicTableManual_density.tex}% \label{file:ls}% diff --git a/graphics/pgf/contrib/pgf-periodictable/pgfPT.backcolors.keys.tex b/graphics/pgf/contrib/pgf-periodictable/pgfPT.backcolors.keys.tex index 076f588ca0..b9e45c2b5e 100644 --- a/graphics/pgf/contrib/pgf-periodictable/pgfPT.backcolors.keys.tex +++ b/graphics/pgf/contrib/pgf-periodictable/pgfPT.backcolors.keys.tex @@ -6,24 +6,25 @@ % % defining PGF keys: the colors of the cells of the periodic table to be drawn ----------------- % list names available to use in key 'back color scheme', e.g. ---------------------------------- -% back color scheme=CPK or back color scheme=Wikipedia ------------------------------ +% v2.1.4 -> add prefix pgfPT to the built-in names +% back color scheme=pgfPTCPK or back color scheme=pgfPTWikipedia ------------------ % if back color scheme=solid the back color key is used to fill the cells ------------------- -\def\pgfPT@backColorsScheme@default{.769/.812/.961,.678/.733/.925,.871/.89/.875,.922/.886/.71,.8/.878/.859,.706/.871/.827,.612/.859/.796,.42/.89/.769,.671/.608/.749,.588/.655/.89,.871/.89/.875,.922/.886/.71,.8/.878/.859,.706/.871/.827,.612/.859/.796,.42/.89/.769,.671/.608/.749,.588/.655/.89,.871/.89/.875,.922/.886/.71,.62/.604/.522,.62/.604/.522,.62/.604/.522,.62/.604/.522,.62/.604/.522,.62/.604/.522,.62/.604/.522,.62/.604/.522,.62/.604/.522,.62/.604/.522,.8/.878/.859,.706/.871/.827,.612/.859/.796,.42/.89/.769,.671/.608/.749,.588/.655/.89,.871/.89/.875,.922/.886/.71,.62/.604/.522,.62/.604/.522,.62/.604/.522,.62/.604/.522,.62/.604/.522,.62/.604/.522,.62/.604/.522,.62/.604/.522,.62/.604/.522,.62/.604/.522,.8/.878/.859,.706/.871/.827,.612/.859/.796,.42/.89/.769,.671/.608/.749,.588/.655/.89,.871/.89/.875,.922/.886/.71,.631/.6/.435,.631/.6/.435,.631/.6/.435,.631/.6/.435,.631/.6/.435,.631/.6/.435,.631/.6/.435,.631/.6/.435,.631/.6/.435,.631/.6/.435,.631/.6/.435,.631/.6/.435,.631/.6/.435,.631/.6/.435,.631/.6/.435,.62/.604/.522,.62/.604/.522,.62/.604/.522,.62/.604/.522,.62/.604/.522,.62/.604/.522,.62/.604/.522,.62/.604/.522,.62/.604/.522,.8/.878/.859,.706/.871/.827,.612/.859/.796,.42/.89/.769,.671/.608/.749,.588/.655/.89,.871/.89/.875,.922/.886/.71,.522/.49/.329,.522/.49/.329,.522/.49/.329,.522/.49/.329,.522/.49/.329,.522/.49/.329,.522/.49/.329,.522/.49/.329,.522/.49/.329,.522/.49/.329,.522/.49/.329,.522/.49/.329,.522/.49/.329,.522/.49/.329,.522/.49/.329,.62/.604/.522,.62/.604/.522,.62/.604/.522,.62/.604/.522,.62/.604/.522,.62/.604/.522,.78/.788/.741,.78/.788/.741,.78/.788/.741,.78/.788/.741,.78/.788/.741,.78/.788/.741,.78/.788/.741,.78/.788/.741,.78/.788/.741}% -\def\pgfPT@backColorsScheme@Soft{.843/.839/.659,.843/.839/.659,.945/.941/.918,.945/.941/.918,.843/.839/.659,.843/.839/.659,.843/.839/.659,.843/.839/.659,.843/.839/.659,.843/.839/.659,.945/.941/.918,.945/.941/.918,.945/.941/.918,.973/.945/.78,.843/.839/.659,.843/.839/.659,.843/.839/.659,.843/.839/.659,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.973/.945/.78,.843/.839/.659,.843/.839/.659,.843/.839/.659,.843/.839/.659,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.843/.839/.659,.843/.839/.659,.843/.839/.659,.945/.941/.918,.945/.941/.918,.827/.824/1,.827/.824/1,.827/.824/1,.827/.824/1,.827/.824/1,.827/.824/1,.827/.824/1,.827/.824/1,.827/.824/1,.827/.824/1,.827/.824/1,.827/.824/1,.827/.824/1,.827/.824/1,.827/.824/1,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.843/.839/.659,.843/.839/.659,.945/.941/.918,.945/.941/.918,.71/.706/1,.71/.706/1,.71/.706/1,.71/.706/1,.71/.706/1,.71/.706/1,.71/.706/1,.71/.706/1,.71/.706/1,.71/.706/1,.71/.706/1,.71/.706/1,.71/.706/1,.71/.706/1,.71/.706/1,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918}% -\def\pgfPT@backColorsScheme@Jmol{1/1/1,.851/1/1,.8/.502/1,.761/1/0,1/.71/.71,.565/.565/.565,.188/.314/.973,1/.051/.051,.565/.878/.314,.702/.89/.961,.671/.361/.949,.541/1/0,.749/.651/.651,.941/.784/.627,1/.502/0,1/1/.188,.122/.941/.122,.502/.82/.89,.561/.251/.831,.239/1/0,.902/.902/.902,.749/.761/.78,.651/.651/.671,.541/.6/.78,.612/.478/.78,.878/.4/.2,.941/.565/.627,.314/.816/.314,.784/.502/.2,.49/.502/.69,.761/.561/.561,.4/.561/.561,.741/.502/.89,1/.631/0,.651/.161/.161,.361/.722/.82,.439/.18/.69,0/1/0,.58/1/1,.58/.878/.878,.451/.761/.788,.329/.71/.71,.231/.62/.62,.141/.561/.561,.039/.49/.549,0/.412/.522,.753/.753/.753,1/.851/.561,.651/.459/.451,.4/.502/.502,.62/.388/.71,.831/.478/0,.58/0/.58,.259/.62/.69,.341/.09/.561,0/.788/0,.439/.831/1,1/1/.78,.851/1/.78,.78/1/.78,.639/1/.78,.561/1/.78,.38/1/.78,.271/1/.78,.188/1/.78,.122/1/.78,0/1/.612,0/.902/.459,0/.831/.322,0/.749/.22,0/.671/.141,.302/.761/1,.302/.651/1,.129/.58/.839,.149/.49/.671,.149/.4/.588,.09/.329/.529,.816/.816/.878,1/.82/.137,.722/.722/.816,.651/.329/.302,.341/.349/.38,.62/.31/.71,.671/.361/0,.459/.31/.271,.259/.51/.588,.259/0/.4,0/.49/0,.439/.671/.98,0/.729/1,0/.631/1,0/.561/1,0/.502/1,0/.42/1,.329/.361/.949,.471/.361/.89,.541/.31/.89,.631/.212/.831,.702/.122/.831,.702/.122/.729,.702/.051/.651,.741/.051/.529,.78/0/.4,.8/0/.349,.82/0/.31,.851/0/.271,.878/0/.22,.902/0/.18,.922/0/.149,1/1/1,1/1/1,1/1/1,1/1/1,1/1/1,1/1/1,1/1/1,1/1/1,1/1/1}% -\def\pgfPT@backColorsScheme@CPK{1/1/1,0/1/1,.467/0/1,0/.467/0,1/.667/.467,.133/.133/.133,.133/.2/1,1/.133/0,.122/.941/.122,0/1/1,.467/0/1,0/.467/0,.867/.467/1,.867/.467/1,1/.6/0,1/.898/.133,.122/.941/.122,0/1/1,.467/0/1,0/.467/0,1/.667/.467,.6/.6/.6,1/.667/.467,1/.667/.467,1/.667/.467,.867/.467/0,1/.667/.467,1/.667/.467,1/.667/.467,1/.667/.467,.867/.467/1,.867/.467/1,.867/.467/1,.867/.467/1,.6/.133/0,0/1/1,.467/0/1,0/.467/0,1/.667/.467,1/.667/.467,1/.667/.467,1/.667/.467,1/.667/.467,1/.667/.467,1/.667/.467,1/.667/.467,1/.667/.467,1/.667/.467,.867/.467/1,.867/.467/1,.867/.467/1,.867/.467/1,.4/0/.733,0/1/1,.467/0/1,0/.467/0,1/.667/.467,.867/.467/1,.867/.467/1,.867/.467/1,.867/.467/1,.867/.467/1,.867/.467/1,.867/.467/1,.867/.467/1,.867/.467/1,.867/.467/1,.867/.467/1,.867/.467/1,.867/.467/1,.867/.467/1,1/.667/.467,1/.667/.467,1/.667/.467,1/.667/.467,1/.667/.467,1/.667/.467,1/.667/.467,1/.667/.467,1/.667/.467,.867/.467/1,.867/.467/1,.867/.467/1,.867/.467/1,.867/.467/1,.867/.467/1,.467/0/1,0/.467/0,1/.667/.467,.867/.467/1,.867/.467/1,.867/.467/1,.867/.467/1,.867/.467/1,.867/.467/1,.867/.467/1,.867/.467/1,.867/.467/1,.867/.467/1,.867/.467/1,.867/.467/1,.867/.467/1,.867/.467/1,1/.667/.467,1/.667/.467,1/.667/.467,1/.667/.467,1/.667/.467,1/.667/.467,1/1/1,1/1/1,1/1/1,1/1/1,1/1/1,1/1/1,1/1/1,1/1/1,1/1/1}% -\def\pgfPT@backColorsScheme@Rasmol{1/1/1,1/.753/.796,.698/.133/.133,1/.078/.576,0/1/0,.784/.784/.784,.561/.561/1,.941/0/0,.855/.647/.125,1/.078/.576,0/0/1,.133/.545/.133,.502/.502/.565,.855/.647/.125,1/.647/0,1/.784/.196,0/1/0,1/.078/.576,1/.078/.576,.502/.502/.565,1/.078/.576,.502/.502/.565,1/.078/.576,.502/.502/.565,.502/.502/.565,1/.647/0,1/.078/.576,.647/.165/.165,.647/.165/.165,.647/.165/.165,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,.647/.165/.165,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,.502/.502/.565,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,.627/.125/.941,1/.078/.576,1/.078/.576,1/.647/0,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,.855/.647/.125,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/1/1,1/1/1,1/1/1,1/1/1,1/1/1,1/1/1,1/1/1,1/1/1,1/1/1}% -\def\pgfPT@backColorsScheme@RasmolNew{1/1/1,1/.753/.796,.698/.129/.129,1/.078/.58,0/1/.004,.827/.827/.827,.529/.808/.902,1/0/0,.855/.647/.129,1/.078/.58,0/0/1,.133/.545/.137,.412/.412/.412,.855/.647/.129,1/.667/0,1/1/0,0/1/.004,1/.078/.576,1/.078/.576,.412/.412/.412,1/.078/.58,.412/.412/.412,1/.078/.58,.412/.412/.412,.412/.412/.412,1/.667/0,1/.078/.58,.502/.157/.157,.502/.157/.157,.502/.157/.157,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,.502/.157/.157,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,.412/.412/.412,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,.627/.125/.945,1/.078/.576,1/.078/.576,1/.667/0,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,.855/.647/.129,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576}% -\def\pgfPT@backColorsScheme@Wikipedia{.941/1/.561,.753/1/1,1/.4/.4,1/.871/.678,.8/.8/.6,.941/1/.561,.941/1/.561,.941/1/.561,.941/1/.561,.753/1/1,1/.4/.4,1/.871/.678,.8/.8/.8,.8/.8/.6,.941/1/.561,.941/1/.561,.941/1/.561,.753/1/1,1/.4/.4,1/.871/.678,1/.753/.753,1/.753/.753,1/.753/.753,1/.753/.753,1/.753/.753,1/.753/.753,1/.753/.753,1/.753/.753,1/.753/.753,1/.753/.753,.8/.8/.8,.8/.8/.6,.8/.8/.6,.941/1/.561,.941/1/.561,.753/1/1,1/.4/.4,1/.871/.678,1/.753/.753,1/.753/.753,1/.753/.753,1/.753/.753,1/.753/.753,1/.753/.753,1/.753/.753,1/.753/.753,1/.753/.753,1/.753/.753,.8/.8/.8,.8/.8/.8,.8/.8/.6,.8/.8/.6,.941/1/.561,.753/1/1,1/.4/.4,1/.871/.678,1/.749/1,1/.749/1,1/.749/1,1/.749/1,1/.749/1,1/.749/1,1/.749/1,1/.749/1,1/.749/1,1/.749/1,1/.749/1,1/.749/1,1/.749/1,1/.749/1,1/.749/1,1/.753/.753,1/.753/.753,1/.753/.753,1/.753/.753,1/.753/.753,1/.753/.753,1/.753/.753,1/.753/.753,1/.753/.753,.8/.8/.8,.8/.8/.8,.8/.8/.8,.8/.8/.8,.8/.8/.8,.753/1/1,1/.4/.4,1/.871/.678,1/.6/.8,1/.6/.8,1/.6/.8,1/.6/.8,1/.6/.8,1/.6/.8,1/.6/.8,1/.6/.8,1/.6/.8,1/.6/.8,1/.6/.8,1/.6/.8,1/.6/.8,1/.6/.8,1/.6/.8,1/.753/.753,1/.753/.753,1/.753/.753,1/.753/.753,1/.753/.753,.91/.91/.91,.91/.91/.91,.91/.91/.91,.91/.91/.91,.91/.91/.91,.91/.91/.91,.91/.91/.91,.91/.91/.91,.91/.91/.91,.91/.91/.91}% -\def\pgfPT@backColorsScheme@MNM{.91/.839/.659,.91/.839/.659,.886/.886/.847,.886/.886/.847,.878/.816/.753,.91/.839/.659,.91/.839/.659,.91/.839/.659,.91/.839/.659,.91/.839/.659,.886/.886/.847,.886/.886/.847,.886/.886/.847,.878/.816/.753,.91/.839/.659,.91/.839/.659,.91/.839/.659,.91/.839/.659,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.878/.816/.753,.878/.816/.753,.91/.839/.659,.91/.839/.659,.91/.839/.659,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.878/.816/.753,.878/.816/.753,.91/.839/.659,.91/.839/.659,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.91/.839/.659,.91/.839/.659,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847}% -\def\pgfPT@backColorsScheme@PS{.553/.706/.89,.553/.706/.89,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,.553/.706/.89,.553/.706/.89,.553/.706/.89,.553/.706/.89,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,.553/.706/.89,.553/.706/.89,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,.714/.867/.91,.553/.706/.89,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,.647/.647/.647,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,.553/.706/.89,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,.647/.647/.647,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,.714/.867/.91,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,.553/.706/.89,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,.647/.647/.647,.647/.647/.647,.647/.647/.647,.647/.647/.647,.647/.647/.647,.647/.647/.647,.647/.647/.647,.647/.647/.647,.647/.647/.647,.647/.647/.647,.647/.647/.647,.647/.647/.647,.647/.647/.647,.647/.647/.647,.647/.647/.647,.647/.647/.647,.647/.647/.647,.647/.647/.647,.647/.647/.647,.647/.647/.647,.647/.647/.647,.647/.647/.647,.647/.647/.647,.647/.647/.647,.647/.647/.647,.647/.647/.647}% -\def\pgfPT@backColorsScheme@Radio{.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.957/.933/0,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.957/.933/0,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.957/.933/0,.957/.933/0,.957/.933/0,.957/.933/0,.957/.933/0,.957/.933/0,.957/.933/0,.957/.933/0,.957/.933/0,.957/.933/0,.957/.933/0,.957/.933/0,.957/.933/0,.957/.933/0,.957/.933/0,.957/.933/0,.957/.933/0,.957/.933/0,.957/.933/0,.957/.933/0,.957/.933/0,.957/.933/0,.957/.933/0,.957/.933/0,.957/.933/0,.957/.933/0,.957/.933/0,.957/.933/0,.957/.933/0,.957/.933/0,.957/.933/0,.957/.933/0,.957/.933/0,.957/.933/0,.957/.933/0}% -\def\pgfPT@backColorsScheme@Blocks{1/.937/.671,1/.937/.671,1/.937/.671,1/.937/.671,.718/.871/.635,.718/.871/.635,.718/.871/.635,.718/.871/.635,.718/.871/.635,.718/.871/.635,1/.937/.671,1/.937/.671,.718/.871/.635,.718/.871/.635,.718/.871/.635,.718/.871/.635,.718/.871/.635,.718/.871/.635,1/.937/.671,1/.937/.671,.98/.667/.541,.98/.667/.541,.98/.667/.541,.98/.667/.541,.98/.667/.541,.98/.667/.541,.98/.667/.541,.98/.667/.541,.98/.667/.541,.98/.667/.541,.718/.871/.635,.718/.871/.635,.718/.871/.635,.718/.871/.635,.718/.871/.635,.718/.871/.635,1/.937/.671,1/.937/.671,.98/.667/.541,.98/.667/.541,.98/.667/.541,.98/.667/.541,.98/.667/.541,.98/.667/.541,.98/.667/.541,.98/.667/.541,.98/.667/.541,.98/.667/.541,.718/.871/.635,.718/.871/.635,.718/.871/.635,.718/.871/.635,.718/.871/.635,.718/.871/.635,1/.937/.671,1/.937/.671,.98/.667/.541,.757/.835/.914,.757/.835/.914,.757/.835/.914,.757/.835/.914,.757/.835/.914,.757/.835/.914,.757/.835/.914,.757/.835/.914,.757/.835/.914,.757/.835/.914,.757/.835/.914,.757/.835/.914,.757/.835/.914,.757/.835/.914,.98/.667/.541,.98/.667/.541,.98/.667/.541,.98/.667/.541,.98/.667/.541,.98/.667/.541,.98/.667/.541,.98/.667/.541,.98/.667/.541,.718/.871/.635,.718/.871/.635,.718/.871/.635,.718/.871/.635,.718/.871/.635,.718/.871/.635,1/.937/.671,1/.937/.671,.98/.667/.541,.757/.835/.914,.757/.835/.914,.757/.835/.914,.757/.835/.914,.757/.835/.914,.757/.835/.914,.757/.835/.914,.757/.835/.914,.757/.835/.914,.757/.835/.914,.757/.835/.914,.757/.835/.914,.757/.835/.914,.757/.835/.914,.98/.667/.541,.98/.667/.541,.98/.667/.541,.98/.667/.541,.98/.667/.541,.98/.667/.541,.98/.667/.541,.98/.667/.541,.98/.667/.541,.718/.871/.635,.718/.871/.635,.718/.871/.635,.718/.871/.635,.718/.871/.635,.718/.871/.635}% +\def\pgfPT@backColorsScheme@pgfPTdefault{.769/.812/.961,.678/.733/.925,.871/.89/.875,.922/.886/.71,.8/.878/.859,.706/.871/.827,.612/.859/.796,.42/.89/.769,.671/.608/.749,.588/.655/.89,.871/.89/.875,.922/.886/.71,.8/.878/.859,.706/.871/.827,.612/.859/.796,.42/.89/.769,.671/.608/.749,.588/.655/.89,.871/.89/.875,.922/.886/.71,.62/.604/.522,.62/.604/.522,.62/.604/.522,.62/.604/.522,.62/.604/.522,.62/.604/.522,.62/.604/.522,.62/.604/.522,.62/.604/.522,.62/.604/.522,.8/.878/.859,.706/.871/.827,.612/.859/.796,.42/.89/.769,.671/.608/.749,.588/.655/.89,.871/.89/.875,.922/.886/.71,.62/.604/.522,.62/.604/.522,.62/.604/.522,.62/.604/.522,.62/.604/.522,.62/.604/.522,.62/.604/.522,.62/.604/.522,.62/.604/.522,.62/.604/.522,.8/.878/.859,.706/.871/.827,.612/.859/.796,.42/.89/.769,.671/.608/.749,.588/.655/.89,.871/.89/.875,.922/.886/.71,.631/.6/.435,.631/.6/.435,.631/.6/.435,.631/.6/.435,.631/.6/.435,.631/.6/.435,.631/.6/.435,.631/.6/.435,.631/.6/.435,.631/.6/.435,.631/.6/.435,.631/.6/.435,.631/.6/.435,.631/.6/.435,.631/.6/.435,.62/.604/.522,.62/.604/.522,.62/.604/.522,.62/.604/.522,.62/.604/.522,.62/.604/.522,.62/.604/.522,.62/.604/.522,.62/.604/.522,.8/.878/.859,.706/.871/.827,.612/.859/.796,.42/.89/.769,.671/.608/.749,.588/.655/.89,.871/.89/.875,.922/.886/.71,.522/.49/.329,.522/.49/.329,.522/.49/.329,.522/.49/.329,.522/.49/.329,.522/.49/.329,.522/.49/.329,.522/.49/.329,.522/.49/.329,.522/.49/.329,.522/.49/.329,.522/.49/.329,.522/.49/.329,.522/.49/.329,.522/.49/.329,.62/.604/.522,.62/.604/.522,.62/.604/.522,.62/.604/.522,.62/.604/.522,.62/.604/.522,.78/.788/.741,.78/.788/.741,.78/.788/.741,.78/.788/.741,.78/.788/.741,.78/.788/.741,.78/.788/.741,.78/.788/.741,.78/.788/.741}% +\def\pgfPT@backColorsScheme@pgfPTSoft{.843/.839/.659,.843/.839/.659,.945/.941/.918,.945/.941/.918,.843/.839/.659,.843/.839/.659,.843/.839/.659,.843/.839/.659,.843/.839/.659,.843/.839/.659,.945/.941/.918,.945/.941/.918,.945/.941/.918,.973/.945/.78,.843/.839/.659,.843/.839/.659,.843/.839/.659,.843/.839/.659,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.973/.945/.78,.843/.839/.659,.843/.839/.659,.843/.839/.659,.843/.839/.659,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.843/.839/.659,.843/.839/.659,.843/.839/.659,.945/.941/.918,.945/.941/.918,.827/.824/1,.827/.824/1,.827/.824/1,.827/.824/1,.827/.824/1,.827/.824/1,.827/.824/1,.827/.824/1,.827/.824/1,.827/.824/1,.827/.824/1,.827/.824/1,.827/.824/1,.827/.824/1,.827/.824/1,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.843/.839/.659,.843/.839/.659,.945/.941/.918,.945/.941/.918,.71/.706/1,.71/.706/1,.71/.706/1,.71/.706/1,.71/.706/1,.71/.706/1,.71/.706/1,.71/.706/1,.71/.706/1,.71/.706/1,.71/.706/1,.71/.706/1,.71/.706/1,.71/.706/1,.71/.706/1,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918,.945/.941/.918}% +\def\pgfPT@backColorsScheme@pgfPTJmol{1/1/1,.851/1/1,.8/.502/1,.761/1/0,1/.71/.71,.565/.565/.565,.188/.314/.973,1/.051/.051,.565/.878/.314,.702/.89/.961,.671/.361/.949,.541/1/0,.749/.651/.651,.941/.784/.627,1/.502/0,1/1/.188,.122/.941/.122,.502/.82/.89,.561/.251/.831,.239/1/0,.902/.902/.902,.749/.761/.78,.651/.651/.671,.541/.6/.78,.612/.478/.78,.878/.4/.2,.941/.565/.627,.314/.816/.314,.784/.502/.2,.49/.502/.69,.761/.561/.561,.4/.561/.561,.741/.502/.89,1/.631/0,.651/.161/.161,.361/.722/.82,.439/.18/.69,0/1/0,.58/1/1,.58/.878/.878,.451/.761/.788,.329/.71/.71,.231/.62/.62,.141/.561/.561,.039/.49/.549,0/.412/.522,.753/.753/.753,1/.851/.561,.651/.459/.451,.4/.502/.502,.62/.388/.71,.831/.478/0,.58/0/.58,.259/.62/.69,.341/.09/.561,0/.788/0,.439/.831/1,1/1/.78,.851/1/.78,.78/1/.78,.639/1/.78,.561/1/.78,.38/1/.78,.271/1/.78,.188/1/.78,.122/1/.78,0/1/.612,0/.902/.459,0/.831/.322,0/.749/.22,0/.671/.141,.302/.761/1,.302/.651/1,.129/.58/.839,.149/.49/.671,.149/.4/.588,.09/.329/.529,.816/.816/.878,1/.82/.137,.722/.722/.816,.651/.329/.302,.341/.349/.38,.62/.31/.71,.671/.361/0,.459/.31/.271,.259/.51/.588,.259/0/.4,0/.49/0,.439/.671/.98,0/.729/1,0/.631/1,0/.561/1,0/.502/1,0/.42/1,.329/.361/.949,.471/.361/.89,.541/.31/.89,.631/.212/.831,.702/.122/.831,.702/.122/.729,.702/.051/.651,.741/.051/.529,.78/0/.4,.8/0/.349,.82/0/.31,.851/0/.271,.878/0/.22,.902/0/.18,.922/0/.149,1/1/1,1/1/1,1/1/1,1/1/1,1/1/1,1/1/1,1/1/1,1/1/1,1/1/1}% +\def\pgfPT@backColorsScheme@pgfPTCPK{1/1/1,0/1/1,.467/0/1,0/.467/0,1/.667/.467,.133/.133/.133,.133/.2/1,1/.133/0,.122/.941/.122,0/1/1,.467/0/1,0/.467/0,.867/.467/1,.867/.467/1,1/.6/0,1/.898/.133,.122/.941/.122,0/1/1,.467/0/1,0/.467/0,1/.667/.467,.6/.6/.6,1/.667/.467,1/.667/.467,1/.667/.467,.867/.467/0,1/.667/.467,1/.667/.467,1/.667/.467,1/.667/.467,.867/.467/1,.867/.467/1,.867/.467/1,.867/.467/1,.6/.133/0,0/1/1,.467/0/1,0/.467/0,1/.667/.467,1/.667/.467,1/.667/.467,1/.667/.467,1/.667/.467,1/.667/.467,1/.667/.467,1/.667/.467,1/.667/.467,1/.667/.467,.867/.467/1,.867/.467/1,.867/.467/1,.867/.467/1,.4/0/.733,0/1/1,.467/0/1,0/.467/0,1/.667/.467,.867/.467/1,.867/.467/1,.867/.467/1,.867/.467/1,.867/.467/1,.867/.467/1,.867/.467/1,.867/.467/1,.867/.467/1,.867/.467/1,.867/.467/1,.867/.467/1,.867/.467/1,.867/.467/1,1/.667/.467,1/.667/.467,1/.667/.467,1/.667/.467,1/.667/.467,1/.667/.467,1/.667/.467,1/.667/.467,1/.667/.467,.867/.467/1,.867/.467/1,.867/.467/1,.867/.467/1,.867/.467/1,.867/.467/1,.467/0/1,0/.467/0,1/.667/.467,.867/.467/1,.867/.467/1,.867/.467/1,.867/.467/1,.867/.467/1,.867/.467/1,.867/.467/1,.867/.467/1,.867/.467/1,.867/.467/1,.867/.467/1,.867/.467/1,.867/.467/1,.867/.467/1,1/.667/.467,1/.667/.467,1/.667/.467,1/.667/.467,1/.667/.467,1/.667/.467,1/1/1,1/1/1,1/1/1,1/1/1,1/1/1,1/1/1,1/1/1,1/1/1,1/1/1}% +\def\pgfPT@backColorsScheme@pgfPTRasmol{1/1/1,1/.753/.796,.698/.133/.133,1/.078/.576,0/1/0,.784/.784/.784,.561/.561/1,.941/0/0,.855/.647/.125,1/.078/.576,0/0/1,.133/.545/.133,.502/.502/.565,.855/.647/.125,1/.647/0,1/.784/.196,0/1/0,1/.078/.576,1/.078/.576,.502/.502/.565,1/.078/.576,.502/.502/.565,1/.078/.576,.502/.502/.565,.502/.502/.565,1/.647/0,1/.078/.576,.647/.165/.165,.647/.165/.165,.647/.165/.165,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,.647/.165/.165,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,.502/.502/.565,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,.627/.125/.941,1/.078/.576,1/.078/.576,1/.647/0,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,.855/.647/.125,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/1/1,1/1/1,1/1/1,1/1/1,1/1/1,1/1/1,1/1/1,1/1/1,1/1/1}% +\def\pgfPT@backColorsScheme@pgfPTRasmolNew{1/1/1,1/.753/.796,.698/.129/.129,1/.078/.58,0/1/.004,.827/.827/.827,.529/.808/.902,1/0/0,.855/.647/.129,1/.078/.58,0/0/1,.133/.545/.137,.412/.412/.412,.855/.647/.129,1/.667/0,1/1/0,0/1/.004,1/.078/.576,1/.078/.576,.412/.412/.412,1/.078/.58,.412/.412/.412,1/.078/.58,.412/.412/.412,.412/.412/.412,1/.667/0,1/.078/.58,.502/.157/.157,.502/.157/.157,.502/.157/.157,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,.502/.157/.157,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,.412/.412/.412,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,.627/.125/.945,1/.078/.576,1/.078/.576,1/.667/0,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,.855/.647/.129,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576,1/.078/.576}% +\def\pgfPT@backColorsScheme@pgfPTWikipedia{.941/1/.561,.753/1/1,1/.4/.4,1/.871/.678,.8/.8/.6,.941/1/.561,.941/1/.561,.941/1/.561,.941/1/.561,.753/1/1,1/.4/.4,1/.871/.678,.8/.8/.8,.8/.8/.6,.941/1/.561,.941/1/.561,.941/1/.561,.753/1/1,1/.4/.4,1/.871/.678,1/.753/.753,1/.753/.753,1/.753/.753,1/.753/.753,1/.753/.753,1/.753/.753,1/.753/.753,1/.753/.753,1/.753/.753,1/.753/.753,.8/.8/.8,.8/.8/.6,.8/.8/.6,.941/1/.561,.941/1/.561,.753/1/1,1/.4/.4,1/.871/.678,1/.753/.753,1/.753/.753,1/.753/.753,1/.753/.753,1/.753/.753,1/.753/.753,1/.753/.753,1/.753/.753,1/.753/.753,1/.753/.753,.8/.8/.8,.8/.8/.8,.8/.8/.6,.8/.8/.6,.941/1/.561,.753/1/1,1/.4/.4,1/.871/.678,1/.749/1,1/.749/1,1/.749/1,1/.749/1,1/.749/1,1/.749/1,1/.749/1,1/.749/1,1/.749/1,1/.749/1,1/.749/1,1/.749/1,1/.749/1,1/.749/1,1/.749/1,1/.753/.753,1/.753/.753,1/.753/.753,1/.753/.753,1/.753/.753,1/.753/.753,1/.753/.753,1/.753/.753,1/.753/.753,.8/.8/.8,.8/.8/.8,.8/.8/.8,.8/.8/.8,.8/.8/.8,.753/1/1,1/.4/.4,1/.871/.678,1/.6/.8,1/.6/.8,1/.6/.8,1/.6/.8,1/.6/.8,1/.6/.8,1/.6/.8,1/.6/.8,1/.6/.8,1/.6/.8,1/.6/.8,1/.6/.8,1/.6/.8,1/.6/.8,1/.6/.8,1/.753/.753,1/.753/.753,1/.753/.753,1/.753/.753,1/.753/.753,.91/.91/.91,.91/.91/.91,.91/.91/.91,.91/.91/.91,.91/.91/.91,.91/.91/.91,.91/.91/.91,.91/.91/.91,.91/.91/.91,.91/.91/.91}% +\def\pgfPT@backColorsScheme@pgfPTMNM{.91/.839/.659,.91/.839/.659,.886/.886/.847,.886/.886/.847,.878/.816/.753,.91/.839/.659,.91/.839/.659,.91/.839/.659,.91/.839/.659,.91/.839/.659,.886/.886/.847,.886/.886/.847,.886/.886/.847,.878/.816/.753,.91/.839/.659,.91/.839/.659,.91/.839/.659,.91/.839/.659,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.878/.816/.753,.878/.816/.753,.91/.839/.659,.91/.839/.659,.91/.839/.659,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.878/.816/.753,.878/.816/.753,.91/.839/.659,.91/.839/.659,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.91/.839/.659,.91/.839/.659,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847,.886/.886/.847}% +\def\pgfPT@backColorsScheme@pgfPTPS{.553/.706/.89,.553/.706/.89,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,.553/.706/.89,.553/.706/.89,.553/.706/.89,.553/.706/.89,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,.553/.706/.89,.553/.706/.89,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,.714/.867/.91,.553/.706/.89,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,.647/.647/.647,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,.553/.706/.89,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,.647/.647/.647,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,.714/.867/.91,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,.553/.706/.89,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,1/.878/.718,.647/.647/.647,.647/.647/.647,.647/.647/.647,.647/.647/.647,.647/.647/.647,.647/.647/.647,.647/.647/.647,.647/.647/.647,.647/.647/.647,.647/.647/.647,.647/.647/.647,.647/.647/.647,.647/.647/.647,.647/.647/.647,.647/.647/.647,.647/.647/.647,.647/.647/.647,.647/.647/.647,.647/.647/.647,.647/.647/.647,.647/.647/.647,.647/.647/.647,.647/.647/.647,.647/.647/.647,.647/.647/.647,.647/.647/.647}% +\def\pgfPT@backColorsScheme@pgfPTRadio{.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.957/.933/0,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.957/.933/0,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.761/.839/.604,.957/.933/0,.957/.933/0,.957/.933/0,.957/.933/0,.957/.933/0,.957/.933/0,.957/.933/0,.957/.933/0,.957/.933/0,.957/.933/0,.957/.933/0,.957/.933/0,.957/.933/0,.957/.933/0,.957/.933/0,.957/.933/0,.957/.933/0,.957/.933/0,.957/.933/0,.957/.933/0,.957/.933/0,.957/.933/0,.957/.933/0,.957/.933/0,.957/.933/0,.957/.933/0,.957/.933/0,.957/.933/0,.957/.933/0,.957/.933/0,.957/.933/0,.957/.933/0,.957/.933/0,.957/.933/0,.957/.933/0}% +\def\pgfPT@backColorsScheme@pgfPTBlocks{1/.937/.671,1/.937/.671,1/.937/.671,1/.937/.671,.718/.871/.635,.718/.871/.635,.718/.871/.635,.718/.871/.635,.718/.871/.635,.718/.871/.635,1/.937/.671,1/.937/.671,.718/.871/.635,.718/.871/.635,.718/.871/.635,.718/.871/.635,.718/.871/.635,.718/.871/.635,1/.937/.671,1/.937/.671,.98/.667/.541,.98/.667/.541,.98/.667/.541,.98/.667/.541,.98/.667/.541,.98/.667/.541,.98/.667/.541,.98/.667/.541,.98/.667/.541,.98/.667/.541,.718/.871/.635,.718/.871/.635,.718/.871/.635,.718/.871/.635,.718/.871/.635,.718/.871/.635,1/.937/.671,1/.937/.671,.98/.667/.541,.98/.667/.541,.98/.667/.541,.98/.667/.541,.98/.667/.541,.98/.667/.541,.98/.667/.541,.98/.667/.541,.98/.667/.541,.98/.667/.541,.718/.871/.635,.718/.871/.635,.718/.871/.635,.718/.871/.635,.718/.871/.635,.718/.871/.635,1/.937/.671,1/.937/.671,.98/.667/.541,.757/.835/.914,.757/.835/.914,.757/.835/.914,.757/.835/.914,.757/.835/.914,.757/.835/.914,.757/.835/.914,.757/.835/.914,.757/.835/.914,.757/.835/.914,.757/.835/.914,.757/.835/.914,.757/.835/.914,.757/.835/.914,.98/.667/.541,.98/.667/.541,.98/.667/.541,.98/.667/.541,.98/.667/.541,.98/.667/.541,.98/.667/.541,.98/.667/.541,.98/.667/.541,.718/.871/.635,.718/.871/.635,.718/.871/.635,.718/.871/.635,.718/.871/.635,.718/.871/.635,1/.937/.671,1/.937/.671,.98/.667/.541,.757/.835/.914,.757/.835/.914,.757/.835/.914,.757/.835/.914,.757/.835/.914,.757/.835/.914,.757/.835/.914,.757/.835/.914,.757/.835/.914,.757/.835/.914,.757/.835/.914,.757/.835/.914,.757/.835/.914,.757/.835/.914,.98/.667/.541,.98/.667/.541,.98/.667/.541,.98/.667/.541,.98/.667/.541,.98/.667/.541,.98/.667/.541,.98/.667/.541,.98/.667/.541,.718/.871/.635,.718/.871/.635,.718/.871/.635,.718/.871/.635,.718/.871/.635,.718/.871/.635}% % user defined color schemes(s): ----------------------------------------------------------------- % \pgfPTnewcolorscheme[<trailing color (default=1/1/1 e.g. white)>]{name}{list} ----- \def\pgfPTnewColorScheme{\@ifnextchar[\pgfPT@newColorScheme@withoptions{\pgfPT@newColorScheme@noptions}}% \def\pgfPT@newColorScheme@withoptions[#1/#2/#3]#4#5{% -\expandafter\def\csname pgfPT@backColorsScheme@#4\endcsname{#5,#1/#2/#3}% +\expandafter\gdef\csname pgfPT@backColorsScheme@#4\endcsname{#5,#1/#2/#3}% \definecolor{cpgfPTTMP}{rgb}{#1,#2,#3}% \xglobal\colorlet{cpgfPTTMP}{cpgfPTTMP}% }% @@ -36,20 +37,20 @@ \pgfkeys{/pgfPerTable/.cd,% back color scheme/.get=\pgfPTbcs,% back color scheme/.store in=\pgfPTbcs,% -back color scheme/.default=default,% +back color scheme/.default=pgfPTdefault,% back color/.get=\pgfPTbcsolid,% back color/.store in=\pgfPTbcsolid,% back color/.default=white,% -csSoft/.style={back color scheme=Soft},% -csJmol/.style={back color scheme=Jmol},% -csCPK/.style={back color scheme=CPK},% -csRasmol/.style={back color scheme=Rasmol},% -csRasmolNew/.style={back color scheme=RasmolNew},% -csWikipedia/.style={back color scheme=Wikipedia},% -csMNM/.style={back color scheme=MNM},% -csPS/.style={back color scheme=PS},% -csRadio/.style={back color scheme=Radio},% -csBlocks/.style={back color scheme=Blocks},% +csSoft/.style={back color scheme=pgfPTSoft},% +csJmol/.style={back color scheme=pgfPTJmol},% +csCPK/.style={back color scheme=pgfPTCPK},% +csRasmol/.style={back color scheme=pgfPTRasmol},% +csRasmolNew/.style={back color scheme=pgfPTRasmolNew},% +csWikipedia/.style={back color scheme=pgfPTWikipedia},% +csMNM/.style={back color scheme=pgfPTMNM},% +csPS/.style={back color scheme=pgfPTPS},% +csRadio/.style={back color scheme=pgfPTRadio},% +csBlocks/.style={back color scheme=pgfPTBlocks},% csSolid/.style={back color scheme=solid,back color=#1}% }% STYLES -> csSoft,csJmol,csCPK,csRasmol,csRasmolNew,csWikipedia,csMNM,csPS,csRadio,csBlocks,csSolid % setting keys with default values --------------------------------------------------------------- @@ -59,7 +60,7 @@ csSolid/.style={back color scheme=solid,back color=#1}% \def\pgfPTcolorSchemeInfo{% \global\pgfPT@dima=0pt\relax% \foreach \Z in {1,...,118}{\path (-\pgfPTcellwd,-10pt*\Z) rectangle node[midway,font=\tiny\bfseries] {Z=\Z} ++(\pgfPTcellwd,-10pt);}% -\foreach \cs in {default,Soft,Jmol,CPK,Rasmol,RasmolNew,Wikipedia,MNM,PS,Radio,Blocks}{% +\foreach \cs in {pgfPTdefault,pgfPTSoft,pgfPTJmol,pgfPTCPK,pgfPTRasmol,pgfPTRasmolNew,pgfPTWikipedia,pgfPTMNM,pgfPTPS,pgfPTRadio,pgfPTBlocks}{% \node[below right,text width=\pgfPTcellwd,text centered,font=\tiny,inner xsep=0pt] at (\pgfPT@dima,0pt) {\cs};% \path (\pgfPTcellwd+\pgfPT@dima,0pt) rectangle node[midway,font=\tiny\bfseries] {(r,g,b)} ++(2*\pgfPTcellwd,-10pt);% \edef\pgfPT@@colorlist{\csname pgfPT@backColorsScheme@\cs\endcsname}% diff --git a/graphics/pgf/contrib/pgf-periodictable/pgfPT.buildcell.tex b/graphics/pgf/contrib/pgf-periodictable/pgfPT.buildcell.tex index a9a3699c36..7684834830 100644 --- a/graphics/pgf/contrib/pgf-periodictable/pgfPT.buildcell.tex +++ b/graphics/pgf/contrib/pgf-periodictable/pgfPT.buildcell.tex @@ -38,7 +38,9 @@ \newif\ifpgfPT@dot\pgfPT@dotfalse% \newif\ifpgfPT@unnamedcell\pgfPT@unnamedcelltrue% \newdimen\pgfPT@cell@collumnwd\pgfPT@cell@collumnwd=0pt% +\newdimen\pgfPT@cell@collumnwd@unnamedcell\pgfPT@cell@collumnwd@unnamedcell=0pt% \newdimen\pgfPT@cell@lineht\pgfPT@cell@lineht=0pt% +\newdimen\pgfPT@cell@lineht@unnamedcell\pgfPT@cell@lineht@unnamedcell=0pt% \newdimen\pgfPT@tmpx\pgfPT@tmpx=0pt% \newdimen\pgfPT@tmpy\pgfPT@tmpy=0pt% \newdimen\pgfPT@tmpwd\pgfPT@tmpwd=0pt% @@ -47,10 +49,10 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \def\pgfPTbuildcellstyle#1(#2,#3)[#4]{\pgfPT@unnamedcellfalse\relax% \pgfPTbuildcell(#2,#3)[#4]% -\expandafter\edef\csname pgfPT@cellcontents@#1\endcsname{\pgfPT@cellcontents}% -\expandafter\edef\csname ppfPT@thebuildcellcom@#1\endcsname{\textbackslash pgfPTbuildcell(\detokenize{#2},\detokenize{#3})\%\par[\detokenize{#4}]}% -\expandafter\edef\csname pgfPT@nlinhas@#1\endcsname{#2}% -\expandafter\edef\csname pgfPT@ncolunas@#1\endcsname{#3}% +\expandafter\xdef\csname pgfPT@cellcontents@#1\endcsname{\pgfPT@cellcontents}% +\expandafter\xdef\csname ppfPT@thebuildcellcom@#1\endcsname{\textbackslash pgfPTbuildcell(\detokenize{#2},\detokenize{#3})\%\par[\detokenize{#4}]}% +\expandafter\xdef\csname pgfPT@nlinhas@#1\endcsname{#2}% +\expandafter\xdef\csname pgfPT@ncolunas@#1\endcsname{#3}% \pgfPT@unnamedcelltrue\relax% }% \def\pgfPT@builtincellstyle#1(#2,#3)[#4]{\pgfPT@unnamedcellfalse\relax% @@ -66,7 +68,8 @@ % \pgfPTbuildcell(<lines>,<columns>)[<entries>] % \def\pgfPTbuildcell(#1,#2)[#3]{% -\ifpgfPT@unnamedcell\gdef\ppfPT@thebuildcellcom{\textbackslash pgfPTbuildcell(\detokenize{#1},\detokenize{#2})\%\par[\detokenize{#3}]}\fi% +\ifpgfPT@unnamedcell\gdef\pgfPT@numlinhas@unnamedcell{#1}\gdef\pgfPT@numcolunas@unnamedcell{#2}% +\gdef\ppfPT@thebuildcellcom{\textbackslash pgfPTbuildcell(\detokenize{#1},\detokenize{#2})\%\par[\detokenize{#3}]}\fi% \gdef\pgfPT@numlinhas{#1}\gdef\pgfPT@numcolunas{#2}% \pgfPT@cellcontentssize=0% \xdef\pgfPT@cellcontents{}% vanishes list contents @@ -74,6 +77,10 @@ \pgfmathsetlength{\pgfPT@cell@lineht}{\pgfPTcellht/#1}% \global\pgfPT@cell@lineht=\pgfPT@cell@lineht% \global\pgfPT@cell@collumnwd=\pgfPT@cell@collumnwd% +\ifpgfPT@unnamedcell% +\global\pgfPT@cell@lineht@unnamedcell=\pgfPT@cell@lineht% +\global\pgfPT@cell@collumnwd@unnamedcell=\pgfPT@cell@collumnwd% +\fi% \expandafter\pgfPTg@bblespaces#3\relax% \@for\@tmp:=\pgfPT@listn@spaces\do{\expandafter\pgfPT@buildcellcontents\@tmp\relax}% \ifpgfPT@unnamedcell\global\let\pgfPT@cellcontents@unnamed\pgfPT@cellcontents\relax\fi% @@ -186,7 +193,7 @@ \@for\pgfPT@tmp:=\pgfPT@builtincells@names\do{\edef\pgfPT@tempb{\pgfPT@tmp}\ifx\pgfPT@tempa\pgfPT@tempb\relax\def\pgfPT@builtin{1}\fi}% \ifnum\pgfPT@builtin=1\relax\textit{Built-in style}\else\textit{User style}\fi\ \textbf{#2}\relax% \if\pgfPT@preview@cellcontents\@empty\relax% -\textit{ doesn't exist!}% +\textit{ doesn't exist!} (\pgfPT@preview@cellcontents)% \else% \edef\pgfPT@numlinhas{\csname pgfPT@nlinhas@#2\endcsname}% \edef\pgfPT@numcolunas{\csname pgfPT@ncolunas@#2\endcsname}% @@ -204,6 +211,8 @@ \\ [2pt]The build command:\\ \textcolor{green!70!black}{\footnotesize\ppfPT@thebuildcellcom}\\ % \else\textbf{Using the last cell built}% \edef\pgfPT@preview@cellcontents{\csname pgfPT@cellcontents@unnamed\endcsname}% +\let\pgfPT@numlinhas\pgfPT@numlinhas@unnamedcell\let\pgfPT@numcolunas\pgfPT@numcolunas@unnamedcell% +\let\pgfPT@cell@lineht\pgfPT@cell@lineht@unnamedcell\let\pgfPT@cell@collumnwd\pgfPT@cell@collumnwd@unnamedcell% \\ [2pt]The build command:\\ \textcolor{green!70!black}{\footnotesize\ppfPT@thebuildcellcom}\\ % \fi\fi% \makebox[\linewidth][c]{% @@ -354,7 +363,7 @@ at (-.5*\pgfPT@cell@collumnwd+\pgfPT@cell@collumnwd*\coluna,\pgfPT@cell@lineht) % wd -> \pgfPT@<what>@wd % ht -> \pgfPT@<what>@ht % and turning the if<what> to true -% what -> \@pgfPT@<what>rtue +% what -> \@pgfPT@<what>true \ifdim\pgfPTcellwd=34pt\relax% \xdef\pgfPT@loadcell@scaleX{1}% \else% diff --git a/graphics/pgf/contrib/pgf-periodictable/pgfPT.data.tex b/graphics/pgf/contrib/pgf-periodictable/pgfPT.data.tex index 62d62e0f89..0a87ee38dd 100644 --- a/graphics/pgf/contrib/pgf-periodictable/pgfPT.data.tex +++ b/graphics/pgf/contrib/pgf-periodictable/pgfPT.data.tex @@ -142,122 +142,122 @@ }% % ############################ THE DATA ############################# % -\def\pgfPT@data@i{H/CS,1.008/Ar,[1.0078\noexpand\pgfPT@virgula1.0082]/Arstar,0/radio,53/R,32/Rcov,139.9\noexpand\pgfPT@espaco(1-)/Rion,1312/Ei,2.2/eneg,72.77/eaff,\noexpand\pgfPT@pm1/O,13.99/Tmelt,-259.16/TmeltC,20.271/Tboil,-252.879/TboilC,1/eDist,::1s+1/eConfign,::1s+1/eConfignl,0.08988/d,28.836/Cp,0.1805/kT,hex/ls,470/lsa,470/lsb,340/lsc,0.72/lsca,1766/DiscY,21/DiscC,1/spectra,gasoso/cor}% -\def\pgfPT@data@ii{He/CS,4.0026/Ar,4.0026/Arstar,0/radio,31/R,46/Rcov,---/Rion,2372.3/Ei,---/eneg,0/eaff,---/O,---/Tmelt,---/TmeltC,4.222/Tboil,-268.928/TboilC,2/eDist,::1s+2/eConfign,::1s+2/eConfignl,0.1786/d,20.786/Cp,0.1513/kT,fcc/ls,424.4/lsa,/lsb,/lsc,/lsca,1895/DiscY,19/DiscC,1/spectra,gasoso/cor}% -\def\pgfPT@data@iii{Li/CS,6.94/Ar,[6.938\noexpand\pgfPT@virgula6.997] /Arstar,0/radio,167/R,133/Rcov,76\noexpand\pgfPT@espaco(1+)/Rion,520.2/Ei,0.98/eneg,59.63/eaff,+1/O,453.65/Tmelt,180.5/TmeltC,1603/Tboil,1330/TboilC,2\noexpand\pgfPTeDistsep1/eDist,[He]::2s+1/eConfign,[He]::2s+1/eConfignl,534/d,24.86/Cp,84.8/kT,bcc/ls,350.93/lsa,/lsb,/lsc,/lsca,1817/DiscY,18/DiscC,1/spectra,solido/cor}% -\def\pgfPT@data@iv{Be/CS,9.0122/Ar,9.0122/Arstar,0/radio,112/R,10/Rcov,45\noexpand\pgfPT@espaco(2+)/Rion,899.5/Ei,1.57/eneg,0/eaff,+2/O,1560/Tmelt,1287/TmeltC,2742/Tboil,2469/TboilC,2\noexpand\pgfPTeDistsep2/eDist,[He]::2s+2/eConfign,[He]::2s+2/eConfignl,1850/d,16.443/Cp,200/kT,hcp/ls,228.56/lsa,/lsb,358.32/lsc,1.57/lsca,1798/DiscY,5/DiscC,1/spectra,solido/cor}% -\def\pgfPT@data@v{B/CS,10.81/Ar,[10.806\noexpand\pgfPT@virgula10.821] /Arstar,0/radio,87/R,85/Rcov,27\noexpand\pgfPT@espaco(3+)/Rion,800.6/Ei,2.04/eneg,26.99/eaff,+3/O,2349/Tmelt,2076/TmeltC,4200/Tboil,3927/TboilC,2\noexpand\pgfPTeDistsep3/eDist,[He]::2s+2\noexpand\pgfPT@virgula2p+1/eConfign,[He]::2s+2\noexpand\pgfPT@virgula2p+1/eConfignl,2340/d,11.087/Cp,27.4/kT,rho/ls,505.66/lsa,/lsb,/lsc,/lsca,1808/DiscY,7/DiscC,1/spectra,solido/cor}% -\def\pgfPT@data@vi{C/CS,12.011/Ar,[12.009\noexpand\pgfPT@virgula12.012]/Arstar,0/radio,67/R,75/Rcov,16\noexpand\pgfPT@espaco(4+)/Rion,1086.5/Ei,2.55/eneg,121.78/eaff,0\noexpand\pgfPT@virgula\noexpand\pgfPT@pm1\noexpand\pgfPT@virgula\noexpand\pgfPT@pm2\noexpand\pgfPT@virgula\noexpand\pgfPT@pm3\noexpand\pgfPT@virgula\noexpand\pgfPT@pm4/O,3823/Tmelt,3550/TmeltC,4300/Tboil,4027/TboilC,2\noexpand\pgfPTeDistsep4/eDist,[He]::2s+2\noexpand\pgfPT@virgula2p+2/eConfign,[He]::2s+2\noexpand\pgfPT@virgula2p+2/eConfignl,2267/d,8.517/Cp,140/kT,hex/ls,246.12/lsa,/lsb,670.79/lsc,2.73/lsca,3750\noexpand\pgfPT@scaletxt{\pgfPTDiscYBCscale}{\noexpand\pgfPT@espaco\noexpand\pgfPT@BClabel}/DiscY,12/DiscC,1/spectra,solido/cor}% -\def\pgfPT@data@vii{N/CS,14.007/Ar,[14.006\noexpand\pgfPT@virgula14.008]/Arstar,0/radio,56/R,71/Rcov,146\noexpand\pgfPT@espaco(3-)\noexpand\pgfPT@virgula16\noexpand\pgfPT@espaco(3+)\noexpand\pgfPT@virgula13\noexpand\pgfPT@espaco(5+)/Rion,1402.3/Ei,3.04/eneg,0/eaff,\noexpand\pgfPT@pm3\noexpand\pgfPT@virgula+4\noexpand\pgfPT@virgula+5/O,63.15/Tmelt,-210/TmeltC,77.355/Tboil,-195.795/TboilC,2\noexpand\pgfPTeDistsep5/eDist,[He]::2s+2\noexpand\pgfPT@virgula2p+3/eConfign,[He]::2s+2\noexpand\pgfPT@virgula2p+3/eConfignl,1.251/d,29.124/Cp,0.02583/kT,hex/ls,386.1/lsa,386.1/lsb,626.5/lsc,1.62/lsca,1772/DiscY,21/DiscC,1/spectra,gasoso/cor}% -\def\pgfPT@data@viii{O/CS,15.999/Ar,[15.999\noexpand\pgfPT@virgula16.000]/Arstar,0/radio,48/R,63/Rcov,140\noexpand\pgfPT@espaco(2-)/Rion,1313.9/Ei,3.44/eneg,140.98/eaff,--2/O,54.36/Tmelt,-218.79/TmeltC,90.188/Tboil,-182.962/TboilC,2\noexpand\pgfPTeDistsep6/eDist,[He]::2s+2\noexpand\pgfPT@virgula2p+4/eConfign,[He]::2s+2\noexpand\pgfPT@virgula2p+4/eConfignl,1.429/d,29.378/Cp,0.02658/kT,mono/ls,540.3/lsa,342.9/lsb,508.6/lsc,0.94/lsca,1771/DiscY,19/DiscC,1/spectra,gasoso/cor}% -\def\pgfPT@data@ix{F/CS,18.998/Ar,18.998/Arstar,0/radio,42/R,64/Rcov,133\noexpand\pgfPT@espaco(1-)/Rion,1681/Ei,3.98/eneg,328.16/eaff,--1/O,53.48/Tmelt,-219.67/TmeltC,85.04/Tboil,-188.11/TboilC,2\noexpand\pgfPTeDistsep7/eDist,[He]::2s+2\noexpand\pgfPT@virgula2p+5/eConfign,[He]::2s+2\noexpand\pgfPT@virgula2p+5/eConfignl,1.7/d,31.304/Cp,0.0277/kT,mono/ls,550/lsa,328/lsb,728/lsc,1.32/lsca,1886/DiscY,5/DiscC,1/spectra,gasoso/cor}% -\def\pgfPT@data@x{Ne/CS,20.18/Ar,20.18/Arstar,0/radio,38/R,67/Rcov,---/Rion,2080.7/Ei,---/eneg,0/eaff,---/O,24.56/Tmelt,-248.59/TmeltC,27.104/Tboil,-246.046/TboilC,2\noexpand\pgfPTeDistsep8/eDist,[He]::2s+2\noexpand\pgfPT@virgula2p+6/eConfign,[He]::2s+2\noexpand\pgfPT@virgula2p+6/eConfignl,0.9002/d,20.786/Cp,0.0491/kT,fcc/ls,442.9/lsa,/lsb,/lsc,/lsca,1898/DiscY,21/DiscC,1/spectra,gasoso/cor}% -\def\pgfPT@data@xi{Na/CS,22.99/Ar,22.99/Arstar,0/radio,190/R,155/Rcov,102\noexpand\pgfPT@espaco(1+)/Rion,495.8/Ei,0.93/eneg,52.87/eaff,+1/O,370.944/Tmelt,97.794/TmeltC,1156.09/Tboil,882.94/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep1/eDist,[Ne]::3s+1/eConfign,[Ne]::3s+1/eConfignl,968/d,28.23/Cp,142/kT,bcc/ls,429.06/lsa,/lsb,/lsc,/lsca,1807/DiscY,21/DiscC,1/spectra,solido/cor}% -\def\pgfPT@data@xii{Mg/CS,24.305/Ar,[24.304\noexpand\pgfPT@virgula24.307] /Arstar,0/radio,145/R,139/Rcov,72\noexpand\pgfPT@espaco(2+)/Rion,737.7/Ei,1.31/eneg,0/eaff,+2/O,923/Tmelt,650/TmeltC,1363/Tboil,1090/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep2/eDist,[Ne]::3s+2/eConfign,[Ne]::3s+2/eConfignl,1738/d,24.869/Cp,156/kT,hcp/ls,320.94/lsa,/lsb,521.05/lsc,1.62/lsca,1755/DiscY,21/DiscC,1/spectra,solido/cor}% -\def\pgfPT@data@xiii{Al/CS,26.982/Ar,26.982/Arstar,0/radio,118/R,126/Rcov,53.5\noexpand\pgfPT@espaco(3+)/Rion,577.5/Ei,1.61/eneg,41.76/eaff,+3/O,933.47/Tmelt,660.32/TmeltC,2743/Tboil,2470/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep3/eDist,[Ne]::3s+2\noexpand\pgfPT@virgula3p+1/eConfign,[Ne]::3s+2\noexpand\pgfPT@virgula3p+1/eConfignl,2700/d,24.2/Cp,237/kT,fcc/ls,404.95/lsa,/lsb,/lsc,/lsca,1824/DiscY,2/DiscC,1/spectra,solido/cor}% -\def\pgfPT@data@xiv{Si/CS,28.085/Ar,[28.084\noexpand\pgfPT@virgula28.086]/Arstar,0/radio,111/R,116/Rcov,40\noexpand\pgfPT@espaco(4+)/Rion,786.5/Ei,1.9/eneg,134.07/eaff,\noexpand\pgfPT@pm4/O,1687/Tmelt,1414/TmeltC,3538/Tboil,3265/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep4/eDist,[Ne]::3s+2\noexpand\pgfPT@virgula3p+2/eConfign,[Ne]::3s+2\noexpand\pgfPT@virgula3p+2/eConfignl,2330/d,19.789/Cp,149/kT,dia/ls,543.095/lsa,/lsb,/lsc,/lsca,1823/DiscY,18/DiscC,1/spectra,solido/cor}% -\def\pgfPT@data@xv{P/CS,30.974/Ar,30.974/Arstar,0/radio,98/R,111/Rcov,212\noexpand\pgfPT@espaco(3-)\noexpand\pgfPT@virgula44\noexpand\pgfPT@espaco(3+)\noexpand\pgfPT@virgula38\noexpand\pgfPT@espaco(5+)/Rion,1011.8/Ei,2.19/eneg,72.04/eaff,\noexpand\pgfPT@pm3\noexpand\pgfPT@virgula+5/O,317.3/Tmelt,44.15/TmeltC,550/Tboil,277/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep5/eDist,[Ne]::3s+2\noexpand\pgfPT@virgula3p+3/eConfign,[Ne]::3s+2\noexpand\pgfPT@virgula3p+3/eConfignl,1823/d,23.824/Cp,0.236/kT,tric/ls,1145/lsa,550.3/lsb,1126.1/lsc,0.98/lsca,1669/DiscY,8/DiscC,1/spectra,solido/cor}% -\def\pgfPT@data@xvi{S/CS,32.06/Ar,[32.059\noexpand\pgfPT@virgula32.076]/Arstar,0/radio,88/R,103/Rcov,184\noexpand\pgfPT@espaco(2-)\noexpand\pgfPT@virgula37\noexpand\pgfPT@espaco(4+)\noexpand\pgfPT@virgula29\noexpand\pgfPT@espaco(6+)/Rion,999.6/Ei,2.58/eneg,200.41/eaff,\noexpand\pgfPT@pm2\noexpand\pgfPT@virgula+4\noexpand\pgfPT@virgula+6/O,388.36/Tmelt,115.21/TmeltC,717.8/Tboil,444.6/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep6/eDist,[Ne]::3s+2\noexpand\pgfPT@virgula3p+4/eConfign,[Ne]::3s+2\noexpand\pgfPT@virgula3p+4/eConfignl,1960/d,22.75/Cp,0.205/kT,fcort/ls,1046.5/lsa,1286.6/lsb,2448.6/lsc,2.34/lsca,500\noexpand\pgfPT@scaletxt{\pgfPTDiscYBCscale}{\noexpand\pgfPT@espaco\noexpand\pgfPT@BClabel}/DiscY,12/DiscC,1/spectra,solido/cor}% -\def\pgfPT@data@xvii{Cl/CS,35.45/Ar,[35.446\noexpand\pgfPT@virgula35.457]/Arstar,0/radio,79/R,99/Rcov,181\noexpand\pgfPT@espaco(1-)\noexpand\pgfPT@virgula12\noexpand\pgfPT@espaco(5+)\noexpand\pgfPT@virgula27\noexpand\pgfPT@espaco(7+)/Rion,1251.2/Ei,3.16/eneg,348.58/eaff,\noexpand\pgfPT@pm1\noexpand\pgfPT@virgula+3\noexpand\pgfPT@virgula+5\noexpand\pgfPT@virgula+7/O,171.6/Tmelt,-101.5/TmeltC,239.11/Tboil,-34.04/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep7/eDist,[Ne]::3s+2\noexpand\pgfPT@virgula3p+5/eConfign,[Ne]::3s+2\noexpand\pgfPT@virgula3p+5/eConfignl,3.2/d,33.949/Cp,0.0089/kT,bcort/ls,622.35/lsa,445.61/lsb,817.85/lsc,1.31/lsca,1774/DiscY,18/DiscC,1/spectra,gasoso/cor}% -\def\pgfPT@data@xviii{Ar/CS,39.95/Ar,[39.792\noexpand\pgfPT@virgula39.963]/Arstar,0/radio,71/R,96/Rcov,---/Rion,1520.6/Ei,---/eneg,0/eaff,0/O,83.81/Tmelt,-189.34/TmeltC,87.302/Tboil,-185.848/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep8/eDist,[Ne]::3s+2\noexpand\pgfPT@virgula3p+6/eConfign,[Ne]::3s+2\noexpand\pgfPT@virgula3p+6/eConfignl,1.784/d,20.786/Cp,0.01772/kT,fcc/ls,525.6/lsa,/lsb,/lsc,/lsca,1894/DiscY,21/DiscC,1/spectra,gasoso/cor}% -\def\pgfPT@data@xix{K/CS,39.098/Ar,39.098/Arstar,0/radio,243/R,196/Rcov,138\noexpand\pgfPT@espaco(1+)/Rion,418.8/Ei,0.82/eneg,48.38/eaff,+1/O,336.7/Tmelt,63.5/TmeltC,1032/Tboil,759/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep1/eDist,[Ar]::4s+1/eConfign,[Ar]::4s+1/eConfignl,890/d,29.6/Cp,102.5/kT,bcc/ls,532.8/lsa,/lsb,/lsc,/lsca,1807/DiscY,21/DiscC,1/spectra,solido/cor}% -\def\pgfPT@data@xx{Ca/CS,40.078/Ar,40.078(4) /Arstar,0/radio,194/R,171/Rcov,100\noexpand\pgfPT@espaco(2+)/Rion,589.8/Ei,1/eneg,2.37/eaff,+2/O,1115/Tmelt,842/TmeltC,1757/Tboil,1484/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep2/eDist,[Ar]::4s+2/eConfign,[Ar]::4s+2/eConfignl,1550/d,25.929/Cp,201/kT,fcc/ls,558.84/lsa,/lsb,/lsc,/lsca,1808/DiscY,21/DiscC,1/spectra,solido/cor}% -\def\pgfPT@data@xxi{Sc/CS,44.956/Ar,44.956/Arstar,0/radio,184/R,148/Rcov,74.5\noexpand\pgfPT@espaco(3+)/Rion,633.1/Ei,1.36/eneg,18/eaff,+3/O,1814/Tmelt,1541/TmeltC,3109/Tboil,2836/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep9\noexpand\pgfPTeDistsep2/eDist,[Ar]::3d+1\noexpand\pgfPT@virgula4s+2/eConfign,[Ar]::4s+2\noexpand\pgfPT@virgula3d+1/eConfignl,2985/d,25.52/Cp,15.8/kT,hcp/ls,330.9/lsa,/lsb,527.33/lsc,1.59/lsca,1879/DiscY,18/DiscC,1/spectra,solido/cor}% -\def\pgfPT@data@xxii{Ti/CS,47.867/Ar,47.867/Arstar,0/radio,176/R,136/Rcov,86\noexpand\pgfPT@espaco(2+)\noexpand\pgfPT@virgula67\noexpand\pgfPT@espaco(3+)\noexpand\pgfPT@virgula60.5\noexpand\pgfPT@espaco(4+)/Rion,658.8/Ei,1.54/eneg,7.29/eaff,+2\noexpand\pgfPT@virgula+3\noexpand\pgfPT@virgula+4/O,1941/Tmelt,1668/TmeltC,3560/Tboil,3287/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep10\noexpand\pgfPTeDistsep2/eDist,[Ar]::3d+2\noexpand\pgfPT@virgula4s+2/eConfign,[Ar]::4s+2\noexpand\pgfPT@virgula3d+2/eConfignl,4506/d,25.06/Cp,21.9/kT,hcp/ls,295.03/lsa,/lsb,468.31/lsc,1.59/lsca,1791/DiscY,21/DiscC,1/spectra,solido/cor}% -\def\pgfPT@data@xxiii{V/CS,50.942/Ar,50.942/Arstar,0/radio,171/R,134/Rcov,79\noexpand\pgfPT@espaco(2+)\noexpand\pgfPT@virgula64\noexpand\pgfPT@espaco(3+)\noexpand\pgfPT@virgula58\noexpand\pgfPT@espaco(4+)\noexpand\pgfPT@virgula54\noexpand\pgfPT@espaco(5+)/Rion,650.9/Ei,1.63/eneg,50.91/eaff,+2\noexpand\pgfPT@virgula+3\noexpand\pgfPT@virgula+4\noexpand\pgfPT@virgula+5/O,2183/Tmelt,1910/TmeltC,3680/Tboil,3407/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep11\noexpand\pgfPTeDistsep2/eDist,[Ar]::3d+3\noexpand\pgfPT@virgula4s+2/eConfign,[Ar]::4s+2\noexpand\pgfPT@virgula3d+3/eConfignl,6110/d,24.89/Cp,30.7/kT,bcc/ls,302.31/lsa,/lsb,/lsc,/lsca,1830/DiscY,23/DiscC,1/spectra,solido/cor}% -\def\pgfPT@data@xxiv{Cr/CS,51.996/Ar,51.996/Arstar,0/radio,166/R,122/Rcov,73\noexpand\pgfPT@espaco(2+)\noexpand\pgfPT@virgula61.5\noexpand\pgfPT@espaco(3+)\noexpand\pgfPT@virgula44\noexpand\pgfPT@espaco(6+)/Rion,652.9/Ei,1.66/eneg,65.21/eaff,+2\noexpand\pgfPT@virgula+3\noexpand\pgfPT@virgula+6/O,2180/Tmelt,1907/TmeltC,2755/Tboil,2482/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep13\noexpand\pgfPTeDistsep1/eDist,[Ar]::3d+5\noexpand\pgfPT@virgula4s+1/eConfign,[Ar]::4s+1\noexpand\pgfPT@virgula3d+5/eConfignl,7150/d,23.35/Cp,93.9/kT,bcc/ls,288.46/lsa,/lsb,/lsc,/lsca,1797/DiscY,5/DiscC,1/spectra,solido/cor}% -\def\pgfPT@data@xxv{Mn/CS,54.938/Ar,54.938/Arstar,0/radio,161/R,119/Rcov,67\noexpand\pgfPT@espaco(2+)\noexpand\pgfPT@virgula58\noexpand\pgfPT@espaco(3+)\noexpand\pgfPT@virgula53\noexpand\pgfPT@espaco(4+)\noexpand\pgfPT@virgula25.5\noexpand\pgfPT@espaco(6+)\noexpand\pgfPT@virgula46\noexpand\pgfPT@espaco(7+)/Rion,717.3/Ei,1.55/eneg,0/eaff,+2\noexpand\pgfPT@virgula+3\noexpand\pgfPT@virgula+4\noexpand\pgfPT@virgula+6\noexpand\pgfPT@virgula+7/O,1519/Tmelt,1246/TmeltC,2334/Tboil,2061/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep13\noexpand\pgfPTeDistsep2/eDist,[Ar]::3d+5\noexpand\pgfPT@virgula4s+2/eConfign,[Ar]::4s+2\noexpand\pgfPT@virgula3d+5/eConfignl,7210/d,26.32/Cp,7.81/kT,bcc/ls,891.39/lsa,/lsb,/lsc,/lsca,1774/DiscY,18/DiscC,1/spectra,solido/cor}% -\def\pgfPT@data@xxvi{Fe/CS,55.845/Ar,55.845(2)/Arstar,0/radio,156/R,116/Rcov,61\noexpand\pgfPT@espaco(2+)\noexpand\pgfPT@virgula55\noexpand\pgfPT@espaco(3+)/Rion,762.5/Ei,1.83/eneg,14.79/eaff,+2\noexpand\pgfPT@virgula+3/O,1811/Tmelt,1538/TmeltC,3134/Tboil,2861/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep14\noexpand\pgfPTeDistsep2/eDist,[Ar]::3d+6\noexpand\pgfPT@virgula4s+2/eConfign,[Ar]::4s+2\noexpand\pgfPT@virgula3d+6/eConfignl,7860/d,25.1/Cp,80.4/kT,bcc/ls,286.64/lsa,/lsb,/lsc,/lsca,2000\noexpand\pgfPT@scaletxt{\pgfPTDiscYBCscale}{\noexpand\pgfPT@espaco\noexpand\pgfPT@BClabel}/DiscY,3/DiscC,1/spectra,solido/cor}% -\def\pgfPT@data@xxvii{Co/CS,58.933/Ar,58.933/Arstar,0/radio,152/R,111/Rcov,65\noexpand\pgfPT@espaco(2+)\noexpand\pgfPT@virgula54.5\noexpand\pgfPT@espaco(3+)/Rion,760.4/Ei,1.88/eneg,63.9/eaff,+2\noexpand\pgfPT@virgula+3/O,1768/Tmelt,1495/TmeltC,3200/Tboil,2927/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep15\noexpand\pgfPTeDistsep2/eDist,[Ar]::3d+7\noexpand\pgfPT@virgula4s+2/eConfign,[Ar]::4s+2\noexpand\pgfPT@virgula3d+7/eConfignl,8900/d,24.81/Cp,100/kT,hcp/ls,250.71/lsa,/lsb,406.95/lsc,1.62/lsca,1735/DiscY,18/DiscC,1/spectra,solido/cor}% -\def\pgfPT@data@xxviii{Ni/CS,58.693/Ar,58.693/Arstar,0/radio,149/R,110/Rcov,69\noexpand\pgfPT@espaco(2+)/Rion,737.1/Ei,1.91/eneg,111.65/eaff,+2/O,1728/Tmelt,1455/TmeltC,3003/Tboil,2730/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep16\noexpand\pgfPTeDistsep2/eDist,[Ar]::3d+8\noexpand\pgfPT@virgula4s+2/eConfign,[Ar]::4s+2\noexpand\pgfPT@virgula3d+8/eConfignl,8908/d,26.07/Cp,90.9/kT,fcc/ls,352.4/lsa,/lsb,/lsc,/lsca,1751/DiscY,18/DiscC,1/spectra,solido/cor}% -\def\pgfPT@data@xxix{Cu/CS,63.546/Ar,63.546(3)/Arstar,0/radio,145/R,112/Rcov,77\noexpand\pgfPT@espaco(1+)\noexpand\pgfPT@virgula73\noexpand\pgfPT@espaco(2+)/Rion,745.5/Ei,1.9/eneg,119.24/eaff,+1\noexpand\pgfPT@virgula+2/O,1357.77/Tmelt,1084.62/TmeltC,2835/Tboil,2562/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep1/eDist,[Ar]::3d+10\noexpand\pgfPT@virgula4s+1/eConfign,[Ar]::4s+1\noexpand\pgfPT@virgula3d+10/eConfignl,8960/d,24.44/Cp,401/kT,fcc/ls,361.47/lsa,/lsb,/lsc,/lsca,8000\noexpand\pgfPT@scaletxt{\pgfPTDiscYBCscale}{\noexpand\pgfPT@espaco\noexpand\pgfPT@BClabel}/DiscY,12/DiscC,1/spectra,solido/cor}% -\def\pgfPT@data@xxx{Zn/CS,65.38/Ar,65.38(2)/Arstar,0/radio,142/R,118/Rcov,74\noexpand\pgfPT@espaco(2+)/Rion,906.4/Ei,1.65/eneg,0/eaff,+2/O,692.68/Tmelt,419.53/TmeltC,1180/Tboil,907/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep2/eDist,[Ar]::3d+10\noexpand\pgfPT@virgula4s+2/eConfign,[Ar]::4s+2\noexpand\pgfPT@virgula3d+10/eConfignl,7140/d,25.39/Cp,116/kT,hcp/ls,266.49/lsa,/lsb,494.68/lsc,1.86/lsca,1746/DiscY,8/DiscC,1/spectra,solido/cor}% -\def\pgfPT@data@xxxi{Ga/CS,69.723/Ar,69.723/Arstar,0/radio,136/R,124/Rcov,62\noexpand\pgfPT@espaco(3+)/Rion,578.8/Ei,1.81/eneg,29.06/eaff,+3/O,302.9146/Tmelt,29.7646/TmeltC,2673/Tboil,2400/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep3/eDist,[Ar]::3d+10\noexpand\pgfPT@virgula4s+2\noexpand\pgfPT@virgula4p+1/eConfign,[Ar]::4s+2\noexpand\pgfPT@virgula3d+10\noexpand\pgfPT@virgula4p+1/eConfignl,5910/d,25.86/Cp,40.6/kT,bcort/ls,452.58/lsa,451.86/lsb,765.7/lsc,1.69/lsca,1875/DiscY,5/DiscC,1/spectra,solido/cor}% -\def\pgfPT@data@xxxii{Ge/CS,72.63/Ar,72.630(8)/Arstar,0/radio,125/R,121/Rcov,73\noexpand\pgfPT@espaco(2+)\noexpand\pgfPT@virgula53\noexpand\pgfPT@espaco(4+)/Rion,762/Ei,2.01/eneg,118.94/eaff,+2\noexpand\pgfPT@virgula\noexpand\pgfPT@pm4/O,1211.4/Tmelt,938.25/TmeltC,3106/Tboil,2833/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep4/eDist,[Ar]::3d+10\noexpand\pgfPT@virgula4s+2\noexpand\pgfPT@virgula4p+2/eConfign,[Ar]::4s+2\noexpand\pgfPT@virgula3d+10\noexpand\pgfPT@virgula4p+2/eConfignl,5323/d,23.222/Cp,60.2/kT,dia/ls,565.791/lsa,/lsb,/lsc,/lsca,1886/DiscY,8/DiscC,1/spectra,solido/cor}% -\def\pgfPT@data@xxxiii{As/CS,74.922/Ar,74.922/Arstar,0/radio,114/R,121/Rcov,58\noexpand\pgfPT@espaco(3+)\noexpand\pgfPT@virgula46\noexpand\pgfPT@espaco(5+)/Rion,947/Ei,2.18/eneg,77.65/eaff,\noexpand\pgfPT@pm3\noexpand\pgfPT@virgula+5/O,1090/Tmelt,817/TmeltC,887/Tboil,614/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep5/eDist,[Ar]::3d+10\noexpand\pgfPT@virgula4s+2\noexpand\pgfPT@virgula4p+3/eConfign,[Ar]::4s+2\noexpand\pgfPT@virgula3d+10\noexpand\pgfPT@virgula4p+3/eConfignl,5727/d,24.64/Cp,50.2/kT,rho/ls,375.98/lsa,375.98/lsb,1054.75/lsc,2.81/lsca,1250/DiscY,12/DiscC,1/spectra,solido/cor}% -\def\pgfPT@data@xxxiv{Se/CS,78.971/Ar,78.971(8)/Arstar,0/radio,103/R,116/Rcov,198\noexpand\pgfPT@espaco(2-)\noexpand\pgfPT@virgula50\noexpand\pgfPT@espaco(4+)\noexpand\pgfPT@virgula42\noexpand\pgfPT@espaco(6+)/Rion,941/Ei,2.55/eneg,194.96/eaff,\noexpand\pgfPT@pm2\noexpand\pgfPT@virgula+4\noexpand\pgfPT@virgula+6/O,494/Tmelt,221/TmeltC,958/Tboil,685/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep6/eDist,[Ar]::3d+10\noexpand\pgfPT@virgula4s+2\noexpand\pgfPT@virgula4p+4/eConfign,[Ar]::4s+2\noexpand\pgfPT@virgula3d+10\noexpand\pgfPT@virgula4p+4/eConfignl,4810/d,25.363/Cp,0.519/kT,mono/ls,905.4/lsa,908.3/lsb,1160.1/lsc,1.28/lsca,1817/DiscY,18/DiscC,1/spectra,solido/cor}% -\def\pgfPT@data@xxxv{Br/CS,79.904/Ar,[79.901\noexpand\pgfPT@virgula79.907]/Arstar,0/radio,94/R,114/Rcov,196\noexpand\pgfPT@espaco(1-)\noexpand\pgfPT@virgula59\noexpand\pgfPT@espaco(3+)\noexpand\pgfPT@virgula31\noexpand\pgfPT@espaco(5+)/Rion,1139.9/Ei,2.96/eneg,324.54/eaff,\noexpand\pgfPT@pm1\noexpand\pgfPT@virgula+3\noexpand\pgfPT@virgula+5/O,265.8/Tmelt,-7.3/TmeltC,332/Tboil,58.8/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep7/eDist,[Ar]::3d+10\noexpand\pgfPT@virgula4s+2\noexpand\pgfPT@virgula4p+5/eConfign,[Ar]::4s+2\noexpand\pgfPT@virgula3d+10\noexpand\pgfPT@virgula4p+5/eConfignl,3102.8/d,75.69/Cp,0.122/kT,bcort/ls,672.65/lsa,464.51/lsb,870.23/lsc,1.29/lsca,1825/DiscY,5/DiscC,1/spectra,liquido/cor}% -\def\pgfPT@data@xxxvi{Kr/CS,83.798/Ar,83.798(2)/Arstar,0/radio,88/R,117/Rcov,---/Rion,1350.8/Ei,3/eneg,0/eaff,0/O,115.78/Tmelt,-157.37/TmeltC,119.735/Tboil,-153.415/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep8/eDist,[Ar]::3d+10\noexpand\pgfPT@virgula4s+2\noexpand\pgfPT@virgula4p+6/eConfign,[Ar]::4s+2\noexpand\pgfPT@virgula3d+10\noexpand\pgfPT@virgula4p+6/eConfignl,3.749/d,20.786/Cp,0.00943/kT,fcc/ls,570.6/lsa,/lsb,/lsc,/lsca,1898/DiscY,21/DiscC,1/spectra,gasoso/cor}% -\def\pgfPT@data@xxxvii{Rb/CS,85.468/Ar,85.468/Arstar,0/radio,265/R,210/Rcov,152\noexpand\pgfPT@espaco(1+)/Rion,403/Ei,0.82/eneg,46.88/eaff,+1/O,312.45/Tmelt,39.3/TmeltC,961/Tboil,688/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep1/eDist,[Kr]::5s+1/eConfign,[Kr]::5s+1/eConfignl,1532/d,31.06/Cp,58.2/kT,bcc/ls,558.5/lsa,/lsb,/lsc,/lsca,1861/DiscY,8/DiscC,1/spectra,solido/cor}% -\def\pgfPT@data@xxxviii{Sr/CS,87.62/Ar,87.62/Arstar,0/radio,219/R,185/Rcov,118\noexpand\pgfPT@espaco(2+)/Rion,549.5/Ei,0.95/eneg,5.02/eaff,+2/O,1050/Tmelt,777/TmeltC,1650/Tboil,1382/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep2/eDist,[Kr]::5s+2/eConfign,[Kr]::5s+2/eConfignl,2640/d,26.4/Cp,35.4/kT,fcc/ls,608.49/lsa,/lsb,/lsc,/lsca,1787/DiscY,21/DiscC,1/spectra,solido/cor}% -\def\pgfPT@data@xxxix{Y/CS,88.906/Ar,88.906/Arstar,0/radio,212/R,163/Rcov,90\noexpand\pgfPT@espaco(3+)/Rion,600/Ei,1.22/eneg,29.6/eaff,+3/O,1799/Tmelt,1526/TmeltC,3203/Tboil,2930/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep9\noexpand\pgfPTeDistsep2/eDist,[Kr]::4d+1\noexpand\pgfPT@virgula5s+2/eConfign,[Kr]::5s+2\noexpand\pgfPT@virgula4d+1/eConfignl,4472/d,26.53/Cp,17.2/kT,hcp/ls,364.74/lsa,/lsb,573.06/lsc,1.57/lsca,1794/DiscY,4/DiscC,1/spectra,solido/cor}% -\def\pgfPT@data@xl{Zr/CS,91.224/Ar,91.224(2)/Arstar,0/radio,206/R,154/Rcov,72\noexpand\pgfPT@espaco(4+)/Rion,640.1/Ei,1.33/eneg,41.81/eaff,+4/O,2128/Tmelt,1855/TmeltC,4650/Tboil,4377/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep10\noexpand\pgfPTeDistsep2/eDist,[Kr]::4d+2\noexpand\pgfPT@virgula5s+2/eConfign,[Kr]::5s+2\noexpand\pgfPT@virgula4d+2/eConfignl,6520/d,25.36/Cp,22.6/kT,hcp/ls,323.2/lsa,/lsb,514.7/lsc,1.59/lsca,1789/DiscY,8/DiscC,1/spectra,solido/cor}% -\def\pgfPT@data@xli{Nb/CS,92.906/Ar,92.906/Arstar,0/radio,198/R,147/Rcov,64\noexpand\pgfPT@espaco(5+)/Rion,652.1/Ei,1.6/eneg,88.52/eaff,+5/O,2750/Tmelt,2477/TmeltC,5017/Tboil,4744/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep12\noexpand\pgfPTeDistsep1/eDist,[Kr]::4d+4\noexpand\pgfPT@virgula5s+1/eConfign,[Kr]::5s+1\noexpand\pgfPT@virgula4d+4/eConfignl,8570/d,24.6/Cp,53.7/kT,bcc/ls,330.04/lsa,/lsb,/lsc,/lsca,1801/DiscY,21/DiscC,1/spectra,solido/cor}% -\def\pgfPT@data@xlii{Mo/CS,95.95/Ar,95.95/Arstar,0/radio,190/R,138/Rcov,65\noexpand\pgfPT@espaco(4+)\noexpand\pgfPT@virgula59\noexpand\pgfPT@espaco(6+)/Rion,684.3/Ei,2.16/eneg,72.1/eaff,+4\noexpand\pgfPT@virgula+6/O,2896/Tmelt,2623/TmeltC,4912/Tboil,4639/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep13\noexpand\pgfPTeDistsep1/eDist,[Kr]::4d+5\noexpand\pgfPT@virgula5s+1/eConfign,[Kr]::5s+1\noexpand\pgfPT@virgula4d+5/eConfignl,10280/d,24.06/Cp,138/kT,bcc/ls,314.69/lsa,/lsb,/lsc,/lsca,1781/DiscY,18/DiscC,1/spectra,solido/cor}% -\def\pgfPT@data@xliii{Tc/CS,[98]/Ar,/Arstar,1/radio,183/R,128/Rcov,64.5\noexpand\pgfPT@espaco(4+)\noexpand\pgfPT@virgula56\noexpand\pgfPT@espaco(7+)/Rion,702/Ei,1.9/eneg,53/eaff,+4\noexpand\pgfPT@virgula+7/O,2430/Tmelt,2157/TmeltC,4538/Tboil,4265/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep13\noexpand\pgfPTeDistsep2/eDist,[Kr]::4d+5\noexpand\pgfPT@virgula5s+2/eConfign,[Kr]::5s+2\noexpand\pgfPT@virgula4d+5/eConfignl,11000/d,24.27/Cp,50.6/kT,hcp/ls,273.5/lsa,/lsb,438.8/lsc,1.6/lsca,1937/DiscY,11/DiscC,1/spectra,sintetico/cor}% -\def\pgfPT@data@xliv{Ru/CS,101.07/Ar,101.07/Arstar,0/radio,178/R,125/Rcov,68\noexpand\pgfPT@espaco(3+)\noexpand\pgfPT@virgula62\noexpand\pgfPT@espaco(4+)/Rion,710.2/Ei,2.2/eneg,100.96/eaff,+3\noexpand\pgfPT@virgula+4/O,2607/Tmelt,2334/TmeltC,4423/Tboil,4150/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep15\noexpand\pgfPTeDistsep1/eDist,[Kr]::4d+7\noexpand\pgfPT@virgula5s+1/eConfign,[Kr]::5s+1\noexpand\pgfPT@virgula4d+7/eConfignl,12450/d,24.06/Cp,117/kT,hcp/ls,270.55/lsa,/lsb,428.16/lsc,1.58/lsca,1844/DiscY,15/DiscC,1/spectra,solido/cor}% -\def\pgfPT@data@xlv{Rh/CS,102.91/Ar,102.91/Arstar,0/radio,173/R,125/Rcov,66.5\noexpand\pgfPT@espaco(3+)/Rion,719.7/Ei,2.28/eneg,110.27/eaff,+3/O,2237/Tmelt,1964/TmeltC,3968/Tboil,3695/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep16\noexpand\pgfPTeDistsep1/eDist,[Kr]::4d+8\noexpand\pgfPT@virgula5s+1/eConfign,[Kr]::5s+1\noexpand\pgfPT@virgula4d+8/eConfignl,12410/d,24.98/Cp,150/kT,fcc/ls,380.34/lsa,/lsb,/lsc,/lsca,1804/DiscY,21/DiscC,1/spectra,solido/cor}% -\def\pgfPT@data@xlvi{Pd/CS,106.42/Ar,106.42/Arstar,0/radio,169/R,120/Rcov,86\noexpand\pgfPT@espaco(2+)\noexpand\pgfPT@virgula61.5\noexpand\pgfPT@espaco(4+)/Rion,804.4/Ei,2.2/eneg,54.24/eaff,0\noexpand\pgfPT@virgula+2\noexpand\pgfPT@virgula+4/O,1828.05/Tmelt,1554.9/TmeltC,3236/Tboil,2963/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep18/eDist,[Kr]::4d+10/eConfign,[Kr]::4d+10/eConfignl,12023/d,25.98/Cp,71.8/kT,fcc/ls,389.02/lsa,/lsb,/lsc,/lsca,1802/DiscY,21/DiscC,1/spectra,solido/cor}% -\def\pgfPT@data@xlvii{Ag/CS,107.87/Ar,107.87/Arstar,0/radio,165/R,128/Rcov,115\noexpand\pgfPT@espaco(1+)/Rion,731/Ei,1.93/eneg,125.86/eaff,+1/O,1234.93/Tmelt,961.78/TmeltC,2483/Tboil,2210/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep1/eDist,[Kr]::4d+10\noexpand\pgfPT@virgula5s+1/eConfign,[Kr]::5s+1\noexpand\pgfPT@virgula4d+10/eConfignl,10490/d,25.35/Cp,429/kT,fcc/ls,408.57/lsa,/lsb,/lsc,/lsca,3000\noexpand\pgfPT@scaletxt{\pgfPTDiscYBCscale}{\noexpand\pgfPT@espaco\noexpand\pgfPT@BClabel}/DiscY,0/DiscC,1/spectra,solido/cor}% -\def\pgfPT@data@xlviii{Cd/CS,112.41/Ar,112.41/Arstar,0/radio,161/R,136/Rcov,95\noexpand\pgfPT@espaco(2+)/Rion,867.8/Ei,1.69/eneg,0/eaff,+2/O,594.22/Tmelt,321.07/TmeltC,1040/Tboil,767/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep2/eDist,[Kr]::4d+10\noexpand\pgfPT@virgula5s+2/eConfign,[Kr]::5s+2\noexpand\pgfPT@virgula4d+10/eConfignl,8650/d,26.02/Cp,96.6/kT,hcp/ls,297.88/lsa,/lsb,561.67/lsc,1.89/lsca,1817/DiscY,8/DiscC,1/spectra,solido/cor}% -\def\pgfPT@data@xlix{In/CS,114.82/Ar,114.82/Arstar,0/radio,156/R,142/Rcov,80\noexpand\pgfPT@espaco(3+)/Rion,558.3/Ei,1.78/eneg,37.04/eaff,+3/O,429.75/Tmelt,156.6/TmeltC,2345/Tboil,2072/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep3/eDist,[Kr]::4d+10\noexpand\pgfPT@virgula5s+2\noexpand\pgfPT@virgula5p+1/eConfign,[Kr]::5s+2\noexpand\pgfPT@virgula4d+10\noexpand\pgfPT@virgula5p+1/eConfignl,7310/d,26.74/Cp,81.8/kT,tetr/ls,325.17/lsa,/lsb,494.59/lsc,1.52/lsca,1863/DiscY,8/DiscC,1/spectra,solido/cor}% -\def\pgfPT@data@l{Sn/CS,118.71/Ar,118.71/Arstar,0/radio,145/R,140/Rcov,118\noexpand\pgfPT@espaco(2+)\noexpand\pgfPT@virgula69\noexpand\pgfPT@espaco(4+)/Rion,708.6/Ei,1.96/eneg,107.3/eaff,+2\noexpand\pgfPT@virgula\noexpand\pgfPT@pm4/O,505.08/Tmelt,231.93/TmeltC,2875/Tboil,2602/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep4/eDist,[Kr]::4d+10\noexpand\pgfPT@virgula5s+2\noexpand\pgfPT@virgula5p+2/eConfign,[Kr]::5s+2\noexpand\pgfPT@virgula4d+10\noexpand\pgfPT@virgula5p+2/eConfignl,7265/d,25.77/Cp,66.8/kT,ctetr/ls,583.1/lsa,/lsb,318.1/lsc,0.55/lsca,3000\noexpand\pgfPT@scaletxt{\pgfPTDiscYBCscale}{\noexpand\pgfPT@espaco\noexpand\pgfPT@BClabel}/DiscY,0/DiscC,1/spectra,solido/cor}% -\def\pgfPT@data@li{Sb/CS,121.76/Ar,121.76/Arstar,0/radio,133/R,140/Rcov,76\noexpand\pgfPT@espaco(3+)\noexpand\pgfPT@virgula60\noexpand\pgfPT@espaco(5+)/Rion,834/Ei,2.05/eneg,101.06/eaff,\noexpand\pgfPT@pm3\noexpand\pgfPT@virgula+5/O,903.78/Tmelt,630.63/TmeltC,1908/Tboil,1635/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep5/eDist,[Kr]::4d+10\noexpand\pgfPT@virgula5s+2\noexpand\pgfPT@virgula5p+3/eConfign,[Kr]::5s+2\noexpand\pgfPT@virgula4d+10\noexpand\pgfPT@virgula5p+3/eConfignl,6697/d,25.23/Cp,24.4/kT,rho/ls,430.7/lsa,/lsb,1127.3/lsc,2.62/lsca,815/DiscY,12/DiscC,1/spectra,solido/cor}% -\def\pgfPT@data@lii{Te/CS,127.6/Ar,127.60(3)/Arstar,0/radio,123/R,136/Rcov,221\noexpand\pgfPT@espaco(2-)\noexpand\pgfPT@virgula97\noexpand\pgfPT@espaco(4+)\noexpand\pgfPT@virgula56\noexpand\pgfPT@espaco(6+)/Rion,869.3/Ei,2.1/eneg,190.16/eaff,\noexpand\pgfPT@pm2\noexpand\pgfPT@virgula+4\noexpand\pgfPT@virgula+6/O,722.66/Tmelt,449.51/TmeltC,1261/Tboil,988/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep6/eDist,[Kr]::4d+10\noexpand\pgfPT@virgula5s+2\noexpand\pgfPT@virgula5p+4/eConfign,[Kr]::5s+2\noexpand\pgfPT@virgula4d+10\noexpand\pgfPT@virgula5p+4/eConfignl,6240/d,25.73/Cp,3/kT,rho/ls,445.72/lsa,/lsb,592.9/lsc,1.33/lsca,1782/DiscY,14/DiscC,1/spectra,solido/cor}% -\def\pgfPT@data@liii{I/CS,126.9/Ar,126.9/Arstar,0/radio,115/R,133/Rcov,220\noexpand\pgfPT@espaco(1-)\noexpand\pgfPT@virgula95\noexpand\pgfPT@espaco(5+)\noexpand\pgfPT@virgula53\noexpand\pgfPT@espaco(7+)/Rion,1008.4/Ei,2.66/eneg,295.15/eaff,\noexpand\pgfPT@pm1\noexpand\pgfPT@virgula+3\noexpand\pgfPT@virgula+5\noexpand\pgfPT@virgula+7/O,386.85/Tmelt,113.7/TmeltC,457.4/Tboil,184.3/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep7/eDist,[Kr]::4d+10\noexpand\pgfPT@virgula5s+2\noexpand\pgfPT@virgula5p+5/eConfign,[Kr]::5s+2\noexpand\pgfPT@virgula4d+10\noexpand\pgfPT@virgula5p+5/eConfignl,4933/d,54.44/Cp,0.449/kT,bcort/ls,726.97/lsa,479.03/lsb,979.42/lsc,1.35/lsca,1811/DiscY,5/DiscC,1/spectra,solido/cor}% -\def\pgfPT@data@liv{Xe/CS,131.29/Ar,131.29/Arstar,0/radio,108/R,131/Rcov,---/Rion,1170.4/Ei,2.6/eneg,0/eaff,0/O,161.4/Tmelt,-111.75/TmeltC,165.051/Tboil,-108.099/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep8/eDist,[Kr]::4d+10\noexpand\pgfPT@virgula5s+2\noexpand\pgfPT@virgula5p+6/eConfign,[Kr]::5s+2\noexpand\pgfPT@virgula4d+10\noexpand\pgfPT@virgula5p+6/eConfignl,5.894/d,20.786/Cp,0.00565/kT,fcc/ls,620.23/lsa,/lsb,/lsc,/lsca,1898/DiscY,21/DiscC,1/spectra,gasoso/cor}% -\def\pgfPT@data@lv{Cs/CS,132.91/Ar,132.91/Arstar,0/radio,298/R,232/Rcov,167\noexpand\pgfPT@espaco(1+)/Rion,375.7/Ei,0.79/eneg,45.51/eaff,+1/O,301.7/Tmelt,28.5/TmeltC,944/Tboil,671/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep1/eDist,[Xe]::6s+1/eConfign,[Xe]::6s+1/eConfignl,1930/d,32.21/Cp,35.9/kT,bcc/ls,614.1/lsa,/lsb,/lsc,/lsca,1860/DiscY,8/DiscC,1/spectra,solido/cor}% -\def\pgfPT@data@lvi{Ba/CS,137.33/Ar,137.33/Arstar,0/radio,253/R,196/Rcov,135\noexpand\pgfPT@espaco(2+)/Rion,502.9/Ei,0.89/eneg,13.95/eaff,+2/O,1000/Tmelt,727/TmeltC,1910/Tboil,1637/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep2/eDist,[Xe]::6s+2/eConfign,[Xe]::6s+2/eConfignl,3510/d,28.07/Cp,18.4/kT,bcc/ls,501.9/lsa,/lsb,/lsc,/lsca,1808/DiscY,21/DiscC,1/spectra,solido/cor}% -\def\pgfPT@data@lvii{La/CS,138.91/Ar,138.91/Arstar,0/radio,226/R,180/Rcov,103.2\noexpand\pgfPT@espaco(3+)/Rion,538.1/Ei,1.1/eneg,53.8/eaff,+3/O,1193/Tmelt,920/TmeltC,3737/Tboil,3464/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep9\noexpand\pgfPTeDistsep2/eDist,[Xe]::5d+1\noexpand\pgfPT@virgula6s+2/eConfign,[Xe]::6s+2\noexpand\pgfPT@virgula5d+1/eConfignl,6162/d,27.11/Cp,13.4/kT,hex/ls,377.2/lsa,/lsb,1214.4/lsc,3.22/lsca,1838/DiscY,18/DiscC,1/spectra,solido/cor}% -\def\pgfPT@data@lviii{Ce/CS,140.12/Ar,140.12/Arstar,0/radio,210/R,163/Rcov,101\noexpand\pgfPT@espaco(3+)\noexpand\pgfPT@virgula87\noexpand\pgfPT@espaco(4+)/Rion,534.4/Ei,1.12/eneg,55/eaff,+3\noexpand\pgfPT@virgula+4/O,1068/Tmelt,795/TmeltC,3716/Tboil,3443/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep19\noexpand\pgfPTeDistsep9\noexpand\pgfPTeDistsep2/eDist,[Xe]::4f+1\noexpand\pgfPT@virgula5d+1\noexpand\pgfPT@virgula6s+2/eConfign,[Xe]::6s+2\noexpand\pgfPT@virgula4f+1\noexpand\pgfPT@virgula5d+1/eConfignl,6770/d,26.94/Cp,11.3/kT,hex/ls,362/lsa,/lsb,599/lsc,1.65/lsca,1803/DiscY,9/DiscC,1/spectra,solido/cor}% -\def\pgfPT@data@lix{Pr/CS,140.91/Ar,140.91/Arstar,0/radio,247/R,17/Rcov,99\noexpand\pgfPT@espaco(3+)/Rion,527/Ei,1.13/eneg,10.54/eaff,+3/O,1208/Tmelt,935/TmeltC,3403/Tboil,3130/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep21\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep2/eDist,[Xe]::4f+3\noexpand\pgfPT@virgula6s+2/eConfign,[Xe]::6s+2\noexpand\pgfPT@virgula4f+3/eConfignl,6770/d,27.2/Cp,12.5/kT,hex/ls,367.21/lsa,/lsb,1183.26/lsc,3.22/lsca,1885/DiscY,1/DiscC,1/spectra,solido/cor}% -\def\pgfPT@data@lx{Nd/CS,144.24/Ar,144.24/Arstar,0/radio,206/R,17/Rcov,98.3\noexpand\pgfPT@espaco(3+)/Rion,533.1/Ei,1.14/eneg,9.41/eaff,+3/O,1297/Tmelt,1024/TmeltC,3347/Tboil,3074/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep22\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep2/eDist,[Xe]::4f+4\noexpand\pgfPT@virgula6s+2/eConfign,[Xe]::6s+2\noexpand\pgfPT@virgula4f+4/eConfignl,7010/d,27.45/Cp,16.5/kT,hex/ls,365.82/lsa,/lsb,1179.66/lsc,3.22/lsca,1885/DiscY,1/DiscC,1/spectra,solido/cor}% -\def\pgfPT@data@lxi{Pm/CS,[145]/Ar,[145]/Arstar,1/radio,205/R,173/Rcov,97\noexpand\pgfPT@espaco(3+)/Rion,540/Ei,1.13/eneg,12.45/eaff,+3/O,1315/Tmelt,1042/TmeltC,3273/Tboil,3000/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep23\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep2/eDist,[Xe]::4f+5\noexpand\pgfPT@virgula6s+2/eConfign,[Xe]::6s+2\noexpand\pgfPT@virgula4f+5/eConfignl,7260/d,---/Cp,17.9/kT,hex/ls,365/lsa,/lsb,1165/lsc,3.19/lsca,1945/DiscY,22/DiscC,1/spectra,sintetico/cor}% -\def\pgfPT@data@lxii{Sm/CS,150.36/Ar,150.36(2)/Arstar,0/radio,238/R,172/Rcov,95.8\noexpand\pgfPT@espaco(3+)/Rion,544.5/Ei,1.17/eneg,15.63/eaff,+3/O,1345/Tmelt,1072/TmeltC,2173/Tboil,1900/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep24\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep2/eDist,[Xe]::4f+6\noexpand\pgfPT@virgula6s+2/eConfign,[Xe]::6s+2\noexpand\pgfPT@virgula4f+6/eConfignl,7520/d,29.54/Cp,13.3/kT,rho/ls,362.1/lsa,/lsb,2625/lsc,7.25/lsca,1879/DiscY,5/DiscC,1/spectra,solido/cor}% -\def\pgfPT@data@lxiii{Eu/CS,151.96/Ar,151.96/Arstar,0/radio,231/R,168/Rcov,117\noexpand\pgfPT@espaco(2+)\noexpand\pgfPT@virgula94.7\noexpand\pgfPT@espaco(3+)/Rion,547.1/Ei,1.2/eneg,11.2/eaff,+2\noexpand\pgfPT@virgula+3/O,1099/Tmelt,826/TmeltC,1802/Tboil,1529/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep25\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep2/eDist,[Xe]::4f+7\noexpand\pgfPT@virgula6s+2/eConfign,[Xe]::6s+2\noexpand\pgfPT@virgula4f+7/eConfignl,5244/d,27.66/Cp,13.9/kT,bcc/ls,458.1/lsa,/lsb,/lsc,/lsca,1901/DiscY,5/DiscC,1/spectra,solido/cor}% -\def\pgfPT@data@lxiv{Gd/CS,157.25/Ar,157.25(3)/Arstar,0/radio,233/R,169/Rcov,93.5\noexpand\pgfPT@espaco(3+)/Rion,593.4/Ei,1.2/eneg,13.22/eaff,+3/O,1585/Tmelt,1312/TmeltC,3273/Tboil,3000/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep25\noexpand\pgfPTeDistsep9\noexpand\pgfPTeDistsep2/eDist,[Xe]::4f+7\noexpand\pgfPT@virgula5d+1\noexpand\pgfPT@virgula6s+2/eConfign,[Xe]::6s+2\noexpand\pgfPT@virgula4f+7\noexpand\pgfPT@virgula5d+1/eConfignl,7900/d,37.03/Cp,10.6/kT,hcp/ls,363.6/lsa,/lsb,578.26/lsc,1.59/lsca,1880/DiscY,20/DiscC,1/spectra,solido/cor}% -\def\pgfPT@data@lxv{Tb/CS,158.93/Ar,158.93/Arstar,0/radio,225/R,168/Rcov,92.3\noexpand\pgfPT@espaco(3+)/Rion,565.8/Ei,1.2/eneg,12.67/eaff,+3/O,1629/Tmelt,1356/TmeltC,3396/Tboil,3123/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep27\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep2/eDist,[Xe]::4f+9\noexpand\pgfPT@virgula6s+2/eConfign,[Xe]::6s+2\noexpand\pgfPT@virgula4f+9/eConfignl,8230/d,28.91/Cp,11.1/kT,hcp/ls,360.1/lsa,/lsb,569.36/lsc,1.58/lsca,1843/DiscY,18/DiscC,1/spectra,solido/cor}% -\def\pgfPT@data@lxvi{Dy/CS,162.5/Ar,162.5/Arstar,0/radio,228/R,167/Rcov,91.2\noexpand\pgfPT@espaco(3+)/Rion,573/Ei,1.22/eneg,33.96/eaff,+3/O,1680/Tmelt,1407/TmeltC,2840/Tboil,2567/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep28\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep2/eDist,[Xe]::4f+10\noexpand\pgfPT@virgula6s+2/eConfign,[Xe]::6s+2\noexpand\pgfPT@virgula4f+10/eConfignl,8540/d,27.7/Cp,10.7/kT,hcp/ls,359.3/lsa,/lsb,565.37/lsc,1.57/lsca,1886/DiscY,5/DiscC,1/spectra,solido/cor}% -\def\pgfPT@data@lxvii{Ho/CS,164.93/Ar,164.93/Arstar,0/radio,226/R,166/Rcov,90.1\noexpand\pgfPT@espaco(3+)/Rion,581/Ei,1.23/eneg,32.61/eaff,+3/O,1734/Tmelt,1461/TmeltC,2873/Tboil,2600/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep29\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep2/eDist,[Xe]::4f+11\noexpand\pgfPT@virgula6s+2/eConfign,[Xe]::6s+2\noexpand\pgfPT@virgula4f+11/eConfignl,8790/d,27.15/Cp,16.2/kT,hcp/ls,357.73/lsa,/lsb,561.58/lsc,1.57/lsca,1878/DiscY,20/DiscC,1/spectra,solido/cor}% -\def\pgfPT@data@lxviii{Er/CS,167.26/Ar,167.26/Arstar,0/radio,226/R,165/Rcov,89\noexpand\pgfPT@espaco(3+)/Rion,589.3/Ei,1.24/eneg,30.1/eaff,+3/O,1802/Tmelt,1529/TmeltC,3141/Tboil,2868/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep30\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep2/eDist,[Xe]::4f+12\noexpand\pgfPT@virgula6s+2/eConfign,[Xe]::6s+2\noexpand\pgfPT@virgula4f+12/eConfignl,9066/d,28.12/Cp,14.5/kT,hcp/ls,355.88/lsa,/lsb,558.74/lsc,1.57/lsca,1843/DiscY,18/DiscC,1/spectra,solido/cor}% -\def\pgfPT@data@lxix{Tm/CS,168.93/Ar,168.93/Arstar,0/radio,222/R,164/Rcov,88\noexpand\pgfPT@espaco(3+)/Rion,596.7/Ei,1.25/eneg,99/eaff,+3/O,1818/Tmelt,1545/TmeltC,2223/Tboil,1950/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep31\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep2/eDist,[Xe]::4f+13\noexpand\pgfPT@virgula6s+2/eConfign,[Xe]::6s+2\noexpand\pgfPT@virgula4f+13/eConfignl,9320/d,27.03/Cp,16.9/kT,hcp/ls,353.75/lsa,/lsb,555.46/lsc,1.57/lsca,1879/DiscY,18/DiscC,1/spectra,solido/cor}% -\def\pgfPT@data@lxx{Yb/CS,173.05/Ar,173.05/Arstar,0/radio,222/R,170/Rcov,86.8\noexpand\pgfPT@espaco(3+)/Rion,603.4/Ei,1.1/eneg,0/eaff,+3/O,1097/Tmelt,824/TmeltC,1703/Tboil,1430/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep2/eDist,[Xe]::4f+14\noexpand\pgfPT@virgula6s+2/eConfign,[Xe]::6s+2\noexpand\pgfPT@virgula4f+14/eConfignl,6900/d,26.74/Cp,38.5/kT,fcc/ls,548.47/lsa,/lsb,/lsc,/lsca,1878/DiscY,20/DiscC,1/spectra,solido/cor}% -\def\pgfPT@data@lxxi{Lu/CS,174.97/Ar,174.97/Arstar,0/radio,217/R,162/Rcov,86.1\noexpand\pgfPT@espaco(3+)/Rion,523.5/Ei,1.27/eneg,23.04/eaff,+3/O,1925/Tmelt,1652/TmeltC,3675/Tboil,3402/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep9\noexpand\pgfPTeDistsep2/eDist,[Xe]::4f+14\noexpand\pgfPT@virgula5d+1\noexpand\pgfPT@virgula6s+2/eConfign,[Xe]::6s+2\noexpand\pgfPT@virgula4f+14\noexpand\pgfPT@virgula5d+1/eConfignl,9841/d,26.86/Cp,16.4/kT,hcp/ls,350.31/lsa,/lsb,555.09/lsc,1.58/lsca,1906/DiscY,6/DiscC,1/spectra,solido/cor}% -\def\pgfPT@data@lxxii{Hf/CS,178.49/Ar,178.49(2)/Arstar,0/radio,208/R,152/Rcov,71\noexpand\pgfPT@espaco(4+)/Rion,658.5/Ei,1.3/eneg,17.18/eaff,+4/O,2506/Tmelt,2233/TmeltC,4876/Tboil,4603/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep10\noexpand\pgfPTeDistsep2/eDist,[Xe]::4f+14\noexpand\pgfPT@virgula5d+2\noexpand\pgfPT@virgula6s+2/eConfign,[Xe]::6s+2\noexpand\pgfPT@virgula4f+14\noexpand\pgfPT@virgula5d+2/eConfignl,13310/d,25.73/Cp,23/kT,hcp/ls,319.64/lsa,/lsb,505.11/lsc,1.58/lsca,1922/DiscY,2/DiscC,1/spectra,solido/cor}% -\def\pgfPT@data@lxxiii{Ta/CS,180.95/Ar,180.95/Arstar,0/radio,200/R,146/Rcov,64\noexpand\pgfPT@espaco(5+)/Rion,761/Ei,1.5/eneg,31/eaff,+5/O,3290/Tmelt,3017/TmeltC,5731/Tboil,5458/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep11\noexpand\pgfPTeDistsep2/eDist,[Xe]::4f+14\noexpand\pgfPT@virgula5d+3\noexpand\pgfPT@virgula6s+2/eConfign,[Xe]::6s+2\noexpand\pgfPT@virgula4f+14\noexpand\pgfPT@virgula5d+3/eConfignl,16690/d,25.36/Cp,57.5/kT,bcc/ls,330.26/lsa,/lsb,/lsc,/lsca,1802/DiscY,18/DiscC,1/spectra,solido/cor}% -\def\pgfPT@data@lxxiv{W/CS,183.84/Ar,183.84/Arstar,0/radio,193/R,137/Rcov,66\noexpand\pgfPT@espaco(4+)\noexpand\pgfPT@virgula60\noexpand\pgfPT@espaco(6+)/Rion,770/Ei,2.36/eneg,78.76/eaff,+4\noexpand\pgfPT@virgula+6/O,3695/Tmelt,3422/TmeltC,6203/Tboil,5930/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep12\noexpand\pgfPTeDistsep2/eDist,[Xe]::4f+14\noexpand\pgfPT@virgula5d+4\noexpand\pgfPT@virgula6s+2/eConfign,[Xe]::6s+2\noexpand\pgfPT@virgula4f+14\noexpand\pgfPT@virgula5d+4/eConfignl,19250/d,24.27/Cp,173/kT,bcc/ls,316.52/lsa,/lsb,/lsc,/lsca,1783/DiscY,17/DiscC,1/spectra,solido/cor}% -\def\pgfPT@data@lxxv{Re/CS,186.21/Ar,186.21/Arstar,0/radio,188/R,131/Rcov,63\noexpand\pgfPT@espaco(4+)/Rion,760/Ei,1.9/eneg,5.83/eaff,+4/O,3459/Tmelt,3186/TmeltC,5869/Tboil,5596/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep13\noexpand\pgfPTeDistsep2/eDist,[Xe]::4f+14\noexpand\pgfPT@virgula5d+5\noexpand\pgfPT@virgula6s+2/eConfign,[Xe]::6s+2\noexpand\pgfPT@virgula4f+14\noexpand\pgfPT@virgula5d+5/eConfignl,21020/d,25.48/Cp,48/kT,hcp/ls,276.1/lsa,/lsb,445.8/lsc,1.62/lsca,1925/DiscY,8/DiscC,1/spectra,solido/cor}% -\def\pgfPT@data@lxxvi{Os/CS,190.23/Ar,190.23(3)/Arstar,0/radio,185/R,129/Rcov,63\noexpand\pgfPT@espaco(4+)/Rion,840/Ei,2.2/eneg,103.99/eaff,+4/O,3306/Tmelt,3033/TmeltC,5285/Tboil,5012/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep14\noexpand\pgfPTeDistsep2/eDist,[Xe]::4f+14\noexpand\pgfPT@virgula5d+6\noexpand\pgfPT@virgula6s+2/eConfign,[Xe]::6s+2\noexpand\pgfPT@virgula4f+14\noexpand\pgfPT@virgula5d+6/eConfignl,22590/d,24.7/Cp,87.6/kT,hcp/ls,273.43/lsa,/lsb,431.73/lsc,1.58/lsca,1803/DiscY,21/DiscC,1/spectra,solido/cor}% -\def\pgfPT@data@lxxvii{Ir/CS,192.22/Ar,192.22/Arstar,0/radio,180/R,122/Rcov,68\noexpand\pgfPT@espaco(3+)\noexpand\pgfPT@virgula62.5\noexpand\pgfPT@espaco(4+)/Rion,880/Ei,2.2/eneg,150.91/eaff,+3\noexpand\pgfPT@virgula+4/O,2719/Tmelt,2446/TmeltC,4403/Tboil,4130/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep15\noexpand\pgfPTeDistsep2/eDist,[Xe]::4f+14\noexpand\pgfPT@virgula5d+7\noexpand\pgfPT@virgula6s+2/eConfign,[Xe]::6s+2\noexpand\pgfPT@virgula4f+14\noexpand\pgfPT@virgula5d+7/eConfignl,22560/d,25.1/Cp,147/kT,fcc/ls,383.92/lsa,/lsb,/lsc,/lsca,1803/DiscY,7/DiscC,1/spectra,solido/cor}% -\def\pgfPT@data@lxxviii{Pt/CS,195.08/Ar,195.08/Arstar,0/radio,177/R,123/Rcov,80\noexpand\pgfPT@espaco(2+)\noexpand\pgfPT@virgula62.5\noexpand\pgfPT@espaco(4+)/Rion,870/Ei,2.28/eneg,205.04/eaff,+2\noexpand\pgfPT@virgula+4/O,2041.4/Tmelt,1768.3/TmeltC,4098/Tboil,3825/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep17\noexpand\pgfPTeDistsep1/eDist,[Xe]::4f+14\noexpand\pgfPT@virgula5d+9\noexpand\pgfPT@virgula6s+1/eConfign,[Xe]::6s+1\noexpand\pgfPT@virgula4f+14\noexpand\pgfPT@virgula5d+9/eConfignl,21450/d,25.86/Cp,71.6/kT,fcc/ls,392.35/lsa,/lsb,/lsc,/lsca,1735/DiscY,13/DiscC,1/spectra,solido/cor}% -\def\pgfPT@data@lxxix{Au/CS,196.97/Ar,196.97/Arstar,0/radio,174/R,124/Rcov,137\noexpand\pgfPT@espaco(1+)\noexpand\pgfPT@virgula85\noexpand\pgfPT@espaco(3+)/Rion,890.1/Ei,2.54/eneg,222.75/eaff,+1\noexpand\pgfPT@virgula+3/O,1337.33/Tmelt,1064.18/TmeltC,3243/Tboil,2970/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep1/eDist,[Xe]::4f+14\noexpand\pgfPT@virgula5d+10\noexpand\pgfPT@virgula6s+1/eConfign,[Xe]::6s+1\noexpand\pgfPT@virgula4f+14\noexpand\pgfPT@virgula5d+10/eConfignl,19300/d,25.418/Cp,318/kT,fcc/ls,407.83/lsa,/lsb,/lsc,/lsca,4000\noexpand\pgfPT@scaletxt{\pgfPTDiscYBCscale}{\noexpand\pgfPT@espaco\noexpand\pgfPT@BClabel}/DiscY,100/DiscC,1/spectra,solido/cor}% -\def\pgfPT@data@lxxx{Hg/CS,200.59/Ar,200.59/Arstar,0/radio,171/R,133/Rcov,119\noexpand\pgfPT@espaco(1+)\noexpand\pgfPT@virgula102\noexpand\pgfPT@espaco(2+)/Rion,1007.1/Ei,2/eneg,0/eaff,+1\noexpand\pgfPT@virgula+2/O,234.32/Tmelt,-38.83/TmeltC,629.88/Tboil,356.73/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep2/eDist,[Xe]::4f+14\noexpand\pgfPT@virgula5d+10\noexpand\pgfPT@virgula6s+2/eConfign,[Xe]::6s+2\noexpand\pgfPT@virgula4f+14\noexpand\pgfPT@virgula5d+10/eConfignl,13534/d,27.983/Cp,8.3/kT,rho/ls,300.9/lsa,/lsb,/lsc,/lsca,1500\noexpand\pgfPT@scaletxt{\pgfPTDiscYBCscale}{\noexpand\pgfPT@espaco\noexpand\pgfPT@BClabel}/DiscY,3/DiscC,1/spectra,liquido/cor}% -\def\pgfPT@data@lxxxi{Tl/CS,204.38/Ar,[204.38\noexpand\pgfPT@virgula204.39]/Arstar,0/radio,156/R,144/Rcov,150\noexpand\pgfPT@espaco(1+)\noexpand\pgfPT@virgula88.5\noexpand\pgfPT@espaco(3+)/Rion,589.4/Ei,1.62/eneg,30.88/eaff,+1\noexpand\pgfPT@virgula+3/O,577/Tmelt,304/TmeltC,1746/Tboil,1473/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep3/eDist,[Xe]::4f+14\noexpand\pgfPT@virgula5d+10\noexpand\pgfPT@virgula6s+2\noexpand\pgfPT@virgula6p+1/eConfign,[Xe]::6s+2\noexpand\pgfPT@virgula4f+14\noexpand\pgfPT@virgula5d+10\noexpand\pgfPT@virgula6p+1/eConfignl,11850/d,26.32/Cp,46.1/kT,hcp/ls,345.66/lsa,/lsb,552.48/lsc,1.6/lsca,1861/DiscY,21/DiscC,1/spectra,solido/cor}% -\def\pgfPT@data@lxxxii{Pb/CS,207.2/Ar,207.2/Arstar,0/radio,154/R,144/Rcov,119\noexpand\pgfPT@espaco(2+)\noexpand\pgfPT@virgula77.5\noexpand\pgfPT@espaco(4+)/Rion,715.6/Ei,1.87/eneg,34.42/eaff,+2\noexpand\pgfPT@virgula+4/O,600.61/Tmelt,327.46/TmeltC,2022/Tboil,1749/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep4/eDist,[Xe]::4f+14\noexpand\pgfPT@virgula5d+10\noexpand\pgfPT@virgula6s+2\noexpand\pgfPT@virgula6p+2/eConfign,[Xe]::6s+2\noexpand\pgfPT@virgula4f+14\noexpand\pgfPT@virgula5d+10\noexpand\pgfPT@virgula6p+2/eConfignl,11340/d,26.65/Cp,35.3/kT,fcc/ls,495.02/lsa,/lsb,/lsc,/lsca,3800\noexpand\pgfPT@scaletxt{\pgfPTDiscYBCscale}{\noexpand\pgfPT@espaco\noexpand\pgfPT@BClabel}/DiscY,3/DiscC,1/spectra,solido/cor}% -\def\pgfPT@data@lxxxiii{Bi/CS,208.98/Ar,208.98/Arstar,0/radio,143/R,151/Rcov,103\noexpand\pgfPT@espaco(3+)/Rion,703/Ei,2.02/eneg,90.92/eaff,+3/O,544.7/Tmelt,271.5/TmeltC,1837/Tboil,1564/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep5/eDist,[Xe]::4f+14\noexpand\pgfPT@virgula5d+10\noexpand\pgfPT@virgula6s+2\noexpand\pgfPT@virgula6p+3/eConfign,[Xe]::6s+2\noexpand\pgfPT@virgula4f+14\noexpand\pgfPT@virgula5d+10\noexpand\pgfPT@virgula6p+3/eConfignl,9780/d,25.52/Cp,7.97/kT,mono/ls,667.4/lsa,611.7/lsb,330.4/lsc,0.5/lsca,1400/DiscY,12/DiscC,1/spectra,solido/cor}% -\def\pgfPT@data@lxxxiv{Po/CS,[209]/Ar,/Arstar,1/radio,135/R,145/Rcov,223\noexpand\pgfPT@espaco(2-)\noexpand\pgfPT@virgula94\noexpand\pgfPT@espaco(4+)\noexpand\pgfPT@virgula67\noexpand\pgfPT@espaco(6+)/Rion,812.1/Ei,2/eneg,136/eaff,\noexpand\pgfPT@pm2\noexpand\pgfPT@virgula+4\noexpand\pgfPT@virgula+5\noexpand\pgfPT@virgula+6/O,527/Tmelt,254/TmeltC,1235/Tboil,962/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep6/eDist,[Xe]::4f+14\noexpand\pgfPT@virgula5d+10\noexpand\pgfPT@virgula6s+2\noexpand\pgfPT@virgula6p+4/eConfign,[Xe]::6s+2\noexpand\pgfPT@virgula4f+14\noexpand\pgfPT@virgula5d+10\noexpand\pgfPT@virgula6p+4/eConfignl,9196/d,26.4/Cp,0/kT,sc/ls,335.9/lsa,/lsb,/lsc,/lsca,1898/DiscY,5/DiscC,1/spectra,solido/cor}% -\def\pgfPT@data@lxxxv{At/CS,[210]/Ar,/Arstar,1/radio,127/R,147/Rcov,62\noexpand\pgfPT@espaco(7+)/Rion,899.003/Ei,2.2/eneg,233.09/eaff,\noexpand\pgfPT@pm1\noexpand\pgfPT@virgula+3\noexpand\pgfPT@virgula+5\noexpand\pgfPT@virgula+7/O,575/Tmelt,302/TmeltC,503/Tboil,230/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep7/eDist,[Xe]::4f+14\noexpand\pgfPT@virgula5d+10\noexpand\pgfPT@virgula6s+2\noexpand\pgfPT@virgula6p+5/eConfign,[Xe]::6s+2\noexpand\pgfPT@virgula4f+14\noexpand\pgfPT@virgula5d+10\noexpand\pgfPT@virgula6p+5/eConfignl,---/d,---/Cp,1.7/kT,---/ls,---/lsa,/lsb,/lsc,/lsca,1940/DiscY,22/DiscC,0/spectra,solido/cor}% -\def\pgfPT@data@lxxxvi{Rn/CS,[222]/Ar,/Arstar,1/radio,120/R,142/Rcov,---/Rion,1037/Ei,2.2/eneg,0/eaff,+2\noexpand\pgfPT@virgula+6/O,202/Tmelt,-71/TmeltC,211.5/Tboil,-61.7/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep8/eDist,[Xe]::4f+14\noexpand\pgfPT@virgula5d+10\noexpand\pgfPT@virgula6s+2\noexpand\pgfPT@virgula6p+6/eConfign,[Xe]::6s+2\noexpand\pgfPT@virgula4f+14\noexpand\pgfPT@virgula5d+10\noexpand\pgfPT@virgula6p+6/eConfignl,9.73/d,20.786/Cp,0.00361/kT,fcc/ls,---/lsa,/lsb,/lsc,/lsca,1899/DiscY,8/DiscC,1/spectra,gasoso/cor}% -\def\pgfPT@data@lxxxvii{Fr/CS,[223]/Ar,/Arstar,1/radio,---/R,---/Rcov,180\noexpand\pgfPT@espaco(1+)/Rion,380/Ei,0.7/eneg,46.89/eaff,+1/O,281/Tmelt,8/TmeltC,890/Tboil,620/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep1/eDist,[Rn]::7s+1/eConfign,[Rn]::7s+1/eConfignl,---/d,31.8/Cp,---/kT,---/ls,---/lsa,/lsb,/lsc,/lsca,1939/DiscY,5/DiscC,0/spectra,solido/cor}% -\def\pgfPT@data@lxxxviii{Ra/CS,[226]/Ar,/Arstar,1/radio,---/R,201/Rcov,148\noexpand\pgfPT@espaco(2+)/Rion,509.3/Ei,0.9/eneg,9.65/eaff,+2/O,973/Tmelt,700/TmeltC,2010/Tboil,1737/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep2/eDist,[Rn]::7s+2/eConfign,[Rn]::7s+2/eConfignl,5500/d,---/Cp,18.6/kT,bcc/ls,514.8/lsa,/lsb,/lsc,/lsca,1898/DiscY,5/DiscC,1/spectra,solido/cor}% -\def\pgfPT@data@lxxxix{Ac/CS,[227]/Ar,/Arstar,1/radio,---/R,186/Rcov,106.5\noexpand\pgfPT@espaco(3+)/Rion,499/Ei,1.1/eneg,33.77/eaff,+3/O,1323/Tmelt,1050/TmeltC,3471/Tboil,3198/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep9\noexpand\pgfPTeDistsep2/eDist,[Rn]::6d+1\noexpand\pgfPT@virgula7s+2/eConfign,[Rn]::7s+2\noexpand\pgfPT@virgula6d+1/eConfignl,10000/d,27.2/Cp,12/kT,fcc/ls,587/lsa,/lsb,/lsc,/lsca,1902/DiscY,5/DiscC,1/spectra,solido/cor}% -\def\pgfPT@data@xc{Th/CS,232.04/Ar,232.04/Arstar,1/radio,---/R,175/Rcov,/Rion,587/Ei,1.3/eneg,58.63/eaff,+4/O,2115/Tmelt,1842/TmeltC,5061/Tboil,4788/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep10\noexpand\pgfPTeDistsep2/eDist,[Rn]::6d+2\noexpand\pgfPT@virgula7s+2/eConfign,[Rn]::7s+2\noexpand\pgfPT@virgula6d+2/eConfignl,11700/d,26.23/Cp,54/kT,fcc/ls,508.42/lsa,/lsb,/lsc,/lsca,1829/DiscY,18/DiscC,1/spectra,solido/cor}% -\def\pgfPT@data@xci{Pa/CS,231.04/Ar,231.04/Arstar,1/radio,---/R,169/Rcov,90\noexpand\pgfPT@espaco(4+)\noexpand\pgfPT@virgula78\noexpand\pgfPT@espaco(5+)/Rion,568/Ei,1.5/eneg,53.03/eaff,+5/O,1841/Tmelt,1568/TmeltC,4273/Tboil,4000/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep20\noexpand\pgfPTeDistsep9\noexpand\pgfPTeDistsep2/eDist,[Rn]::5f+2\noexpand\pgfPT@virgula6d+1\noexpand\pgfPT@virgula7s+2/eConfign,[Rn]::7s+2\noexpand\pgfPT@virgula5f+2\noexpand\pgfPT@virgula6d+1/eConfignl,15370/d,---/Cp,47/kT,tetr/ls,392.5/lsa,/lsb,323.8/lsc,0.82/lsca,1913/DiscY,10/DiscC,1/spectra,solido/cor}% -\def\pgfPT@data@xcii{U/CS,238.03/Ar,238.03/Arstar,1/radio,---/R,170/Rcov,76\noexpand\pgfPT@espaco(5+)/Rion,597.6/Ei,1.38/eneg,30.39/eaff,+4\noexpand\pgfPT@virgula+6/O,1405.3/Tmelt,1132.2/TmeltC,4404/Tboil,4131/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep21\noexpand\pgfPTeDistsep9\noexpand\pgfPTeDistsep2/eDist,[Rn]::5f+3\noexpand\pgfPT@virgula6d+1\noexpand\pgfPT@virgula7s+2/eConfign,[Rn]::7s+2\noexpand\pgfPT@virgula5f+3\noexpand\pgfPT@virgula6d+1/eConfignl,19100/d,27.665/Cp,27.5/kT,bcort/ls,285.37/lsa,586.95/lsb,495.48/lsc,1.74/lsca,1789/DiscY,8/DiscC,1/spectra,solido/cor}% -\def\pgfPT@data@xciii{Np/CS,[237]/Ar,/Arstar,1/radio,---/R,171/Rcov,110\noexpand\pgfPT@espaco(2+)\noexpand\pgfPT@virgula87\noexpand\pgfPT@espaco(4+)\noexpand\pgfPT@virgula71\noexpand\pgfPT@espaco(7+)/Rion,604.5/Ei,1.36/eneg,45.85/eaff,+5/O,917/Tmelt,644/TmeltC,4273/Tboil,4000/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep22\noexpand\pgfPTeDistsep9\noexpand\pgfPTeDistsep2/eDist,[Rn]::5f+4\noexpand\pgfPT@virgula6d+1\noexpand\pgfPT@virgula7s+2/eConfign,[Rn]::7s+2\noexpand\pgfPT@virgula5f+4\noexpand\pgfPT@virgula6d+1/eConfignl,20200/d,29.46/Cp,6.3/kT,bcort/ls,666.3/lsa,472.3/lsb,488.7/lsc,0.73/lsca,1940/DiscY,22/DiscC,1/spectra,sintetico/cor}% -\def\pgfPT@data@xciv{Pu/CS,[244]/Ar,/Arstar,1/radio,---/R,172/Rcov,100\noexpand\pgfPT@espaco(3+)\noexpand\pgfPT@virgula74\noexpand\pgfPT@espaco(5+)\noexpand\pgfPT@virgula71\noexpand\pgfPT@espaco(6+)/Rion,584.7/Ei,1.28/eneg,0/eaff,+4/O,912.5/Tmelt,639.4/TmeltC,3501/Tboil,3228/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep24\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep2/eDist,[Rn]::5f+6\noexpand\pgfPT@virgula7s+2/eConfign,[Rn]::7s+2\noexpand\pgfPT@virgula5f+6/eConfignl,19816/d,35.5/Cp,6.74/kT,mono/ls,618.3/lsa,482.2/lsb,1096.3/lsc,1.77/lsca,1940/DiscY,22/DiscC,1/spectra,sintetico/cor}% -\def\pgfPT@data@xcv{Am/CS,[243]/Ar,/Arstar,1/radio,---/R,166/Rcov,126\noexpand\pgfPT@espaco(2+)\noexpand\pgfPT@virgula97.5\noexpand\pgfPT@espaco(3+)/Rion,578/Ei,1.13/eneg,9.93/eaff,+3/O,1449/Tmelt,1176/TmeltC,2880/Tboil,2607/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep25\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep2/eDist,[Rn]::5f+7\noexpand\pgfPT@virgula7s+2/eConfign,[Rn]::7s+2\noexpand\pgfPT@virgula5f+7/eConfignl,12000/d,62.7/Cp,10/kT,hex/ls,346.81/lsa,/lsb,1124.1/lsc,3.24/lsca,1944/DiscY,22/DiscC,1/spectra,sintetico/cor}% -\def\pgfPT@data@xcvi{Cm/CS,[247]/Ar,/Arstar,1/radio,---/R,166/Rcov,97\noexpand\pgfPT@espaco(3+)/Rion,581/Ei,1.28/eneg,27.17/eaff,+3/O,1613/Tmelt,1340/TmeltC,3383/Tboil,3110/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep25\noexpand\pgfPTeDistsep9\noexpand\pgfPTeDistsep2/eDist,[Rn]::5f+7\noexpand\pgfPT@virgula6d+1\noexpand\pgfPT@virgula7s+2/eConfign,[Rn]::7s+2\noexpand\pgfPT@virgula5f+7\noexpand\pgfPT@virgula6d+1/eConfignl,13510/d,---/Cp,---/kT,hex/ls,349.6/lsa,/lsb,1133.1/lsc,3.24/lsca,1944/DiscY,22/DiscC,1/spectra,sintetico/cor}% -\def\pgfPT@data@xcvii{Bk/CS,[247]/Ar,/Arstar,1/radio,---/R,---/Rcov,96\noexpand\pgfPT@espaco(3+)/Rion,601/Ei,1.3/eneg,0/eaff,+3/O,1323/Tmelt,1050/TmeltC,---/Tboil,---/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep27\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep2/eDist,[Rn]::5f+9\noexpand\pgfPT@virgula7s+2/eConfign,[Rn]::7s+2\noexpand\pgfPT@virgula5f+9/eConfignl,14780/d,---/Cp,10/kT,hex/ls,341.6/lsa,/lsb,1106.9/lsc,3.24/lsca,1949/DiscY,22/DiscC,1/spectra,sintetico/cor}% -\def\pgfPT@data@xcviii{Cf/CS,[251]/Ar,/Arstar,1/radio,---/R,---/Rcov,95\noexpand\pgfPT@espaco(3+)\noexpand\pgfPT@virgula82.1\noexpand\pgfPT@espaco(4+)/Rion,608/Ei,1.3/eneg,0/eaff,+3/O,1173/Tmelt,900/TmeltC,---/Tboil,---/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep28\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep2/eDist,[Rn]::5f+10\noexpand\pgfPT@virgula7s+2/eConfign,[Rn]::7s+2\noexpand\pgfPT@virgula5f+10/eConfignl,15100/d,---/Cp,---/kT,hex/ls,338/lsa,/lsb,1102.5/lsc,3.26/lsca,1950/DiscY,22/DiscC,1/spectra,sintetico/cor}% -\def\pgfPT@data@xcix{Es/CS,[252]/Ar,/Arstar,1/radio,---/R,---/Rcov,83.5\noexpand\pgfPT@espaco(3+)/Rion,619/Ei,1.3/eneg,0/eaff,+3/O,1133/Tmelt,860/TmeltC,---/Tboil,---/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep29\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep2/eDist,[Rn]::5f+11\noexpand\pgfPT@virgula7s+2/eConfign,[Rn]::7s+2\noexpand\pgfPT@virgula5f+11/eConfignl,8840/d,---/Cp,---/kT,fcc/ls,575/lsa,/lsb,/lsc,/lsca,1952/DiscY,22/DiscC,1/spectra,sintetico/cor}% -\def\pgfPT@data@c{Fm/CS,[257]/Ar,/Arstar,1/radio,---/R,---/Rcov,---/Rion,627/Ei,1.3/eneg,33.96/eaff,+3/O,1800/Tmelt,1527/TmeltC,---/Tboil,---/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep30\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep2/eDist,[Rn]::5f+12\noexpand\pgfPT@virgula7s+2/eConfign,[Rn]::7s+2\noexpand\pgfPT@virgula5f+12/eConfignl,---/d,---/Cp,---/kT,---/ls,---/lsa,/lsb,/lsc,/lsca,1952/DiscY,22/DiscC,0/spectra,sintetico/cor}% -\def\pgfPT@data@ci{Md/CS,[258]/Ar,/Arstar,1/radio,---/R,---/Rcov,---/Rion,635/Ei,1.3/eneg,93.91/eaff,+3/O,1100/Tmelt,827/TmeltC,---/Tboil,---/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep31\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep2/eDist,[Rn]::5f+13\noexpand\pgfPT@virgula7s+2/eConfign,[Rn]::7s+2\noexpand\pgfPT@virgula5f+13/eConfignl,---/d,---/Cp,---/kT,---/ls,---/lsa,/lsb,/lsc,/lsca,1955/DiscY,22/DiscC,0/spectra,sintetico/cor}% -\def\pgfPT@data@cii{No/CS,[259]/Ar,/Arstar,1/radio,---/R,---/Rcov,---/Rion,642/Ei,1.3/eneg,0/eaff,+2/O,1100/Tmelt,827/TmeltC,---/Tboil,---/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep2/eDist,[Rn]::5f+14\noexpand\pgfPT@virgula7s+2/eConfign,[Rn]::7s+2\noexpand\pgfPT@virgula5f+14/eConfignl,---/d,---/Cp,---/kT,---/ls,---/lsa,/lsb,/lsc,/lsca,1966/DiscY,24/DiscC,0/spectra,sintetico/cor}% -\def\pgfPT@data@ciii{Lr/CS,[266]/Ar,/Arstar,1/radio,---/R,---/Rcov,---/Rion,470/Ei,1.3/eneg,0/eaff,+3/O,1900/Tmelt,1627/TmeltC,---/Tboil,---/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep3/eDist,[Rn]::5f+14\noexpand\pgfPT@virgula7s+2\noexpand\pgfPT@virgula7p+1/eConfign,[Rn]::7s+2\noexpand\pgfPT@virgula5f+14\noexpand\pgfPT@virgula7p+1/eConfignl,---/d,---/Cp,---/kT,---/ls,---/lsa,/lsb,/lsc,/lsca,1961/DiscY,22/DiscC,0/spectra,sintetico/cor}% -\def\pgfPT@data@civ{Rf/CS,[267]/Ar,/Arstar,1/radio,---/R,---/Rcov,---/Rion,-580/Ei,---/eneg,---/eaff,+4/O,---/Tmelt,---/TmeltC,---/Tboil,---/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep10\noexpand\pgfPTeDistsep2/eDist,[Rn]::5f+14\noexpand\pgfPT@virgula6d+2\noexpand\pgfPT@virgula7s+2/eConfign,[Rn]::7s+2\noexpand\pgfPT@virgula5f+14\noexpand\pgfPT@virgula6d+2/eConfignl,---/d,---/Cp,---/kT,---/ls,---/lsa,/lsb,/lsc,/lsca,1969/DiscY,16/DiscC,0/spectra,sintetico/cor}% -\def\pgfPT@data@cv{Db/CS,[268]/Ar,/Arstar,1/radio,---/R,---/Rcov,---/Rion,-665/Ei,---/eneg,---/eaff,+5/O,---/Tmelt,---/TmeltC,---/Tboil,---/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep11\noexpand\pgfPTeDistsep2/eDist,[Rn]::5f+14\noexpand\pgfPT@virgula6d+3\noexpand\pgfPT@virgula7s+2/eConfign,[Rn]::7s+2\noexpand\pgfPT@virgula5f+14\noexpand\pgfPT@virgula6d+3/eConfignl,---/d,---/Cp,---/kT,---/ls,---/lsa,/lsb,/lsc,/lsca,1970/DiscY,16/DiscC,0/spectra,sintetico/cor}% -\def\pgfPT@data@cvi{Sg/CS,[269]/Ar,/Arstar,1/radio,---/R,---/Rcov,---/Rion,-757/Ei,---/eneg,---/eaff,+6/O,---/Tmelt,---/TmeltC,---/Tboil,---/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep12\noexpand\pgfPTeDistsep2/eDist,[Rn]::5f+14\noexpand\pgfPT@virgula6d+4\noexpand\pgfPT@virgula7s+2/eConfign,[Rn]::7s+2\noexpand\pgfPT@virgula5f+14\noexpand\pgfPT@virgula6d+4/eConfignl,---/d,---/Cp,---/kT,---/ls,---/lsa,/lsb,/lsc,/lsca,1974/DiscY,22/DiscC,0/spectra,sintetico/cor}% -\def\pgfPT@data@cvii{Bh/CS,[270]/Ar,/Arstar,1/radio,---/R,---/Rcov,---/Rion,-740/Ei,---/eneg,---/eaff,+7/O,---/Tmelt,---/TmeltC,---/Tboil,---/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep13\noexpand\pgfPTeDistsep2/eDist,[Rn]::5f+14\noexpand\pgfPT@virgula6d+5\noexpand\pgfPT@virgula7s+2/eConfign,[Rn]::7s+2\noexpand\pgfPT@virgula5f+14\noexpand\pgfPT@virgula6d+5/eConfignl,---/d,---/Cp,---/kT,---/ls,---/lsa,/lsb,/lsc,/lsca,1981/DiscY,8/DiscC,0/spectra,sintetico/cor}% -\def\pgfPT@data@cviii{Hs/CS,[270]/Ar,/Arstar,1/radio,---/R,---/Rcov,---/Rion,-730/Ei,---/eneg,---/eaff,+8/O,---/Tmelt,---/TmeltC,---/Tboil,---/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep14\noexpand\pgfPTeDistsep2/eDist,[Rn]::5f+14\noexpand\pgfPT@virgula6d+6\noexpand\pgfPT@virgula7s+2/eConfign,[Rn]::7s+2\noexpand\pgfPT@virgula5f+14\noexpand\pgfPT@virgula6d+6/eConfignl,---/d,---/Cp,---/kT,---/ls,---/lsa,/lsb,/lsc,/lsca,1984/DiscY,8/DiscC,0/spectra,sintetico/cor}% -\def\pgfPT@data@cix{Mt/CS,[278]/Ar,/Arstar,1/radio,---/R,---/Rcov,---/Rion,-800/Ei,---/eneg,---/eaff,---/O,---/Tmelt,---/TmeltC,---/Tboil,---/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep15\noexpand\pgfPTeDistsep2/eDist,[Rn]::5f+14\noexpand\pgfPT@virgula6d+7\noexpand\pgfPT@virgula7s+2/eConfign,[Rn]::7s+2\noexpand\pgfPT@virgula5f+14\noexpand\pgfPT@virgula6d+7/eConfignl,---/d,---/Cp,---/kT,---/ls,---/lsa,/lsb,/lsc,/lsca,1982/DiscY,8/DiscC,0/spectra,sintetico/cor}% -\def\pgfPT@data@cx{Ds/CS,[281]/Ar,/Arstar,1/radio,---/R,---/Rcov,---/Rion,-960/Ei,---/eneg,---/eaff,---/O,---/Tmelt,---/TmeltC,---/Tboil,---/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep16\noexpand\pgfPTeDistsep2/eDist,[Rn]::5f+14\noexpand\pgfPT@virgula6d+8\noexpand\pgfPT@virgula7s+2/eConfign,[Rn]::7s+2\noexpand\pgfPT@virgula5f+14\noexpand\pgfPT@virgula6d+8/eConfignl,---/d,---/Cp,---/kT,---/ls,---/lsa,/lsb,/lsc,/lsca,1994/DiscY,8/DiscC,0/spectra,sintetico/cor}% -\def\pgfPT@data@cxi{Rg/CS,[282]/Ar,/Arstar,1/radio,---/R,---/Rcov,---/Rion,-1020/Ei,---/eneg,151/eaff,---/O,---/Tmelt,---/TmeltC,---/Tboil,---/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep17\noexpand\pgfPTeDistsep2/eDist,[Rn]::5f+14\noexpand\pgfPT@virgula6d+9\noexpand\pgfPT@virgula7s+2/eConfign,[Rn]::7s+2\noexpand\pgfPT@virgula5f+14\noexpand\pgfPT@virgula6d+9/eConfignl,---/d,---/Cp,---/kT,---/ls,---/lsa,/lsb,/lsc,/lsca,1994/DiscY,8/DiscC,0/spectra,sintetico/cor}% -\def\pgfPT@data@cxii{Cn/CS,[285]/Ar,/Arstar,1/radio,---/R,---/Rcov,---/Rion,-1155/Ei,---/eneg,---/eaff,+2/O,---/Tmelt,---/TmeltC,---/Tboil,---/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep2/eDist,[Rn]::5f+14\noexpand\pgfPT@virgula6d+10\noexpand\pgfPT@virgula7s+2/eConfign,[Rn]::7s+2\noexpand\pgfPT@virgula5f+14\noexpand\pgfPT@virgula6d+10/eConfignl,---/d,---/Cp,---/kT,---/ls,---/lsa,/lsb,/lsc,/lsca,1996/DiscY,8/DiscC,0/spectra,sintetico/cor}% -\def\pgfPT@data@cxiii{Nh/CS,[286]/Ar,/Arstar,1/radio,---/R,---/Rcov,---/Rion,-707.2/Ei,---/eneg,66.6/eaff,---/O,---/Tmelt,---/TmeltC,---/Tboil,---/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep3/eDist,[Rn]::5f+14\noexpand\pgfPT@virgula6d+10\noexpand\pgfPT@virgula7s+2\noexpand\pgfPT@virgula7p+1/eConfign,[Rn]::7s+2\noexpand\pgfPT@virgula5f+14\noexpand\pgfPT@virgula6d+10\noexpand\pgfPT@virgula7p+1/eConfignl,---/d,---/Cp,---/kT,---/ls,---/lsa,/lsb,/lsc,/lsca,2004/DiscY,16/DiscC,0/spectra,sintetico/cor}% -\def\pgfPT@data@cxiv{Fl/CS,[289]/Ar,/Arstar,1/radio,---/R,---/Rcov,---/Rion,-832.2/Ei,---/eneg,---/eaff,---/O,---/Tmelt,---/TmeltC,---/Tboil,---/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep4/eDist,[Rn]::5f+14\noexpand\pgfPT@virgula6d+10\noexpand\pgfPT@virgula7s+2\noexpand\pgfPT@virgula7p+2/eConfign,[Rn]::7s+2\noexpand\pgfPT@virgula5f+14\noexpand\pgfPT@virgula6d+10\noexpand\pgfPT@virgula7p+2/eConfignl,---/d,---/Cp,---/kT,---/ls,---/lsa,/lsb,/lsc,/lsca,1998/DiscY,15/DiscC,0/spectra,sintetico/cor}% -\def\pgfPT@data@cxv{Mc/CS,[290]/Ar,/Arstar,1/radio,---/R,---/Rcov,---/Rion,-538.3/Ei,---/eneg,35.3/eaff,---/O,---/Tmelt,---/TmeltC,---/Tboil,---/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep5/eDist,[Rn]::5f+14\noexpand\pgfPT@virgula6d+10\noexpand\pgfPT@virgula7s+2\noexpand\pgfPT@virgula7p+3/eConfign,[Rn]::7s+2\noexpand\pgfPT@virgula5f+14\noexpand\pgfPT@virgula6d+10\noexpand\pgfPT@virgula7p+3/eConfignl,---/d,---/Cp,---/kT,---/ls,---/lsa,/lsb,/lsc,/lsca,2003/DiscY,16/DiscC,0/spectra,sintetico/cor}% -\def\pgfPT@data@cxvi{Lv/CS,[293]/Ar,/Arstar,1/radio,---/R,---/Rcov,---/Rion,-663.9/Ei,---/eneg,74.9/eaff,---/O,---/Tmelt,---/TmeltC,---/Tboil,---/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep6/eDist,[Rn]::5f+14\noexpand\pgfPT@virgula6d+10\noexpand\pgfPT@virgula7s+2\noexpand\pgfPT@virgula7p+4/eConfign,[Rn]::7s+2\noexpand\pgfPT@virgula5f+14\noexpand\pgfPT@virgula6d+10\noexpand\pgfPT@virgula7p+4/eConfignl,---/d,---/Cp,---/kT,---/ls,---/lsa,/lsb,/lsc,/lsca,2000/DiscY,15/DiscC,0/spectra,sintetico/cor}% -\def\pgfPT@data@cxvii{Ts/CS,[294]/Ar,/Arstar,1/radio,---/R,---/Rcov,---/Rion,-736.9/Ei,---/eneg,165.9/eaff,---/O,---/Tmelt,---/TmeltC,---/Tboil,---/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep7/eDist,[Rn]::5f+14\noexpand\pgfPT@virgula6d+10\noexpand\pgfPT@virgula7s+2\noexpand\pgfPT@virgula7p+5/eConfign,[Rn]::7s+2\noexpand\pgfPT@virgula5f+14\noexpand\pgfPT@virgula6d+10\noexpand\pgfPT@virgula7p+5/eConfignl,---/d,---/Cp,---/kT,---/ls,---/lsa,/lsb,/lsc,/lsca,2009/DiscY,100/DiscC,0/spectra,sintetico/cor}% -\def\pgfPT@data@cxviii{Og/CS,[294]/Ar,/Arstar,1/radio,---/R,---/Rcov,---/Rion,-860.1/Ei,---/eneg,5.4/eaff,---/O,---/Tmelt,---/TmeltC,---/Tboil,---/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep8/eDist,[Rn]::5f+14\noexpand\pgfPT@virgula6d+10\noexpand\pgfPT@virgula7s+2\noexpand\pgfPT@virgula7p+6/eConfign,[Rn]::7s+2\noexpand\pgfPT@virgula5f+14\noexpand\pgfPT@virgula6d+10\noexpand\pgfPT@virgula7p+6/eConfignl,---/d,---/Cp,---/kT,---/ls,---/lsa,/lsb,/lsc,/lsca,2002/DiscY,16/DiscC,0/spectra,sintetico/cor}% +\def\pgfPT@data@i{H/CS,1.008/Ar,[1.0078\noexpand\pgfPT@virgula1.0082]/Arstar,0/radio,53/R,32/Rcov,139.9\noexpand\pgfPT@espaco(1-)/Rion,1312/Ei,2.2/eneg,72.77/eaff,\noexpand\pgfPT@pm1/O,\noexpand\pgfPT@pm I/ORoman,13.99/Tmelt,-259.16/TmeltC,20.271/Tboil,-252.879/TboilC,1/eDist,::1s+1/eConfign,::1s+1/eConfignl,0.08988/d,28.836/Cp,0.1805/kT,hex/ls,470/lsa,470/lsb,340/lsc,0.72/lsca,1766/DiscY,21/DiscC,1/spectra,gasoso/cor}% +\def\pgfPT@data@ii{He/CS,4.0026/Ar,4.0026/Arstar,0/radio,31/R,46/Rcov,---/Rion,2372.3/Ei,---/eneg,0/eaff,---/O,---/ORoman,---/Tmelt,---/TmeltC,4.222/Tboil,-268.928/TboilC,2/eDist,::1s+2/eConfign,::1s+2/eConfignl,0.1786/d,20.786/Cp,0.1513/kT,fcc/ls,424.4/lsa,/lsb,/lsc,/lsca,1895/DiscY,19/DiscC,1/spectra,gasoso/cor}% +\def\pgfPT@data@iii{Li/CS,6.94/Ar,[6.938\noexpand\pgfPT@virgula6.997] /Arstar,0/radio,167/R,133/Rcov,76\noexpand\pgfPT@espaco(1+)/Rion,520.2/Ei,0.98/eneg,59.63/eaff,+1/O,+I/ORoman,453.65/Tmelt,180.5/TmeltC,1603/Tboil,1330/TboilC,2\noexpand\pgfPTeDistsep1/eDist,[He]::2s+1/eConfign,[He]::2s+1/eConfignl,534/d,24.86/Cp,84.8/kT,bcc/ls,350.93/lsa,/lsb,/lsc,/lsca,1817/DiscY,18/DiscC,1/spectra,solido/cor}% +\def\pgfPT@data@iv{Be/CS,9.0122/Ar,9.0122/Arstar,0/radio,112/R,10/Rcov,45\noexpand\pgfPT@espaco(2+)/Rion,899.5/Ei,1.57/eneg,0/eaff,+2/O,+II/ORoman,1560/Tmelt,1287/TmeltC,2742/Tboil,2469/TboilC,2\noexpand\pgfPTeDistsep2/eDist,[He]::2s+2/eConfign,[He]::2s+2/eConfignl,1850/d,16.443/Cp,200/kT,hcp/ls,228.56/lsa,/lsb,358.32/lsc,1.57/lsca,1798/DiscY,5/DiscC,1/spectra,solido/cor}% +\def\pgfPT@data@v{B/CS,10.81/Ar,[10.806\noexpand\pgfPT@virgula10.821] /Arstar,0/radio,87/R,85/Rcov,27\noexpand\pgfPT@espaco(3+)/Rion,800.6/Ei,2.04/eneg,26.99/eaff,+3/O,+III/ORoman,2349/Tmelt,2076/TmeltC,4200/Tboil,3927/TboilC,2\noexpand\pgfPTeDistsep3/eDist,[He]::2s+2\noexpand\pgfPT@virgula2p+1/eConfign,[He]::2s+2\noexpand\pgfPT@virgula2p+1/eConfignl,2340/d,11.087/Cp,27.4/kT,rho/ls,505.66/lsa,/lsb,/lsc,/lsca,1808/DiscY,7/DiscC,1/spectra,solido/cor}% +\def\pgfPT@data@vi{C/CS,12.011/Ar,[12.009\noexpand\pgfPT@virgula12.012]/Arstar,0/radio,67/R,75/Rcov,16\noexpand\pgfPT@espaco(4+)/Rion,1086.5/Ei,2.55/eneg,121.78/eaff,0\noexpand\pgfPT@virgula\noexpand\pgfPT@pm1\noexpand\pgfPT@virgula\noexpand\pgfPT@pm2\noexpand\pgfPT@virgula\noexpand\pgfPT@pm3\noexpand\pgfPT@virgula\noexpand\pgfPT@pm4/O,0\noexpand\pgfPT@virgula\noexpand\pgfPT@pm I\noexpand\pgfPT@virgula\noexpand\pgfPT@pm II\noexpand\pgfPT@virgula\noexpand\pgfPT@pm III\noexpand\pgfPT@virgula\noexpand\pgfPT@pm IV/ORoman,3823/Tmelt,3550/TmeltC,4300/Tboil,4027/TboilC,2\noexpand\pgfPTeDistsep4/eDist,[He]::2s+2\noexpand\pgfPT@virgula2p+2/eConfign,[He]::2s+2\noexpand\pgfPT@virgula2p+2/eConfignl,2267/d,8.517/Cp,140/kT,hex/ls,246.12/lsa,/lsb,670.79/lsc,2.73/lsca,3750\noexpand\pgfPT@scaletxt{\pgfPTDiscYBCscale}{\noexpand\pgfPT@espaco\noexpand\pgfPT@BClabel}/DiscY,12/DiscC,1/spectra,solido/cor}% +\def\pgfPT@data@vii{N/CS,14.007/Ar,[14.006\noexpand\pgfPT@virgula14.008]/Arstar,0/radio,56/R,71/Rcov,146\noexpand\pgfPT@espaco(3-)\noexpand\pgfPT@virgula16\noexpand\pgfPT@espaco(3+)\noexpand\pgfPT@virgula13\noexpand\pgfPT@espaco(5+)/Rion,1402.3/Ei,3.04/eneg,0/eaff,\noexpand\pgfPT@pm3\noexpand\pgfPT@virgula+4\noexpand\pgfPT@virgula+5/O,\noexpand\pgfPT@pm III\noexpand\pgfPT@virgula+IV\noexpand\pgfPT@virgula+V/ORoman,63.15/Tmelt,-210/TmeltC,77.355/Tboil,-195.795/TboilC,2\noexpand\pgfPTeDistsep5/eDist,[He]::2s+2\noexpand\pgfPT@virgula2p+3/eConfign,[He]::2s+2\noexpand\pgfPT@virgula2p+3/eConfignl,1.251/d,29.124/Cp,0.02583/kT,hex/ls,386.1/lsa,386.1/lsb,626.5/lsc,1.62/lsca,1772/DiscY,21/DiscC,1/spectra,gasoso/cor}% +\def\pgfPT@data@viii{O/CS,15.999/Ar,[15.999\noexpand\pgfPT@virgula16.000]/Arstar,0/radio,48/R,63/Rcov,140\noexpand\pgfPT@espaco(2-)/Rion,1313.9/Ei,3.44/eneg,140.98/eaff,--2/O,--II/ORoman,54.36/Tmelt,-218.79/TmeltC,90.188/Tboil,-182.962/TboilC,2\noexpand\pgfPTeDistsep6/eDist,[He]::2s+2\noexpand\pgfPT@virgula2p+4/eConfign,[He]::2s+2\noexpand\pgfPT@virgula2p+4/eConfignl,1.429/d,29.378/Cp,0.02658/kT,mono/ls,540.3/lsa,342.9/lsb,508.6/lsc,0.94/lsca,1771/DiscY,19/DiscC,1/spectra,gasoso/cor}% +\def\pgfPT@data@ix{F/CS,18.998/Ar,18.998/Arstar,0/radio,42/R,64/Rcov,133\noexpand\pgfPT@espaco(1-)/Rion,1681/Ei,3.98/eneg,328.16/eaff,--1/O,--I/ORoman,53.48/Tmelt,-219.67/TmeltC,85.04/Tboil,-188.11/TboilC,2\noexpand\pgfPTeDistsep7/eDist,[He]::2s+2\noexpand\pgfPT@virgula2p+5/eConfign,[He]::2s+2\noexpand\pgfPT@virgula2p+5/eConfignl,1.7/d,31.304/Cp,0.0277/kT,mono/ls,550/lsa,328/lsb,728/lsc,1.32/lsca,1886/DiscY,5/DiscC,1/spectra,gasoso/cor}% +\def\pgfPT@data@x{Ne/CS,20.18/Ar,20.18/Arstar,0/radio,38/R,67/Rcov,---/Rion,2080.7/Ei,---/eneg,0/eaff,---/O,---/ORoman,24.56/Tmelt,-248.59/TmeltC,27.104/Tboil,-246.046/TboilC,2\noexpand\pgfPTeDistsep8/eDist,[He]::2s+2\noexpand\pgfPT@virgula2p+6/eConfign,[He]::2s+2\noexpand\pgfPT@virgula2p+6/eConfignl,0.9002/d,20.786/Cp,0.0491/kT,fcc/ls,442.9/lsa,/lsb,/lsc,/lsca,1898/DiscY,21/DiscC,1/spectra,gasoso/cor}% +\def\pgfPT@data@xi{Na/CS,22.99/Ar,22.99/Arstar,0/radio,190/R,155/Rcov,102\noexpand\pgfPT@espaco(1+)/Rion,495.8/Ei,0.93/eneg,52.87/eaff,+1/O,+I/ORoman,370.944/Tmelt,97.794/TmeltC,1156.09/Tboil,882.94/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep1/eDist,[Ne]::3s+1/eConfign,[Ne]::3s+1/eConfignl,968/d,28.23/Cp,142/kT,bcc/ls,429.06/lsa,/lsb,/lsc,/lsca,1807/DiscY,21/DiscC,1/spectra,solido/cor}% +\def\pgfPT@data@xii{Mg/CS,24.305/Ar,[24.304\noexpand\pgfPT@virgula24.307] /Arstar,0/radio,145/R,139/Rcov,72\noexpand\pgfPT@espaco(2+)/Rion,737.7/Ei,1.31/eneg,0/eaff,+2/O,+II/ORoman,923/Tmelt,650/TmeltC,1363/Tboil,1090/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep2/eDist,[Ne]::3s+2/eConfign,[Ne]::3s+2/eConfignl,1738/d,24.869/Cp,156/kT,hcp/ls,320.94/lsa,/lsb,521.05/lsc,1.62/lsca,1755/DiscY,21/DiscC,1/spectra,solido/cor}% +\def\pgfPT@data@xiii{Al/CS,26.982/Ar,26.982/Arstar,0/radio,118/R,126/Rcov,53.5\noexpand\pgfPT@espaco(3+)/Rion,577.5/Ei,1.61/eneg,41.76/eaff,+3/O,+III/ORoman,933.47/Tmelt,660.32/TmeltC,2743/Tboil,2470/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep3/eDist,[Ne]::3s+2\noexpand\pgfPT@virgula3p+1/eConfign,[Ne]::3s+2\noexpand\pgfPT@virgula3p+1/eConfignl,2700/d,24.2/Cp,237/kT,fcc/ls,404.95/lsa,/lsb,/lsc,/lsca,1824/DiscY,2/DiscC,1/spectra,solido/cor}% +\def\pgfPT@data@xiv{Si/CS,28.085/Ar,[28.084\noexpand\pgfPT@virgula28.086]/Arstar,0/radio,111/R,116/Rcov,40\noexpand\pgfPT@espaco(4+)/Rion,786.5/Ei,1.9/eneg,134.07/eaff,\noexpand\pgfPT@pm4/O,\noexpand\pgfPT@pm IV/ORoman,1687/Tmelt,1414/TmeltC,3538/Tboil,3265/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep4/eDist,[Ne]::3s+2\noexpand\pgfPT@virgula3p+2/eConfign,[Ne]::3s+2\noexpand\pgfPT@virgula3p+2/eConfignl,2330/d,19.789/Cp,149/kT,dia/ls,543.095/lsa,/lsb,/lsc,/lsca,1823/DiscY,18/DiscC,1/spectra,solido/cor}% +\def\pgfPT@data@xv{P/CS,30.974/Ar,30.974/Arstar,0/radio,98/R,111/Rcov,212\noexpand\pgfPT@espaco(3-)\noexpand\pgfPT@virgula44\noexpand\pgfPT@espaco(3+)\noexpand\pgfPT@virgula38\noexpand\pgfPT@espaco(5+)/Rion,1011.8/Ei,2.19/eneg,72.04/eaff,\noexpand\pgfPT@pm3\noexpand\pgfPT@virgula+5/O,\noexpand\pgfPT@pm III\noexpand\pgfPT@virgula+V/ORoman,317.3/Tmelt,44.15/TmeltC,550/Tboil,277/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep5/eDist,[Ne]::3s+2\noexpand\pgfPT@virgula3p+3/eConfign,[Ne]::3s+2\noexpand\pgfPT@virgula3p+3/eConfignl,1823/d,23.824/Cp,0.236/kT,tric/ls,1145/lsa,550.3/lsb,1126.1/lsc,0.98/lsca,1669/DiscY,8/DiscC,1/spectra,solido/cor}% +\def\pgfPT@data@xvi{S/CS,32.06/Ar,[32.059\noexpand\pgfPT@virgula32.076]/Arstar,0/radio,88/R,103/Rcov,184\noexpand\pgfPT@espaco(2-)\noexpand\pgfPT@virgula37\noexpand\pgfPT@espaco(4+)\noexpand\pgfPT@virgula29\noexpand\pgfPT@espaco(6+)/Rion,999.6/Ei,2.58/eneg,200.41/eaff,\noexpand\pgfPT@pm2\noexpand\pgfPT@virgula+4\noexpand\pgfPT@virgula+6/O,\noexpand\pgfPT@pm II\noexpand\pgfPT@virgula+IV\noexpand\pgfPT@virgula+VI/ORoman,388.36/Tmelt,115.21/TmeltC,717.8/Tboil,444.6/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep6/eDist,[Ne]::3s+2\noexpand\pgfPT@virgula3p+4/eConfign,[Ne]::3s+2\noexpand\pgfPT@virgula3p+4/eConfignl,1960/d,22.75/Cp,0.205/kT,fcort/ls,1046.5/lsa,1286.6/lsb,2448.6/lsc,2.34/lsca,500\noexpand\pgfPT@scaletxt{\pgfPTDiscYBCscale}{\noexpand\pgfPT@espaco\noexpand\pgfPT@BClabel}/DiscY,12/DiscC,1/spectra,solido/cor}% +\def\pgfPT@data@xvii{Cl/CS,35.45/Ar,[35.446\noexpand\pgfPT@virgula35.457]/Arstar,0/radio,79/R,99/Rcov,181\noexpand\pgfPT@espaco(1-)\noexpand\pgfPT@virgula12\noexpand\pgfPT@espaco(5+)\noexpand\pgfPT@virgula27\noexpand\pgfPT@espaco(7+)/Rion,1251.2/Ei,3.16/eneg,348.58/eaff,\noexpand\pgfPT@pm1\noexpand\pgfPT@virgula+3\noexpand\pgfPT@virgula+5\noexpand\pgfPT@virgula+7/O,\noexpand\pgfPT@pm I\noexpand\pgfPT@virgula+III\noexpand\pgfPT@virgula+V\noexpand\pgfPT@virgula+VII/ORoman,171.6/Tmelt,-101.5/TmeltC,239.11/Tboil,-34.04/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep7/eDist,[Ne]::3s+2\noexpand\pgfPT@virgula3p+5/eConfign,[Ne]::3s+2\noexpand\pgfPT@virgula3p+5/eConfignl,3.2/d,33.949/Cp,0.0089/kT,bcort/ls,622.35/lsa,445.61/lsb,817.85/lsc,1.31/lsca,1774/DiscY,18/DiscC,1/spectra,gasoso/cor}% +\def\pgfPT@data@xviii{Ar/CS,39.95/Ar,[39.792\noexpand\pgfPT@virgula39.963]/Arstar,0/radio,71/R,96/Rcov,---/Rion,1520.6/Ei,---/eneg,0/eaff,0/O,0/ORoman,83.81/Tmelt,-189.34/TmeltC,87.302/Tboil,-185.848/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep8/eDist,[Ne]::3s+2\noexpand\pgfPT@virgula3p+6/eConfign,[Ne]::3s+2\noexpand\pgfPT@virgula3p+6/eConfignl,1.784/d,20.786/Cp,0.01772/kT,fcc/ls,525.6/lsa,/lsb,/lsc,/lsca,1894/DiscY,21/DiscC,1/spectra,gasoso/cor}% +\def\pgfPT@data@xix{K/CS,39.098/Ar,39.098/Arstar,0/radio,243/R,196/Rcov,138\noexpand\pgfPT@espaco(1+)/Rion,418.8/Ei,0.82/eneg,48.38/eaff,+1/O,+I/ORoman,336.7/Tmelt,63.5/TmeltC,1032/Tboil,759/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep1/eDist,[Ar]::4s+1/eConfign,[Ar]::4s+1/eConfignl,890/d,29.6/Cp,102.5/kT,bcc/ls,532.8/lsa,/lsb,/lsc,/lsca,1807/DiscY,21/DiscC,1/spectra,solido/cor}% +\def\pgfPT@data@xx{Ca/CS,40.078/Ar,40.078(4) /Arstar,0/radio,194/R,171/Rcov,100\noexpand\pgfPT@espaco(2+)/Rion,589.8/Ei,1/eneg,2.37/eaff,+2/O,+II/ORoman,1115/Tmelt,842/TmeltC,1757/Tboil,1484/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep2/eDist,[Ar]::4s+2/eConfign,[Ar]::4s+2/eConfignl,1550/d,25.929/Cp,201/kT,fcc/ls,558.84/lsa,/lsb,/lsc,/lsca,1808/DiscY,21/DiscC,1/spectra,solido/cor}% +\def\pgfPT@data@xxi{Sc/CS,44.956/Ar,44.956/Arstar,0/radio,184/R,148/Rcov,74.5\noexpand\pgfPT@espaco(3+)/Rion,633.1/Ei,1.36/eneg,18/eaff,+3/O,+III/ORoman,1814/Tmelt,1541/TmeltC,3109/Tboil,2836/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep9\noexpand\pgfPTeDistsep2/eDist,[Ar]::3d+1\noexpand\pgfPT@virgula4s+2/eConfign,[Ar]::4s+2\noexpand\pgfPT@virgula3d+1/eConfignl,2985/d,25.52/Cp,15.8/kT,hcp/ls,330.9/lsa,/lsb,527.33/lsc,1.59/lsca,1879/DiscY,18/DiscC,1/spectra,solido/cor}% +\def\pgfPT@data@xxii{Ti/CS,47.867/Ar,47.867/Arstar,0/radio,176/R,136/Rcov,86\noexpand\pgfPT@espaco(2+)\noexpand\pgfPT@virgula67\noexpand\pgfPT@espaco(3+)\noexpand\pgfPT@virgula60.5\noexpand\pgfPT@espaco(4+)/Rion,658.8/Ei,1.54/eneg,7.29/eaff,+2\noexpand\pgfPT@virgula+3\noexpand\pgfPT@virgula+4/O,+II\noexpand\pgfPT@virgula+III\noexpand\pgfPT@virgula+IV/ORoman,1941/Tmelt,1668/TmeltC,3560/Tboil,3287/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep10\noexpand\pgfPTeDistsep2/eDist,[Ar]::3d+2\noexpand\pgfPT@virgula4s+2/eConfign,[Ar]::4s+2\noexpand\pgfPT@virgula3d+2/eConfignl,4506/d,25.06/Cp,21.9/kT,hcp/ls,295.03/lsa,/lsb,468.31/lsc,1.59/lsca,1791/DiscY,21/DiscC,1/spectra,solido/cor}% +\def\pgfPT@data@xxiii{V/CS,50.942/Ar,50.942/Arstar,0/radio,171/R,134/Rcov,79\noexpand\pgfPT@espaco(2+)\noexpand\pgfPT@virgula64\noexpand\pgfPT@espaco(3+)\noexpand\pgfPT@virgula58\noexpand\pgfPT@espaco(4+)\noexpand\pgfPT@virgula54\noexpand\pgfPT@espaco(5+)/Rion,650.9/Ei,1.63/eneg,50.91/eaff,+2\noexpand\pgfPT@virgula+3\noexpand\pgfPT@virgula+4\noexpand\pgfPT@virgula+5/O,+II\noexpand\pgfPT@virgula+III\noexpand\pgfPT@virgula+IV\noexpand\pgfPT@virgula+V/ORoman,2183/Tmelt,1910/TmeltC,3680/Tboil,3407/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep11\noexpand\pgfPTeDistsep2/eDist,[Ar]::3d+3\noexpand\pgfPT@virgula4s+2/eConfign,[Ar]::4s+2\noexpand\pgfPT@virgula3d+3/eConfignl,6110/d,24.89/Cp,30.7/kT,bcc/ls,302.31/lsa,/lsb,/lsc,/lsca,1830/DiscY,23/DiscC,1/spectra,solido/cor}% +\def\pgfPT@data@xxiv{Cr/CS,51.996/Ar,51.996/Arstar,0/radio,166/R,122/Rcov,73\noexpand\pgfPT@espaco(2+)\noexpand\pgfPT@virgula61.5\noexpand\pgfPT@espaco(3+)\noexpand\pgfPT@virgula44\noexpand\pgfPT@espaco(6+)/Rion,652.9/Ei,1.66/eneg,65.21/eaff,+2\noexpand\pgfPT@virgula+3\noexpand\pgfPT@virgula+6/O,+II\noexpand\pgfPT@virgula+III\noexpand\pgfPT@virgula+VI/ORoman,2180/Tmelt,1907/TmeltC,2755/Tboil,2482/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep13\noexpand\pgfPTeDistsep1/eDist,[Ar]::3d+5\noexpand\pgfPT@virgula4s+1/eConfign,[Ar]::4s+1\noexpand\pgfPT@virgula3d+5/eConfignl,7150/d,23.35/Cp,93.9/kT,bcc/ls,288.46/lsa,/lsb,/lsc,/lsca,1797/DiscY,5/DiscC,1/spectra,solido/cor}% +\def\pgfPT@data@xxv{Mn/CS,54.938/Ar,54.938/Arstar,0/radio,161/R,119/Rcov,67\noexpand\pgfPT@espaco(2+)\noexpand\pgfPT@virgula58\noexpand\pgfPT@espaco(3+)\noexpand\pgfPT@virgula53\noexpand\pgfPT@espaco(4+)\noexpand\pgfPT@virgula25.5\noexpand\pgfPT@espaco(6+)\noexpand\pgfPT@virgula46\noexpand\pgfPT@espaco(7+)/Rion,717.3/Ei,1.55/eneg,0/eaff,+2\noexpand\pgfPT@virgula+3\noexpand\pgfPT@virgula+4\noexpand\pgfPT@virgula+6\noexpand\pgfPT@virgula+7/O,+II\noexpand\pgfPT@virgula+III\noexpand\pgfPT@virgula+IV\noexpand\pgfPT@virgula+VI\noexpand\pgfPT@virgula+VII/ORoman,1519/Tmelt,1246/TmeltC,2334/Tboil,2061/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep13\noexpand\pgfPTeDistsep2/eDist,[Ar]::3d+5\noexpand\pgfPT@virgula4s+2/eConfign,[Ar]::4s+2\noexpand\pgfPT@virgula3d+5/eConfignl,7210/d,26.32/Cp,7.81/kT,bcc/ls,891.39/lsa,/lsb,/lsc,/lsca,1774/DiscY,18/DiscC,1/spectra,solido/cor}% +\def\pgfPT@data@xxvi{Fe/CS,55.845/Ar,55.845(2)/Arstar,0/radio,156/R,116/Rcov,61\noexpand\pgfPT@espaco(2+)\noexpand\pgfPT@virgula55\noexpand\pgfPT@espaco(3+)/Rion,762.5/Ei,1.83/eneg,14.79/eaff,+2\noexpand\pgfPT@virgula+3/O,+II\noexpand\pgfPT@virgula+III/ORoman,1811/Tmelt,1538/TmeltC,3134/Tboil,2861/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep14\noexpand\pgfPTeDistsep2/eDist,[Ar]::3d+6\noexpand\pgfPT@virgula4s+2/eConfign,[Ar]::4s+2\noexpand\pgfPT@virgula3d+6/eConfignl,7860/d,25.1/Cp,80.4/kT,bcc/ls,286.64/lsa,/lsb,/lsc,/lsca,2000\noexpand\pgfPT@scaletxt{\pgfPTDiscYBCscale}{\noexpand\pgfPT@espaco\noexpand\pgfPT@BClabel}/DiscY,3/DiscC,1/spectra,solido/cor}% +\def\pgfPT@data@xxvii{Co/CS,58.933/Ar,58.933/Arstar,0/radio,152/R,111/Rcov,65\noexpand\pgfPT@espaco(2+)\noexpand\pgfPT@virgula54.5\noexpand\pgfPT@espaco(3+)/Rion,760.4/Ei,1.88/eneg,63.9/eaff,+2\noexpand\pgfPT@virgula+3/O,+II\noexpand\pgfPT@virgula+III/ORoman,1768/Tmelt,1495/TmeltC,3200/Tboil,2927/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep15\noexpand\pgfPTeDistsep2/eDist,[Ar]::3d+7\noexpand\pgfPT@virgula4s+2/eConfign,[Ar]::4s+2\noexpand\pgfPT@virgula3d+7/eConfignl,8900/d,24.81/Cp,100/kT,hcp/ls,250.71/lsa,/lsb,406.95/lsc,1.62/lsca,1735/DiscY,18/DiscC,1/spectra,solido/cor}% +\def\pgfPT@data@xxviii{Ni/CS,58.693/Ar,58.693/Arstar,0/radio,149/R,110/Rcov,69\noexpand\pgfPT@espaco(2+)/Rion,737.1/Ei,1.91/eneg,111.65/eaff,+2/O,+II/ORoman,1728/Tmelt,1455/TmeltC,3003/Tboil,2730/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep16\noexpand\pgfPTeDistsep2/eDist,[Ar]::3d+8\noexpand\pgfPT@virgula4s+2/eConfign,[Ar]::4s+2\noexpand\pgfPT@virgula3d+8/eConfignl,8908/d,26.07/Cp,90.9/kT,fcc/ls,352.4/lsa,/lsb,/lsc,/lsca,1751/DiscY,18/DiscC,1/spectra,solido/cor}% +\def\pgfPT@data@xxix{Cu/CS,63.546/Ar,63.546(3)/Arstar,0/radio,145/R,112/Rcov,77\noexpand\pgfPT@espaco(1+)\noexpand\pgfPT@virgula73\noexpand\pgfPT@espaco(2+)/Rion,745.5/Ei,1.9/eneg,119.24/eaff,+1\noexpand\pgfPT@virgula+2/O,+I\noexpand\pgfPT@virgula+II/ORoman,1357.77/Tmelt,1084.62/TmeltC,2835/Tboil,2562/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep1/eDist,[Ar]::3d+10\noexpand\pgfPT@virgula4s+1/eConfign,[Ar]::4s+1\noexpand\pgfPT@virgula3d+10/eConfignl,8960/d,24.44/Cp,401/kT,fcc/ls,361.47/lsa,/lsb,/lsc,/lsca,8000\noexpand\pgfPT@scaletxt{\pgfPTDiscYBCscale}{\noexpand\pgfPT@espaco\noexpand\pgfPT@BClabel}/DiscY,12/DiscC,1/spectra,solido/cor}% +\def\pgfPT@data@xxx{Zn/CS,65.38/Ar,65.38(2)/Arstar,0/radio,142/R,118/Rcov,74\noexpand\pgfPT@espaco(2+)/Rion,906.4/Ei,1.65/eneg,0/eaff,+2/O,+II/ORoman,692.68/Tmelt,419.53/TmeltC,1180/Tboil,907/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep2/eDist,[Ar]::3d+10\noexpand\pgfPT@virgula4s+2/eConfign,[Ar]::4s+2\noexpand\pgfPT@virgula3d+10/eConfignl,7140/d,25.39/Cp,116/kT,hcp/ls,266.49/lsa,/lsb,494.68/lsc,1.86/lsca,1746/DiscY,8/DiscC,1/spectra,solido/cor}% +\def\pgfPT@data@xxxi{Ga/CS,69.723/Ar,69.723/Arstar,0/radio,136/R,124/Rcov,62\noexpand\pgfPT@espaco(3+)/Rion,578.8/Ei,1.81/eneg,29.06/eaff,+3/O,+III/ORoman,302.9146/Tmelt,29.7646/TmeltC,2673/Tboil,2400/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep3/eDist,[Ar]::3d+10\noexpand\pgfPT@virgula4s+2\noexpand\pgfPT@virgula4p+1/eConfign,[Ar]::4s+2\noexpand\pgfPT@virgula3d+10\noexpand\pgfPT@virgula4p+1/eConfignl,5910/d,25.86/Cp,40.6/kT,bcort/ls,452.58/lsa,451.86/lsb,765.7/lsc,1.69/lsca,1875/DiscY,5/DiscC,1/spectra,solido/cor}% +\def\pgfPT@data@xxxii{Ge/CS,72.63/Ar,72.630(8)/Arstar,0/radio,125/R,121/Rcov,73\noexpand\pgfPT@espaco(2+)\noexpand\pgfPT@virgula53\noexpand\pgfPT@espaco(4+)/Rion,762/Ei,2.01/eneg,118.94/eaff,+2\noexpand\pgfPT@virgula\noexpand\pgfPT@pm4/O,+II\noexpand\pgfPT@virgula\noexpand\pgfPT@pm IV/ORoman,1211.4/Tmelt,938.25/TmeltC,3106/Tboil,2833/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep4/eDist,[Ar]::3d+10\noexpand\pgfPT@virgula4s+2\noexpand\pgfPT@virgula4p+2/eConfign,[Ar]::4s+2\noexpand\pgfPT@virgula3d+10\noexpand\pgfPT@virgula4p+2/eConfignl,5323/d,23.222/Cp,60.2/kT,dia/ls,565.791/lsa,/lsb,/lsc,/lsca,1886/DiscY,8/DiscC,1/spectra,solido/cor}% +\def\pgfPT@data@xxxiii{As/CS,74.922/Ar,74.922/Arstar,0/radio,114/R,121/Rcov,58\noexpand\pgfPT@espaco(3+)\noexpand\pgfPT@virgula46\noexpand\pgfPT@espaco(5+)/Rion,947/Ei,2.18/eneg,77.65/eaff,\noexpand\pgfPT@pm3\noexpand\pgfPT@virgula+5/O,\noexpand\pgfPT@pm III\noexpand\pgfPT@virgula+V/ORoman,1090/Tmelt,817/TmeltC,887/Tboil,614/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep5/eDist,[Ar]::3d+10\noexpand\pgfPT@virgula4s+2\noexpand\pgfPT@virgula4p+3/eConfign,[Ar]::4s+2\noexpand\pgfPT@virgula3d+10\noexpand\pgfPT@virgula4p+3/eConfignl,5727/d,24.64/Cp,50.2/kT,rho/ls,375.98/lsa,375.98/lsb,1054.75/lsc,2.81/lsca,1250/DiscY,12/DiscC,1/spectra,solido/cor}% +\def\pgfPT@data@xxxiv{Se/CS,78.971/Ar,78.971(8)/Arstar,0/radio,103/R,116/Rcov,198\noexpand\pgfPT@espaco(2-)\noexpand\pgfPT@virgula50\noexpand\pgfPT@espaco(4+)\noexpand\pgfPT@virgula42\noexpand\pgfPT@espaco(6+)/Rion,941/Ei,2.55/eneg,194.96/eaff,\noexpand\pgfPT@pm2\noexpand\pgfPT@virgula+4\noexpand\pgfPT@virgula+6/O,\noexpand\pgfPT@pm II\noexpand\pgfPT@virgula+IV\noexpand\pgfPT@virgula+VI/ORoman,494/Tmelt,221/TmeltC,958/Tboil,685/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep6/eDist,[Ar]::3d+10\noexpand\pgfPT@virgula4s+2\noexpand\pgfPT@virgula4p+4/eConfign,[Ar]::4s+2\noexpand\pgfPT@virgula3d+10\noexpand\pgfPT@virgula4p+4/eConfignl,4810/d,25.363/Cp,0.519/kT,mono/ls,905.4/lsa,908.3/lsb,1160.1/lsc,1.28/lsca,1817/DiscY,18/DiscC,1/spectra,solido/cor}% +\def\pgfPT@data@xxxv{Br/CS,79.904/Ar,[79.901\noexpand\pgfPT@virgula79.907]/Arstar,0/radio,94/R,114/Rcov,196\noexpand\pgfPT@espaco(1-)\noexpand\pgfPT@virgula59\noexpand\pgfPT@espaco(3+)\noexpand\pgfPT@virgula31\noexpand\pgfPT@espaco(5+)/Rion,1139.9/Ei,2.96/eneg,324.54/eaff,\noexpand\pgfPT@pm1\noexpand\pgfPT@virgula+3\noexpand\pgfPT@virgula+5/O,\noexpand\pgfPT@pm I\noexpand\pgfPT@virgula+III\noexpand\pgfPT@virgula+V/ORoman,265.8/Tmelt,-7.3/TmeltC,332/Tboil,58.8/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep7/eDist,[Ar]::3d+10\noexpand\pgfPT@virgula4s+2\noexpand\pgfPT@virgula4p+5/eConfign,[Ar]::4s+2\noexpand\pgfPT@virgula3d+10\noexpand\pgfPT@virgula4p+5/eConfignl,3102.8/d,75.69/Cp,0.122/kT,bcort/ls,672.65/lsa,464.51/lsb,870.23/lsc,1.29/lsca,1825/DiscY,5/DiscC,1/spectra,liquido/cor}% +\def\pgfPT@data@xxxvi{Kr/CS,83.798/Ar,83.798(2)/Arstar,0/radio,88/R,117/Rcov,---/Rion,1350.8/Ei,3/eneg,0/eaff,0/O,0/ORoman,115.78/Tmelt,-157.37/TmeltC,119.735/Tboil,-153.415/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep8/eDist,[Ar]::3d+10\noexpand\pgfPT@virgula4s+2\noexpand\pgfPT@virgula4p+6/eConfign,[Ar]::4s+2\noexpand\pgfPT@virgula3d+10\noexpand\pgfPT@virgula4p+6/eConfignl,3.749/d,20.786/Cp,0.00943/kT,fcc/ls,570.6/lsa,/lsb,/lsc,/lsca,1898/DiscY,21/DiscC,1/spectra,gasoso/cor}% +\def\pgfPT@data@xxxvii{Rb/CS,85.468/Ar,85.468/Arstar,0/radio,265/R,210/Rcov,152\noexpand\pgfPT@espaco(1+)/Rion,403/Ei,0.82/eneg,46.88/eaff,+1/O,+I/ORoman,312.45/Tmelt,39.3/TmeltC,961/Tboil,688/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep1/eDist,[Kr]::5s+1/eConfign,[Kr]::5s+1/eConfignl,1532/d,31.06/Cp,58.2/kT,bcc/ls,558.5/lsa,/lsb,/lsc,/lsca,1861/DiscY,8/DiscC,1/spectra,solido/cor}% +\def\pgfPT@data@xxxviii{Sr/CS,87.62/Ar,87.62/Arstar,0/radio,219/R,185/Rcov,118\noexpand\pgfPT@espaco(2+)/Rion,549.5/Ei,0.95/eneg,5.02/eaff,+2/O,+II/ORoman,1050/Tmelt,777/TmeltC,1650/Tboil,1382/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep2/eDist,[Kr]::5s+2/eConfign,[Kr]::5s+2/eConfignl,2640/d,26.4/Cp,35.4/kT,fcc/ls,608.49/lsa,/lsb,/lsc,/lsca,1787/DiscY,21/DiscC,1/spectra,solido/cor}% +\def\pgfPT@data@xxxix{Y/CS,88.906/Ar,88.906/Arstar,0/radio,212/R,163/Rcov,90\noexpand\pgfPT@espaco(3+)/Rion,600/Ei,1.22/eneg,29.6/eaff,+3/O,+III/ORoman,1799/Tmelt,1526/TmeltC,3203/Tboil,2930/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep9\noexpand\pgfPTeDistsep2/eDist,[Kr]::4d+1\noexpand\pgfPT@virgula5s+2/eConfign,[Kr]::5s+2\noexpand\pgfPT@virgula4d+1/eConfignl,4472/d,26.53/Cp,17.2/kT,hcp/ls,364.74/lsa,/lsb,573.06/lsc,1.57/lsca,1794/DiscY,4/DiscC,1/spectra,solido/cor}% +\def\pgfPT@data@xl{Zr/CS,91.224/Ar,91.224(2)/Arstar,0/radio,206/R,154/Rcov,72\noexpand\pgfPT@espaco(4+)/Rion,640.1/Ei,1.33/eneg,41.81/eaff,+4/O,+IV/ORoman,2128/Tmelt,1855/TmeltC,4650/Tboil,4377/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep10\noexpand\pgfPTeDistsep2/eDist,[Kr]::4d+2\noexpand\pgfPT@virgula5s+2/eConfign,[Kr]::5s+2\noexpand\pgfPT@virgula4d+2/eConfignl,6520/d,25.36/Cp,22.6/kT,hcp/ls,323.2/lsa,/lsb,514.7/lsc,1.59/lsca,1789/DiscY,8/DiscC,1/spectra,solido/cor}% +\def\pgfPT@data@xli{Nb/CS,92.906/Ar,92.906/Arstar,0/radio,198/R,147/Rcov,64\noexpand\pgfPT@espaco(5+)/Rion,652.1/Ei,1.6/eneg,88.52/eaff,+5/O,+V/ORoman,2750/Tmelt,2477/TmeltC,5017/Tboil,4744/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep12\noexpand\pgfPTeDistsep1/eDist,[Kr]::4d+4\noexpand\pgfPT@virgula5s+1/eConfign,[Kr]::5s+1\noexpand\pgfPT@virgula4d+4/eConfignl,8570/d,24.6/Cp,53.7/kT,bcc/ls,330.04/lsa,/lsb,/lsc,/lsca,1801/DiscY,21/DiscC,1/spectra,solido/cor}% +\def\pgfPT@data@xlii{Mo/CS,95.95/Ar,95.95/Arstar,0/radio,190/R,138/Rcov,65\noexpand\pgfPT@espaco(4+)\noexpand\pgfPT@virgula59\noexpand\pgfPT@espaco(6+)/Rion,684.3/Ei,2.16/eneg,72.1/eaff,+4\noexpand\pgfPT@virgula+6/O,+IV\noexpand\pgfPT@virgula+VI/ORoman,2896/Tmelt,2623/TmeltC,4912/Tboil,4639/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep13\noexpand\pgfPTeDistsep1/eDist,[Kr]::4d+5\noexpand\pgfPT@virgula5s+1/eConfign,[Kr]::5s+1\noexpand\pgfPT@virgula4d+5/eConfignl,10280/d,24.06/Cp,138/kT,bcc/ls,314.69/lsa,/lsb,/lsc,/lsca,1781/DiscY,18/DiscC,1/spectra,solido/cor}% +\def\pgfPT@data@xliii{Tc/CS,[98]/Ar,/Arstar,1/radio,183/R,128/Rcov,64.5\noexpand\pgfPT@espaco(4+)\noexpand\pgfPT@virgula56\noexpand\pgfPT@espaco(7+)/Rion,702/Ei,1.9/eneg,53/eaff,+4\noexpand\pgfPT@virgula+7/O,+IV\noexpand\pgfPT@virgula+VII/ORoman,2430/Tmelt,2157/TmeltC,4538/Tboil,4265/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep13\noexpand\pgfPTeDistsep2/eDist,[Kr]::4d+5\noexpand\pgfPT@virgula5s+2/eConfign,[Kr]::5s+2\noexpand\pgfPT@virgula4d+5/eConfignl,11000/d,24.27/Cp,50.6/kT,hcp/ls,273.5/lsa,/lsb,438.8/lsc,1.6/lsca,1937/DiscY,11/DiscC,1/spectra,sintetico/cor}% +\def\pgfPT@data@xliv{Ru/CS,101.07/Ar,101.07/Arstar,0/radio,178/R,125/Rcov,68\noexpand\pgfPT@espaco(3+)\noexpand\pgfPT@virgula62\noexpand\pgfPT@espaco(4+)/Rion,710.2/Ei,2.2/eneg,100.96/eaff,+3\noexpand\pgfPT@virgula+4/O,+III\noexpand\pgfPT@virgula+IV/ORoman,2607/Tmelt,2334/TmeltC,4423/Tboil,4150/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep15\noexpand\pgfPTeDistsep1/eDist,[Kr]::4d+7\noexpand\pgfPT@virgula5s+1/eConfign,[Kr]::5s+1\noexpand\pgfPT@virgula4d+7/eConfignl,12450/d,24.06/Cp,117/kT,hcp/ls,270.55/lsa,/lsb,428.16/lsc,1.58/lsca,1844/DiscY,15/DiscC,1/spectra,solido/cor}% +\def\pgfPT@data@xlv{Rh/CS,102.91/Ar,102.91/Arstar,0/radio,173/R,125/Rcov,66.5\noexpand\pgfPT@espaco(3+)/Rion,719.7/Ei,2.28/eneg,110.27/eaff,+3/O,+III/ORoman,2237/Tmelt,1964/TmeltC,3968/Tboil,3695/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep16\noexpand\pgfPTeDistsep1/eDist,[Kr]::4d+8\noexpand\pgfPT@virgula5s+1/eConfign,[Kr]::5s+1\noexpand\pgfPT@virgula4d+8/eConfignl,12410/d,24.98/Cp,150/kT,fcc/ls,380.34/lsa,/lsb,/lsc,/lsca,1804/DiscY,21/DiscC,1/spectra,solido/cor}% +\def\pgfPT@data@xlvi{Pd/CS,106.42/Ar,106.42/Arstar,0/radio,169/R,120/Rcov,86\noexpand\pgfPT@espaco(2+)\noexpand\pgfPT@virgula61.5\noexpand\pgfPT@espaco(4+)/Rion,804.4/Ei,2.2/eneg,54.24/eaff,0\noexpand\pgfPT@virgula+2\noexpand\pgfPT@virgula+4/O,0\noexpand\pgfPT@virgula+II\noexpand\pgfPT@virgula+IV/ORoman,1828.05/Tmelt,1554.9/TmeltC,3236/Tboil,2963/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep18/eDist,[Kr]::4d+10/eConfign,[Kr]::4d+10/eConfignl,12023/d,25.98/Cp,71.8/kT,fcc/ls,389.02/lsa,/lsb,/lsc,/lsca,1802/DiscY,21/DiscC,1/spectra,solido/cor}% +\def\pgfPT@data@xlvii{Ag/CS,107.87/Ar,107.87/Arstar,0/radio,165/R,128/Rcov,115\noexpand\pgfPT@espaco(1+)/Rion,731/Ei,1.93/eneg,125.86/eaff,+1/O,+I/ORoman,1234.93/Tmelt,961.78/TmeltC,2483/Tboil,2210/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep1/eDist,[Kr]::4d+10\noexpand\pgfPT@virgula5s+1/eConfign,[Kr]::5s+1\noexpand\pgfPT@virgula4d+10/eConfignl,10490/d,25.35/Cp,429/kT,fcc/ls,408.57/lsa,/lsb,/lsc,/lsca,3000\noexpand\pgfPT@scaletxt{\pgfPTDiscYBCscale}{\noexpand\pgfPT@espaco\noexpand\pgfPT@BClabel}/DiscY,0/DiscC,1/spectra,solido/cor}% +\def\pgfPT@data@xlviii{Cd/CS,112.41/Ar,112.41/Arstar,0/radio,161/R,136/Rcov,95\noexpand\pgfPT@espaco(2+)/Rion,867.8/Ei,1.69/eneg,0/eaff,+2/O,+II/ORoman,594.22/Tmelt,321.07/TmeltC,1040/Tboil,767/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep2/eDist,[Kr]::4d+10\noexpand\pgfPT@virgula5s+2/eConfign,[Kr]::5s+2\noexpand\pgfPT@virgula4d+10/eConfignl,8650/d,26.02/Cp,96.6/kT,hcp/ls,297.88/lsa,/lsb,561.67/lsc,1.89/lsca,1817/DiscY,8/DiscC,1/spectra,solido/cor}% +\def\pgfPT@data@xlix{In/CS,114.82/Ar,114.82/Arstar,0/radio,156/R,142/Rcov,80\noexpand\pgfPT@espaco(3+)/Rion,558.3/Ei,1.78/eneg,37.04/eaff,+3/O,+III/ORoman,429.75/Tmelt,156.6/TmeltC,2345/Tboil,2072/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep3/eDist,[Kr]::4d+10\noexpand\pgfPT@virgula5s+2\noexpand\pgfPT@virgula5p+1/eConfign,[Kr]::5s+2\noexpand\pgfPT@virgula4d+10\noexpand\pgfPT@virgula5p+1/eConfignl,7310/d,26.74/Cp,81.8/kT,tetr/ls,325.17/lsa,/lsb,494.59/lsc,1.52/lsca,1863/DiscY,8/DiscC,1/spectra,solido/cor}% +\def\pgfPT@data@l{Sn/CS,118.71/Ar,118.71/Arstar,0/radio,145/R,140/Rcov,118\noexpand\pgfPT@espaco(2+)\noexpand\pgfPT@virgula69\noexpand\pgfPT@espaco(4+)/Rion,708.6/Ei,1.96/eneg,107.3/eaff,+2\noexpand\pgfPT@virgula\noexpand\pgfPT@pm4/O,+II\noexpand\pgfPT@virgula\noexpand\pgfPT@pm IV/ORoman,505.08/Tmelt,231.93/TmeltC,2875/Tboil,2602/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep4/eDist,[Kr]::4d+10\noexpand\pgfPT@virgula5s+2\noexpand\pgfPT@virgula5p+2/eConfign,[Kr]::5s+2\noexpand\pgfPT@virgula4d+10\noexpand\pgfPT@virgula5p+2/eConfignl,7265/d,25.77/Cp,66.8/kT,ctetr/ls,583.1/lsa,/lsb,318.1/lsc,0.55/lsca,3000\noexpand\pgfPT@scaletxt{\pgfPTDiscYBCscale}{\noexpand\pgfPT@espaco\noexpand\pgfPT@BClabel}/DiscY,0/DiscC,1/spectra,solido/cor}% +\def\pgfPT@data@li{Sb/CS,121.76/Ar,121.76/Arstar,0/radio,133/R,140/Rcov,76\noexpand\pgfPT@espaco(3+)\noexpand\pgfPT@virgula60\noexpand\pgfPT@espaco(5+)/Rion,834/Ei,2.05/eneg,101.06/eaff,\noexpand\pgfPT@pm3\noexpand\pgfPT@virgula+5/O,\noexpand\pgfPT@pm III\noexpand\pgfPT@virgula+V/ORoman,903.78/Tmelt,630.63/TmeltC,1908/Tboil,1635/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep5/eDist,[Kr]::4d+10\noexpand\pgfPT@virgula5s+2\noexpand\pgfPT@virgula5p+3/eConfign,[Kr]::5s+2\noexpand\pgfPT@virgula4d+10\noexpand\pgfPT@virgula5p+3/eConfignl,6697/d,25.23/Cp,24.4/kT,rho/ls,430.7/lsa,/lsb,1127.3/lsc,2.62/lsca,815/DiscY,12/DiscC,1/spectra,solido/cor}% +\def\pgfPT@data@lii{Te/CS,127.6/Ar,127.60(3)/Arstar,0/radio,123/R,136/Rcov,221\noexpand\pgfPT@espaco(2-)\noexpand\pgfPT@virgula97\noexpand\pgfPT@espaco(4+)\noexpand\pgfPT@virgula56\noexpand\pgfPT@espaco(6+)/Rion,869.3/Ei,2.1/eneg,190.16/eaff,\noexpand\pgfPT@pm2\noexpand\pgfPT@virgula+4\noexpand\pgfPT@virgula+6/O,\noexpand\pgfPT@pm II\noexpand\pgfPT@virgula+IV\noexpand\pgfPT@virgula+VI/ORoman,722.66/Tmelt,449.51/TmeltC,1261/Tboil,988/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep6/eDist,[Kr]::4d+10\noexpand\pgfPT@virgula5s+2\noexpand\pgfPT@virgula5p+4/eConfign,[Kr]::5s+2\noexpand\pgfPT@virgula4d+10\noexpand\pgfPT@virgula5p+4/eConfignl,6240/d,25.73/Cp,3/kT,rho/ls,445.72/lsa,/lsb,592.9/lsc,1.33/lsca,1782/DiscY,14/DiscC,1/spectra,solido/cor}% +\def\pgfPT@data@liii{I/CS,126.9/Ar,126.9/Arstar,0/radio,115/R,133/Rcov,220\noexpand\pgfPT@espaco(1-)\noexpand\pgfPT@virgula95\noexpand\pgfPT@espaco(5+)\noexpand\pgfPT@virgula53\noexpand\pgfPT@espaco(7+)/Rion,1008.4/Ei,2.66/eneg,295.15/eaff,\noexpand\pgfPT@pm1\noexpand\pgfPT@virgula+3\noexpand\pgfPT@virgula+5\noexpand\pgfPT@virgula+7/O,\noexpand\pgfPT@pm I\noexpand\pgfPT@virgula+III\noexpand\pgfPT@virgula+V\noexpand\pgfPT@virgula+VII/ORoman,386.85/Tmelt,113.7/TmeltC,457.4/Tboil,184.3/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep7/eDist,[Kr]::4d+10\noexpand\pgfPT@virgula5s+2\noexpand\pgfPT@virgula5p+5/eConfign,[Kr]::5s+2\noexpand\pgfPT@virgula4d+10\noexpand\pgfPT@virgula5p+5/eConfignl,4933/d,54.44/Cp,0.449/kT,bcort/ls,726.97/lsa,479.03/lsb,979.42/lsc,1.35/lsca,1811/DiscY,5/DiscC,1/spectra,solido/cor}% +\def\pgfPT@data@liv{Xe/CS,131.29/Ar,131.29/Arstar,0/radio,108/R,131/Rcov,---/Rion,1170.4/Ei,2.6/eneg,0/eaff,0/O,0/ORoman,161.4/Tmelt,-111.75/TmeltC,165.051/Tboil,-108.099/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep8/eDist,[Kr]::4d+10\noexpand\pgfPT@virgula5s+2\noexpand\pgfPT@virgula5p+6/eConfign,[Kr]::5s+2\noexpand\pgfPT@virgula4d+10\noexpand\pgfPT@virgula5p+6/eConfignl,5.894/d,20.786/Cp,0.00565/kT,fcc/ls,620.23/lsa,/lsb,/lsc,/lsca,1898/DiscY,21/DiscC,1/spectra,gasoso/cor}% +\def\pgfPT@data@lv{Cs/CS,132.91/Ar,132.91/Arstar,0/radio,298/R,232/Rcov,167\noexpand\pgfPT@espaco(1+)/Rion,375.7/Ei,0.79/eneg,45.51/eaff,+1/O,+I/ORoman,301.7/Tmelt,28.5/TmeltC,944/Tboil,671/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep1/eDist,[Xe]::6s+1/eConfign,[Xe]::6s+1/eConfignl,1930/d,32.21/Cp,35.9/kT,bcc/ls,614.1/lsa,/lsb,/lsc,/lsca,1860/DiscY,8/DiscC,1/spectra,solido/cor}% +\def\pgfPT@data@lvi{Ba/CS,137.33/Ar,137.33/Arstar,0/radio,253/R,196/Rcov,135\noexpand\pgfPT@espaco(2+)/Rion,502.9/Ei,0.89/eneg,13.95/eaff,+2/O,+II/ORoman,1000/Tmelt,727/TmeltC,1910/Tboil,1637/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep2/eDist,[Xe]::6s+2/eConfign,[Xe]::6s+2/eConfignl,3510/d,28.07/Cp,18.4/kT,bcc/ls,501.9/lsa,/lsb,/lsc,/lsca,1808/DiscY,21/DiscC,1/spectra,solido/cor}% +\def\pgfPT@data@lvii{La/CS,138.91/Ar,138.91/Arstar,0/radio,226/R,180/Rcov,103.2\noexpand\pgfPT@espaco(3+)/Rion,538.1/Ei,1.1/eneg,53.8/eaff,+3/O,+III/ORoman,1193/Tmelt,920/TmeltC,3737/Tboil,3464/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep9\noexpand\pgfPTeDistsep2/eDist,[Xe]::5d+1\noexpand\pgfPT@virgula6s+2/eConfign,[Xe]::6s+2\noexpand\pgfPT@virgula5d+1/eConfignl,6162/d,27.11/Cp,13.4/kT,hex/ls,377.2/lsa,/lsb,1214.4/lsc,3.22/lsca,1838/DiscY,18/DiscC,1/spectra,solido/cor}% +\def\pgfPT@data@lviii{Ce/CS,140.12/Ar,140.12/Arstar,0/radio,210/R,163/Rcov,101\noexpand\pgfPT@espaco(3+)\noexpand\pgfPT@virgula87\noexpand\pgfPT@espaco(4+)/Rion,534.4/Ei,1.12/eneg,55/eaff,+3\noexpand\pgfPT@virgula+4/O,+III\noexpand\pgfPT@virgula+IV/ORoman,1068/Tmelt,795/TmeltC,3716/Tboil,3443/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep19\noexpand\pgfPTeDistsep9\noexpand\pgfPTeDistsep2/eDist,[Xe]::4f+1\noexpand\pgfPT@virgula5d+1\noexpand\pgfPT@virgula6s+2/eConfign,[Xe]::6s+2\noexpand\pgfPT@virgula4f+1\noexpand\pgfPT@virgula5d+1/eConfignl,6770/d,26.94/Cp,11.3/kT,hex/ls,362/lsa,/lsb,599/lsc,1.65/lsca,1803/DiscY,9/DiscC,1/spectra,solido/cor}% +\def\pgfPT@data@lix{Pr/CS,140.91/Ar,140.91/Arstar,0/radio,247/R,17/Rcov,99\noexpand\pgfPT@espaco(3+)/Rion,527/Ei,1.13/eneg,10.54/eaff,+3/O,+III/ORoman,1208/Tmelt,935/TmeltC,3403/Tboil,3130/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep21\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep2/eDist,[Xe]::4f+3\noexpand\pgfPT@virgula6s+2/eConfign,[Xe]::6s+2\noexpand\pgfPT@virgula4f+3/eConfignl,6770/d,27.2/Cp,12.5/kT,hex/ls,367.21/lsa,/lsb,1183.26/lsc,3.22/lsca,1885/DiscY,1/DiscC,1/spectra,solido/cor}% +\def\pgfPT@data@lx{Nd/CS,144.24/Ar,144.24/Arstar,0/radio,206/R,17/Rcov,98.3\noexpand\pgfPT@espaco(3+)/Rion,533.1/Ei,1.14/eneg,9.41/eaff,+3/O,+III/ORoman,1297/Tmelt,1024/TmeltC,3347/Tboil,3074/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep22\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep2/eDist,[Xe]::4f+4\noexpand\pgfPT@virgula6s+2/eConfign,[Xe]::6s+2\noexpand\pgfPT@virgula4f+4/eConfignl,7010/d,27.45/Cp,16.5/kT,hex/ls,365.82/lsa,/lsb,1179.66/lsc,3.22/lsca,1885/DiscY,1/DiscC,1/spectra,solido/cor}% +\def\pgfPT@data@lxi{Pm/CS,[145]/Ar,[145]/Arstar,1/radio,205/R,173/Rcov,97\noexpand\pgfPT@espaco(3+)/Rion,540/Ei,1.13/eneg,12.45/eaff,+3/O,+III/ORoman,1315/Tmelt,1042/TmeltC,3273/Tboil,3000/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep23\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep2/eDist,[Xe]::4f+5\noexpand\pgfPT@virgula6s+2/eConfign,[Xe]::6s+2\noexpand\pgfPT@virgula4f+5/eConfignl,7260/d,---/Cp,17.9/kT,hex/ls,365/lsa,/lsb,1165/lsc,3.19/lsca,1945/DiscY,22/DiscC,1/spectra,sintetico/cor}% +\def\pgfPT@data@lxii{Sm/CS,150.36/Ar,150.36(2)/Arstar,0/radio,238/R,172/Rcov,95.8\noexpand\pgfPT@espaco(3+)/Rion,544.5/Ei,1.17/eneg,15.63/eaff,+3/O,+III/ORoman,1345/Tmelt,1072/TmeltC,2173/Tboil,1900/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep24\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep2/eDist,[Xe]::4f+6\noexpand\pgfPT@virgula6s+2/eConfign,[Xe]::6s+2\noexpand\pgfPT@virgula4f+6/eConfignl,7520/d,29.54/Cp,13.3/kT,rho/ls,362.1/lsa,/lsb,2625/lsc,7.25/lsca,1879/DiscY,5/DiscC,1/spectra,solido/cor}% +\def\pgfPT@data@lxiii{Eu/CS,151.96/Ar,151.96/Arstar,0/radio,231/R,168/Rcov,117\noexpand\pgfPT@espaco(2+)\noexpand\pgfPT@virgula94.7\noexpand\pgfPT@espaco(3+)/Rion,547.1/Ei,1.2/eneg,11.2/eaff,+2\noexpand\pgfPT@virgula+3/O,+II\noexpand\pgfPT@virgula+III/ORoman,1099/Tmelt,826/TmeltC,1802/Tboil,1529/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep25\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep2/eDist,[Xe]::4f+7\noexpand\pgfPT@virgula6s+2/eConfign,[Xe]::6s+2\noexpand\pgfPT@virgula4f+7/eConfignl,5244/d,27.66/Cp,13.9/kT,bcc/ls,458.1/lsa,/lsb,/lsc,/lsca,1901/DiscY,5/DiscC,1/spectra,solido/cor}% +\def\pgfPT@data@lxiv{Gd/CS,157.25/Ar,157.25(3)/Arstar,0/radio,233/R,169/Rcov,93.5\noexpand\pgfPT@espaco(3+)/Rion,593.4/Ei,1.2/eneg,13.22/eaff,+3/O,+III/ORoman,1585/Tmelt,1312/TmeltC,3273/Tboil,3000/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep25\noexpand\pgfPTeDistsep9\noexpand\pgfPTeDistsep2/eDist,[Xe]::4f+7\noexpand\pgfPT@virgula5d+1\noexpand\pgfPT@virgula6s+2/eConfign,[Xe]::6s+2\noexpand\pgfPT@virgula4f+7\noexpand\pgfPT@virgula5d+1/eConfignl,7900/d,37.03/Cp,10.6/kT,hcp/ls,363.6/lsa,/lsb,578.26/lsc,1.59/lsca,1880/DiscY,20/DiscC,1/spectra,solido/cor}% +\def\pgfPT@data@lxv{Tb/CS,158.93/Ar,158.93/Arstar,0/radio,225/R,168/Rcov,92.3\noexpand\pgfPT@espaco(3+)/Rion,565.8/Ei,1.2/eneg,12.67/eaff,+3/O,+III/ORoman,1629/Tmelt,1356/TmeltC,3396/Tboil,3123/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep27\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep2/eDist,[Xe]::4f+9\noexpand\pgfPT@virgula6s+2/eConfign,[Xe]::6s+2\noexpand\pgfPT@virgula4f+9/eConfignl,8230/d,28.91/Cp,11.1/kT,hcp/ls,360.1/lsa,/lsb,569.36/lsc,1.58/lsca,1843/DiscY,18/DiscC,1/spectra,solido/cor}% +\def\pgfPT@data@lxvi{Dy/CS,162.5/Ar,162.5/Arstar,0/radio,228/R,167/Rcov,91.2\noexpand\pgfPT@espaco(3+)/Rion,573/Ei,1.22/eneg,33.96/eaff,+3/O,+III/ORoman,1680/Tmelt,1407/TmeltC,2840/Tboil,2567/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep28\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep2/eDist,[Xe]::4f+10\noexpand\pgfPT@virgula6s+2/eConfign,[Xe]::6s+2\noexpand\pgfPT@virgula4f+10/eConfignl,8540/d,27.7/Cp,10.7/kT,hcp/ls,359.3/lsa,/lsb,565.37/lsc,1.57/lsca,1886/DiscY,5/DiscC,1/spectra,solido/cor}% +\def\pgfPT@data@lxvii{Ho/CS,164.93/Ar,164.93/Arstar,0/radio,226/R,166/Rcov,90.1\noexpand\pgfPT@espaco(3+)/Rion,581/Ei,1.23/eneg,32.61/eaff,+3/O,+III/ORoman,1734/Tmelt,1461/TmeltC,2873/Tboil,2600/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep29\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep2/eDist,[Xe]::4f+11\noexpand\pgfPT@virgula6s+2/eConfign,[Xe]::6s+2\noexpand\pgfPT@virgula4f+11/eConfignl,8790/d,27.15/Cp,16.2/kT,hcp/ls,357.73/lsa,/lsb,561.58/lsc,1.57/lsca,1878/DiscY,20/DiscC,1/spectra,solido/cor}% +\def\pgfPT@data@lxviii{Er/CS,167.26/Ar,167.26/Arstar,0/radio,226/R,165/Rcov,89\noexpand\pgfPT@espaco(3+)/Rion,589.3/Ei,1.24/eneg,30.1/eaff,+3/O,+III/ORoman,1802/Tmelt,1529/TmeltC,3141/Tboil,2868/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep30\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep2/eDist,[Xe]::4f+12\noexpand\pgfPT@virgula6s+2/eConfign,[Xe]::6s+2\noexpand\pgfPT@virgula4f+12/eConfignl,9066/d,28.12/Cp,14.5/kT,hcp/ls,355.88/lsa,/lsb,558.74/lsc,1.57/lsca,1843/DiscY,18/DiscC,1/spectra,solido/cor}% +\def\pgfPT@data@lxix{Tm/CS,168.93/Ar,168.93/Arstar,0/radio,222/R,164/Rcov,88\noexpand\pgfPT@espaco(3+)/Rion,596.7/Ei,1.25/eneg,99/eaff,+3/O,+III/ORoman,1818/Tmelt,1545/TmeltC,2223/Tboil,1950/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep31\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep2/eDist,[Xe]::4f+13\noexpand\pgfPT@virgula6s+2/eConfign,[Xe]::6s+2\noexpand\pgfPT@virgula4f+13/eConfignl,9320/d,27.03/Cp,16.9/kT,hcp/ls,353.75/lsa,/lsb,555.46/lsc,1.57/lsca,1879/DiscY,18/DiscC,1/spectra,solido/cor}% +\def\pgfPT@data@lxx{Yb/CS,173.05/Ar,173.05/Arstar,0/radio,222/R,170/Rcov,86.8\noexpand\pgfPT@espaco(3+)/Rion,603.4/Ei,1.1/eneg,0/eaff,+3/O,+III/ORoman,1097/Tmelt,824/TmeltC,1703/Tboil,1430/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep2/eDist,[Xe]::4f+14\noexpand\pgfPT@virgula6s+2/eConfign,[Xe]::6s+2\noexpand\pgfPT@virgula4f+14/eConfignl,6900/d,26.74/Cp,38.5/kT,fcc/ls,548.47/lsa,/lsb,/lsc,/lsca,1878/DiscY,20/DiscC,1/spectra,solido/cor}% +\def\pgfPT@data@lxxi{Lu/CS,174.97/Ar,174.97/Arstar,0/radio,217/R,162/Rcov,86.1\noexpand\pgfPT@espaco(3+)/Rion,523.5/Ei,1.27/eneg,23.04/eaff,+3/O,+III/ORoman,1925/Tmelt,1652/TmeltC,3675/Tboil,3402/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep9\noexpand\pgfPTeDistsep2/eDist,[Xe]::4f+14\noexpand\pgfPT@virgula5d+1\noexpand\pgfPT@virgula6s+2/eConfign,[Xe]::6s+2\noexpand\pgfPT@virgula4f+14\noexpand\pgfPT@virgula5d+1/eConfignl,9841/d,26.86/Cp,16.4/kT,hcp/ls,350.31/lsa,/lsb,555.09/lsc,1.58/lsca,1906/DiscY,6/DiscC,1/spectra,solido/cor}% +\def\pgfPT@data@lxxii{Hf/CS,178.49/Ar,178.49(2)/Arstar,0/radio,208/R,152/Rcov,71\noexpand\pgfPT@espaco(4+)/Rion,658.5/Ei,1.3/eneg,17.18/eaff,+4/O,+IV/ORoman,2506/Tmelt,2233/TmeltC,4876/Tboil,4603/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep10\noexpand\pgfPTeDistsep2/eDist,[Xe]::4f+14\noexpand\pgfPT@virgula5d+2\noexpand\pgfPT@virgula6s+2/eConfign,[Xe]::6s+2\noexpand\pgfPT@virgula4f+14\noexpand\pgfPT@virgula5d+2/eConfignl,13310/d,25.73/Cp,23/kT,hcp/ls,319.64/lsa,/lsb,505.11/lsc,1.58/lsca,1922/DiscY,2/DiscC,1/spectra,solido/cor}% +\def\pgfPT@data@lxxiii{Ta/CS,180.95/Ar,180.95/Arstar,0/radio,200/R,146/Rcov,64\noexpand\pgfPT@espaco(5+)/Rion,761/Ei,1.5/eneg,31/eaff,+5/O,+V/ORoman,3290/Tmelt,3017/TmeltC,5731/Tboil,5458/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep11\noexpand\pgfPTeDistsep2/eDist,[Xe]::4f+14\noexpand\pgfPT@virgula5d+3\noexpand\pgfPT@virgula6s+2/eConfign,[Xe]::6s+2\noexpand\pgfPT@virgula4f+14\noexpand\pgfPT@virgula5d+3/eConfignl,16690/d,25.36/Cp,57.5/kT,bcc/ls,330.26/lsa,/lsb,/lsc,/lsca,1802/DiscY,18/DiscC,1/spectra,solido/cor}% +\def\pgfPT@data@lxxiv{W/CS,183.84/Ar,183.84/Arstar,0/radio,193/R,137/Rcov,66\noexpand\pgfPT@espaco(4+)\noexpand\pgfPT@virgula60\noexpand\pgfPT@espaco(6+)/Rion,770/Ei,2.36/eneg,78.76/eaff,+4\noexpand\pgfPT@virgula+6/O,+IV\noexpand\pgfPT@virgula+VI/ORoman,3695/Tmelt,3422/TmeltC,6203/Tboil,5930/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep12\noexpand\pgfPTeDistsep2/eDist,[Xe]::4f+14\noexpand\pgfPT@virgula5d+4\noexpand\pgfPT@virgula6s+2/eConfign,[Xe]::6s+2\noexpand\pgfPT@virgula4f+14\noexpand\pgfPT@virgula5d+4/eConfignl,19250/d,24.27/Cp,173/kT,bcc/ls,316.52/lsa,/lsb,/lsc,/lsca,1783/DiscY,17/DiscC,1/spectra,solido/cor}% +\def\pgfPT@data@lxxv{Re/CS,186.21/Ar,186.21/Arstar,0/radio,188/R,131/Rcov,63\noexpand\pgfPT@espaco(4+)/Rion,760/Ei,1.9/eneg,5.83/eaff,+4/O,+IV/ORoman,3459/Tmelt,3186/TmeltC,5869/Tboil,5596/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep13\noexpand\pgfPTeDistsep2/eDist,[Xe]::4f+14\noexpand\pgfPT@virgula5d+5\noexpand\pgfPT@virgula6s+2/eConfign,[Xe]::6s+2\noexpand\pgfPT@virgula4f+14\noexpand\pgfPT@virgula5d+5/eConfignl,21020/d,25.48/Cp,48/kT,hcp/ls,276.1/lsa,/lsb,445.8/lsc,1.62/lsca,1925/DiscY,8/DiscC,1/spectra,solido/cor}% +\def\pgfPT@data@lxxvi{Os/CS,190.23/Ar,190.23(3)/Arstar,0/radio,185/R,129/Rcov,63\noexpand\pgfPT@espaco(4+)/Rion,840/Ei,2.2/eneg,103.99/eaff,+4/O,+IV/ORoman,3306/Tmelt,3033/TmeltC,5285/Tboil,5012/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep14\noexpand\pgfPTeDistsep2/eDist,[Xe]::4f+14\noexpand\pgfPT@virgula5d+6\noexpand\pgfPT@virgula6s+2/eConfign,[Xe]::6s+2\noexpand\pgfPT@virgula4f+14\noexpand\pgfPT@virgula5d+6/eConfignl,22590/d,24.7/Cp,87.6/kT,hcp/ls,273.43/lsa,/lsb,431.73/lsc,1.58/lsca,1803/DiscY,21/DiscC,1/spectra,solido/cor}% +\def\pgfPT@data@lxxvii{Ir/CS,192.22/Ar,192.22/Arstar,0/radio,180/R,122/Rcov,68\noexpand\pgfPT@espaco(3+)\noexpand\pgfPT@virgula62.5\noexpand\pgfPT@espaco(4+)/Rion,880/Ei,2.2/eneg,150.91/eaff,+3\noexpand\pgfPT@virgula+4/O,+III\noexpand\pgfPT@virgula+IV/ORoman,2719/Tmelt,2446/TmeltC,4403/Tboil,4130/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep15\noexpand\pgfPTeDistsep2/eDist,[Xe]::4f+14\noexpand\pgfPT@virgula5d+7\noexpand\pgfPT@virgula6s+2/eConfign,[Xe]::6s+2\noexpand\pgfPT@virgula4f+14\noexpand\pgfPT@virgula5d+7/eConfignl,22560/d,25.1/Cp,147/kT,fcc/ls,383.92/lsa,/lsb,/lsc,/lsca,1803/DiscY,7/DiscC,1/spectra,solido/cor}% +\def\pgfPT@data@lxxviii{Pt/CS,195.08/Ar,195.08/Arstar,0/radio,177/R,123/Rcov,80\noexpand\pgfPT@espaco(2+)\noexpand\pgfPT@virgula62.5\noexpand\pgfPT@espaco(4+)/Rion,870/Ei,2.28/eneg,205.04/eaff,+2\noexpand\pgfPT@virgula+4/O,+II\noexpand\pgfPT@virgula+IV/ORoman,2041.4/Tmelt,1768.3/TmeltC,4098/Tboil,3825/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep17\noexpand\pgfPTeDistsep1/eDist,[Xe]::4f+14\noexpand\pgfPT@virgula5d+9\noexpand\pgfPT@virgula6s+1/eConfign,[Xe]::6s+1\noexpand\pgfPT@virgula4f+14\noexpand\pgfPT@virgula5d+9/eConfignl,21450/d,25.86/Cp,71.6/kT,fcc/ls,392.35/lsa,/lsb,/lsc,/lsca,1735/DiscY,13/DiscC,1/spectra,solido/cor}% +\def\pgfPT@data@lxxix{Au/CS,196.97/Ar,196.97/Arstar,0/radio,174/R,124/Rcov,137\noexpand\pgfPT@espaco(1+)\noexpand\pgfPT@virgula85\noexpand\pgfPT@espaco(3+)/Rion,890.1/Ei,2.54/eneg,222.75/eaff,+1\noexpand\pgfPT@virgula+3/O,+I\noexpand\pgfPT@virgula+III/ORoman,1337.33/Tmelt,1064.18/TmeltC,3243/Tboil,2970/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep1/eDist,[Xe]::4f+14\noexpand\pgfPT@virgula5d+10\noexpand\pgfPT@virgula6s+1/eConfign,[Xe]::6s+1\noexpand\pgfPT@virgula4f+14\noexpand\pgfPT@virgula5d+10/eConfignl,19300/d,25.418/Cp,318/kT,fcc/ls,407.83/lsa,/lsb,/lsc,/lsca,4000\noexpand\pgfPT@scaletxt{\pgfPTDiscYBCscale}{\noexpand\pgfPT@espaco\noexpand\pgfPT@BClabel}/DiscY,100/DiscC,1/spectra,solido/cor}% +\def\pgfPT@data@lxxx{Hg/CS,200.59/Ar,200.59/Arstar,0/radio,171/R,133/Rcov,119\noexpand\pgfPT@espaco(1+)\noexpand\pgfPT@virgula102\noexpand\pgfPT@espaco(2+)/Rion,1007.1/Ei,2/eneg,0/eaff,+1\noexpand\pgfPT@virgula+2/O,+I\noexpand\pgfPT@virgula+II/ORoman,234.32/Tmelt,-38.83/TmeltC,629.88/Tboil,356.73/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep2/eDist,[Xe]::4f+14\noexpand\pgfPT@virgula5d+10\noexpand\pgfPT@virgula6s+2/eConfign,[Xe]::6s+2\noexpand\pgfPT@virgula4f+14\noexpand\pgfPT@virgula5d+10/eConfignl,13534/d,27.983/Cp,8.3/kT,rho/ls,300.9/lsa,/lsb,/lsc,/lsca,1500\noexpand\pgfPT@scaletxt{\pgfPTDiscYBCscale}{\noexpand\pgfPT@espaco\noexpand\pgfPT@BClabel}/DiscY,3/DiscC,1/spectra,liquido/cor}% +\def\pgfPT@data@lxxxi{Tl/CS,204.38/Ar,[204.38\noexpand\pgfPT@virgula204.39]/Arstar,0/radio,156/R,144/Rcov,150\noexpand\pgfPT@espaco(1+)\noexpand\pgfPT@virgula88.5\noexpand\pgfPT@espaco(3+)/Rion,589.4/Ei,1.62/eneg,30.88/eaff,+1\noexpand\pgfPT@virgula+3/O,+I\noexpand\pgfPT@virgula+III/ORoman,577/Tmelt,304/TmeltC,1746/Tboil,1473/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep3/eDist,[Xe]::4f+14\noexpand\pgfPT@virgula5d+10\noexpand\pgfPT@virgula6s+2\noexpand\pgfPT@virgula6p+1/eConfign,[Xe]::6s+2\noexpand\pgfPT@virgula4f+14\noexpand\pgfPT@virgula5d+10\noexpand\pgfPT@virgula6p+1/eConfignl,11850/d,26.32/Cp,46.1/kT,hcp/ls,345.66/lsa,/lsb,552.48/lsc,1.6/lsca,1861/DiscY,21/DiscC,1/spectra,solido/cor}% +\def\pgfPT@data@lxxxii{Pb/CS,207.2/Ar,207.2/Arstar,0/radio,154/R,144/Rcov,119\noexpand\pgfPT@espaco(2+)\noexpand\pgfPT@virgula77.5\noexpand\pgfPT@espaco(4+)/Rion,715.6/Ei,1.87/eneg,34.42/eaff,+2\noexpand\pgfPT@virgula+4/O,+II\noexpand\pgfPT@virgula+IV/ORoman,600.61/Tmelt,327.46/TmeltC,2022/Tboil,1749/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep4/eDist,[Xe]::4f+14\noexpand\pgfPT@virgula5d+10\noexpand\pgfPT@virgula6s+2\noexpand\pgfPT@virgula6p+2/eConfign,[Xe]::6s+2\noexpand\pgfPT@virgula4f+14\noexpand\pgfPT@virgula5d+10\noexpand\pgfPT@virgula6p+2/eConfignl,11340/d,26.65/Cp,35.3/kT,fcc/ls,495.02/lsa,/lsb,/lsc,/lsca,3800\noexpand\pgfPT@scaletxt{\pgfPTDiscYBCscale}{\noexpand\pgfPT@espaco\noexpand\pgfPT@BClabel}/DiscY,3/DiscC,1/spectra,solido/cor}% +\def\pgfPT@data@lxxxiii{Bi/CS,208.98/Ar,208.98/Arstar,0/radio,143/R,151/Rcov,103\noexpand\pgfPT@espaco(3+)/Rion,703/Ei,2.02/eneg,90.92/eaff,+3/O,+III/ORoman,544.7/Tmelt,271.5/TmeltC,1837/Tboil,1564/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep5/eDist,[Xe]::4f+14\noexpand\pgfPT@virgula5d+10\noexpand\pgfPT@virgula6s+2\noexpand\pgfPT@virgula6p+3/eConfign,[Xe]::6s+2\noexpand\pgfPT@virgula4f+14\noexpand\pgfPT@virgula5d+10\noexpand\pgfPT@virgula6p+3/eConfignl,9780/d,25.52/Cp,7.97/kT,mono/ls,667.4/lsa,611.7/lsb,330.4/lsc,0.5/lsca,1400/DiscY,12/DiscC,1/spectra,solido/cor}% +\def\pgfPT@data@lxxxiv{Po/CS,[209]/Ar,/Arstar,1/radio,135/R,145/Rcov,223\noexpand\pgfPT@espaco(2-)\noexpand\pgfPT@virgula94\noexpand\pgfPT@espaco(4+)\noexpand\pgfPT@virgula67\noexpand\pgfPT@espaco(6+)/Rion,812.1/Ei,2/eneg,136/eaff,\noexpand\pgfPT@pm2\noexpand\pgfPT@virgula+4\noexpand\pgfPT@virgula+5\noexpand\pgfPT@virgula+6/O,\noexpand\pgfPT@pm II\noexpand\pgfPT@virgula+IV\noexpand\pgfPT@virgula+V\noexpand\pgfPT@virgula+VI/ORoman,527/Tmelt,254/TmeltC,1235/Tboil,962/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep6/eDist,[Xe]::4f+14\noexpand\pgfPT@virgula5d+10\noexpand\pgfPT@virgula6s+2\noexpand\pgfPT@virgula6p+4/eConfign,[Xe]::6s+2\noexpand\pgfPT@virgula4f+14\noexpand\pgfPT@virgula5d+10\noexpand\pgfPT@virgula6p+4/eConfignl,9196/d,26.4/Cp,0/kT,sc/ls,335.9/lsa,/lsb,/lsc,/lsca,1898/DiscY,5/DiscC,1/spectra,solido/cor}% +\def\pgfPT@data@lxxxv{At/CS,[210]/Ar,/Arstar,1/radio,127/R,147/Rcov,62\noexpand\pgfPT@espaco(7+)/Rion,899.003/Ei,2.2/eneg,233.09/eaff,\noexpand\pgfPT@pm1\noexpand\pgfPT@virgula+3\noexpand\pgfPT@virgula+5\noexpand\pgfPT@virgula+7/O,\noexpand\pgfPT@pm I\noexpand\pgfPT@virgula+III\noexpand\pgfPT@virgula+V\noexpand\pgfPT@virgula+VII/ORoman,575/Tmelt,302/TmeltC,503/Tboil,230/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep7/eDist,[Xe]::4f+14\noexpand\pgfPT@virgula5d+10\noexpand\pgfPT@virgula6s+2\noexpand\pgfPT@virgula6p+5/eConfign,[Xe]::6s+2\noexpand\pgfPT@virgula4f+14\noexpand\pgfPT@virgula5d+10\noexpand\pgfPT@virgula6p+5/eConfignl,---/d,---/Cp,1.7/kT,---/ls,---/lsa,/lsb,/lsc,/lsca,1940/DiscY,22/DiscC,0/spectra,solido/cor}% +\def\pgfPT@data@lxxxvi{Rn/CS,[222]/Ar,/Arstar,1/radio,120/R,142/Rcov,---/Rion,1037/Ei,2.2/eneg,0/eaff,+2\noexpand\pgfPT@virgula+6/O,+II\noexpand\pgfPT@virgula+VI/ORoman,202/Tmelt,-71/TmeltC,211.5/Tboil,-61.7/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep8/eDist,[Xe]::4f+14\noexpand\pgfPT@virgula5d+10\noexpand\pgfPT@virgula6s+2\noexpand\pgfPT@virgula6p+6/eConfign,[Xe]::6s+2\noexpand\pgfPT@virgula4f+14\noexpand\pgfPT@virgula5d+10\noexpand\pgfPT@virgula6p+6/eConfignl,9.73/d,20.786/Cp,0.00361/kT,fcc/ls,---/lsa,/lsb,/lsc,/lsca,1899/DiscY,8/DiscC,1/spectra,gasoso/cor}% +\def\pgfPT@data@lxxxvii{Fr/CS,[223]/Ar,/Arstar,1/radio,---/R,---/Rcov,180\noexpand\pgfPT@espaco(1+)/Rion,380/Ei,0.7/eneg,46.89/eaff,+1/O,+I/ORoman,281/Tmelt,8/TmeltC,890/Tboil,620/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep1/eDist,[Rn]::7s+1/eConfign,[Rn]::7s+1/eConfignl,---/d,31.8/Cp,---/kT,---/ls,---/lsa,/lsb,/lsc,/lsca,1939/DiscY,5/DiscC,0/spectra,solido/cor}% +\def\pgfPT@data@lxxxviii{Ra/CS,[226]/Ar,/Arstar,1/radio,---/R,201/Rcov,148\noexpand\pgfPT@espaco(2+)/Rion,509.3/Ei,0.9/eneg,9.65/eaff,+2/O,+II/ORoman,973/Tmelt,700/TmeltC,2010/Tboil,1737/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep2/eDist,[Rn]::7s+2/eConfign,[Rn]::7s+2/eConfignl,5500/d,---/Cp,18.6/kT,bcc/ls,514.8/lsa,/lsb,/lsc,/lsca,1898/DiscY,5/DiscC,1/spectra,solido/cor}% +\def\pgfPT@data@lxxxix{Ac/CS,[227]/Ar,/Arstar,1/radio,---/R,186/Rcov,106.5\noexpand\pgfPT@espaco(3+)/Rion,499/Ei,1.1/eneg,33.77/eaff,+3/O,+III/ORoman,1323/Tmelt,1050/TmeltC,3471/Tboil,3198/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep9\noexpand\pgfPTeDistsep2/eDist,[Rn]::6d+1\noexpand\pgfPT@virgula7s+2/eConfign,[Rn]::7s+2\noexpand\pgfPT@virgula6d+1/eConfignl,10000/d,27.2/Cp,12/kT,fcc/ls,587/lsa,/lsb,/lsc,/lsca,1902/DiscY,5/DiscC,1/spectra,solido/cor}% +\def\pgfPT@data@xc{Th/CS,232.04/Ar,232.04/Arstar,1/radio,---/R,175/Rcov,/Rion,587/Ei,1.3/eneg,58.63/eaff,+4/O,+IV/ORoman,2115/Tmelt,1842/TmeltC,5061/Tboil,4788/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep10\noexpand\pgfPTeDistsep2/eDist,[Rn]::6d+2\noexpand\pgfPT@virgula7s+2/eConfign,[Rn]::7s+2\noexpand\pgfPT@virgula6d+2/eConfignl,11700/d,26.23/Cp,54/kT,fcc/ls,508.42/lsa,/lsb,/lsc,/lsca,1829/DiscY,18/DiscC,1/spectra,solido/cor}% +\def\pgfPT@data@xci{Pa/CS,231.04/Ar,231.04/Arstar,1/radio,---/R,169/Rcov,90\noexpand\pgfPT@espaco(4+)\noexpand\pgfPT@virgula78\noexpand\pgfPT@espaco(5+)/Rion,568/Ei,1.5/eneg,53.03/eaff,+5/O,+V/ORoman,1841/Tmelt,1568/TmeltC,4273/Tboil,4000/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep20\noexpand\pgfPTeDistsep9\noexpand\pgfPTeDistsep2/eDist,[Rn]::5f+2\noexpand\pgfPT@virgula6d+1\noexpand\pgfPT@virgula7s+2/eConfign,[Rn]::7s+2\noexpand\pgfPT@virgula5f+2\noexpand\pgfPT@virgula6d+1/eConfignl,15370/d,---/Cp,47/kT,tetr/ls,392.5/lsa,/lsb,323.8/lsc,0.82/lsca,1913/DiscY,10/DiscC,1/spectra,solido/cor}% +\def\pgfPT@data@xcii{U/CS,238.03/Ar,238.03/Arstar,1/radio,---/R,170/Rcov,76\noexpand\pgfPT@espaco(5+)/Rion,597.6/Ei,1.38/eneg,30.39/eaff,+4\noexpand\pgfPT@virgula+6/O,+IV\noexpand\pgfPT@virgula+VI/ORoman,1405.3/Tmelt,1132.2/TmeltC,4404/Tboil,4131/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep21\noexpand\pgfPTeDistsep9\noexpand\pgfPTeDistsep2/eDist,[Rn]::5f+3\noexpand\pgfPT@virgula6d+1\noexpand\pgfPT@virgula7s+2/eConfign,[Rn]::7s+2\noexpand\pgfPT@virgula5f+3\noexpand\pgfPT@virgula6d+1/eConfignl,19100/d,27.665/Cp,27.5/kT,bcort/ls,285.37/lsa,586.95/lsb,495.48/lsc,1.74/lsca,1789/DiscY,8/DiscC,1/spectra,solido/cor}% +\def\pgfPT@data@xciii{Np/CS,[237]/Ar,/Arstar,1/radio,---/R,171/Rcov,110\noexpand\pgfPT@espaco(2+)\noexpand\pgfPT@virgula87\noexpand\pgfPT@espaco(4+)\noexpand\pgfPT@virgula71\noexpand\pgfPT@espaco(7+)/Rion,604.5/Ei,1.36/eneg,45.85/eaff,+5/O,+V/ORoman,917/Tmelt,644/TmeltC,4273/Tboil,4000/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep22\noexpand\pgfPTeDistsep9\noexpand\pgfPTeDistsep2/eDist,[Rn]::5f+4\noexpand\pgfPT@virgula6d+1\noexpand\pgfPT@virgula7s+2/eConfign,[Rn]::7s+2\noexpand\pgfPT@virgula5f+4\noexpand\pgfPT@virgula6d+1/eConfignl,20200/d,29.46/Cp,6.3/kT,bcort/ls,666.3/lsa,472.3/lsb,488.7/lsc,0.73/lsca,1940/DiscY,22/DiscC,1/spectra,sintetico/cor}% +\def\pgfPT@data@xciv{Pu/CS,[244]/Ar,/Arstar,1/radio,---/R,172/Rcov,100\noexpand\pgfPT@espaco(3+)\noexpand\pgfPT@virgula74\noexpand\pgfPT@espaco(5+)\noexpand\pgfPT@virgula71\noexpand\pgfPT@espaco(6+)/Rion,584.7/Ei,1.28/eneg,0/eaff,+4/O,+IV/ORoman,912.5/Tmelt,639.4/TmeltC,3501/Tboil,3228/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep24\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep2/eDist,[Rn]::5f+6\noexpand\pgfPT@virgula7s+2/eConfign,[Rn]::7s+2\noexpand\pgfPT@virgula5f+6/eConfignl,19816/d,35.5/Cp,6.74/kT,mono/ls,618.3/lsa,482.2/lsb,1096.3/lsc,1.77/lsca,1940/DiscY,22/DiscC,1/spectra,sintetico/cor}% +\def\pgfPT@data@xcv{Am/CS,[243]/Ar,/Arstar,1/radio,---/R,166/Rcov,126\noexpand\pgfPT@espaco(2+)\noexpand\pgfPT@virgula97.5\noexpand\pgfPT@espaco(3+)/Rion,578/Ei,1.13/eneg,9.93/eaff,+3/O,+III/ORoman,1449/Tmelt,1176/TmeltC,2880/Tboil,2607/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep25\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep2/eDist,[Rn]::5f+7\noexpand\pgfPT@virgula7s+2/eConfign,[Rn]::7s+2\noexpand\pgfPT@virgula5f+7/eConfignl,12000/d,62.7/Cp,10/kT,hex/ls,346.81/lsa,/lsb,1124.1/lsc,3.24/lsca,1944/DiscY,22/DiscC,1/spectra,sintetico/cor}% +\def\pgfPT@data@xcvi{Cm/CS,[247]/Ar,/Arstar,1/radio,---/R,166/Rcov,97\noexpand\pgfPT@espaco(3+)/Rion,581/Ei,1.28/eneg,27.17/eaff,+3/O,+III/ORoman,1613/Tmelt,1340/TmeltC,3383/Tboil,3110/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep25\noexpand\pgfPTeDistsep9\noexpand\pgfPTeDistsep2/eDist,[Rn]::5f+7\noexpand\pgfPT@virgula6d+1\noexpand\pgfPT@virgula7s+2/eConfign,[Rn]::7s+2\noexpand\pgfPT@virgula5f+7\noexpand\pgfPT@virgula6d+1/eConfignl,13510/d,---/Cp,---/kT,hex/ls,349.6/lsa,/lsb,1133.1/lsc,3.24/lsca,1944/DiscY,22/DiscC,1/spectra,sintetico/cor}% +\def\pgfPT@data@xcvii{Bk/CS,[247]/Ar,/Arstar,1/radio,---/R,---/Rcov,96\noexpand\pgfPT@espaco(3+)/Rion,601/Ei,1.3/eneg,0/eaff,+3/O,+III/ORoman,1323/Tmelt,1050/TmeltC,---/Tboil,---/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep27\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep2/eDist,[Rn]::5f+9\noexpand\pgfPT@virgula7s+2/eConfign,[Rn]::7s+2\noexpand\pgfPT@virgula5f+9/eConfignl,14780/d,---/Cp,10/kT,hex/ls,341.6/lsa,/lsb,1106.9/lsc,3.24/lsca,1949/DiscY,22/DiscC,1/spectra,sintetico/cor}% +\def\pgfPT@data@xcviii{Cf/CS,[251]/Ar,/Arstar,1/radio,---/R,---/Rcov,95\noexpand\pgfPT@espaco(3+)\noexpand\pgfPT@virgula82.1\noexpand\pgfPT@espaco(4+)/Rion,608/Ei,1.3/eneg,0/eaff,+3/O,+III/ORoman,1173/Tmelt,900/TmeltC,---/Tboil,---/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep28\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep2/eDist,[Rn]::5f+10\noexpand\pgfPT@virgula7s+2/eConfign,[Rn]::7s+2\noexpand\pgfPT@virgula5f+10/eConfignl,15100/d,---/Cp,---/kT,hex/ls,338/lsa,/lsb,1102.5/lsc,3.26/lsca,1950/DiscY,22/DiscC,1/spectra,sintetico/cor}% +\def\pgfPT@data@xcix{Es/CS,[252]/Ar,/Arstar,1/radio,---/R,---/Rcov,83.5\noexpand\pgfPT@espaco(3+)/Rion,619/Ei,1.3/eneg,0/eaff,+3/O,+III/ORoman,1133/Tmelt,860/TmeltC,---/Tboil,---/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep29\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep2/eDist,[Rn]::5f+11\noexpand\pgfPT@virgula7s+2/eConfign,[Rn]::7s+2\noexpand\pgfPT@virgula5f+11/eConfignl,8840/d,---/Cp,---/kT,fcc/ls,575/lsa,/lsb,/lsc,/lsca,1952/DiscY,22/DiscC,1/spectra,sintetico/cor}% +\def\pgfPT@data@c{Fm/CS,[257]/Ar,/Arstar,1/radio,---/R,---/Rcov,---/Rion,627/Ei,1.3/eneg,33.96/eaff,+3/O,+III/ORoman,1800/Tmelt,1527/TmeltC,---/Tboil,---/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep30\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep2/eDist,[Rn]::5f+12\noexpand\pgfPT@virgula7s+2/eConfign,[Rn]::7s+2\noexpand\pgfPT@virgula5f+12/eConfignl,---/d,---/Cp,---/kT,---/ls,---/lsa,/lsb,/lsc,/lsca,1952/DiscY,22/DiscC,0/spectra,sintetico/cor}% +\def\pgfPT@data@ci{Md/CS,[258]/Ar,/Arstar,1/radio,---/R,---/Rcov,---/Rion,635/Ei,1.3/eneg,93.91/eaff,+3/O,+III/ORoman,1100/Tmelt,827/TmeltC,---/Tboil,---/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep31\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep2/eDist,[Rn]::5f+13\noexpand\pgfPT@virgula7s+2/eConfign,[Rn]::7s+2\noexpand\pgfPT@virgula5f+13/eConfignl,---/d,---/Cp,---/kT,---/ls,---/lsa,/lsb,/lsc,/lsca,1955/DiscY,22/DiscC,0/spectra,sintetico/cor}% +\def\pgfPT@data@cii{No/CS,[259]/Ar,/Arstar,1/radio,---/R,---/Rcov,---/Rion,642/Ei,1.3/eneg,0/eaff,+2/O,+II/ORoman,1100/Tmelt,827/TmeltC,---/Tboil,---/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep2/eDist,[Rn]::5f+14\noexpand\pgfPT@virgula7s+2/eConfign,[Rn]::7s+2\noexpand\pgfPT@virgula5f+14/eConfignl,---/d,---/Cp,---/kT,---/ls,---/lsa,/lsb,/lsc,/lsca,1966/DiscY,24/DiscC,0/spectra,sintetico/cor}% +\def\pgfPT@data@ciii{Lr/CS,[266]/Ar,/Arstar,1/radio,---/R,---/Rcov,---/Rion,470/Ei,1.3/eneg,0/eaff,+3/O,+III/ORoman,1900/Tmelt,1627/TmeltC,---/Tboil,---/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep3/eDist,[Rn]::5f+14\noexpand\pgfPT@virgula7s+2\noexpand\pgfPT@virgula7p+1/eConfign,[Rn]::7s+2\noexpand\pgfPT@virgula5f+14\noexpand\pgfPT@virgula7p+1/eConfignl,---/d,---/Cp,---/kT,---/ls,---/lsa,/lsb,/lsc,/lsca,1961/DiscY,22/DiscC,0/spectra,sintetico/cor}% +\def\pgfPT@data@civ{Rf/CS,[267]/Ar,/Arstar,1/radio,---/R,---/Rcov,---/Rion,-580/Ei,---/eneg,---/eaff,+4/O,+IV/ORoman,---/Tmelt,---/TmeltC,---/Tboil,---/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep10\noexpand\pgfPTeDistsep2/eDist,[Rn]::5f+14\noexpand\pgfPT@virgula6d+2\noexpand\pgfPT@virgula7s+2/eConfign,[Rn]::7s+2\noexpand\pgfPT@virgula5f+14\noexpand\pgfPT@virgula6d+2/eConfignl,---/d,---/Cp,---/kT,---/ls,---/lsa,/lsb,/lsc,/lsca,1969/DiscY,16/DiscC,0/spectra,sintetico/cor}% +\def\pgfPT@data@cv{Db/CS,[268]/Ar,/Arstar,1/radio,---/R,---/Rcov,---/Rion,-665/Ei,---/eneg,---/eaff,+5/O,+V/ORoman,---/Tmelt,---/TmeltC,---/Tboil,---/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep11\noexpand\pgfPTeDistsep2/eDist,[Rn]::5f+14\noexpand\pgfPT@virgula6d+3\noexpand\pgfPT@virgula7s+2/eConfign,[Rn]::7s+2\noexpand\pgfPT@virgula5f+14\noexpand\pgfPT@virgula6d+3/eConfignl,---/d,---/Cp,---/kT,---/ls,---/lsa,/lsb,/lsc,/lsca,1970/DiscY,16/DiscC,0/spectra,sintetico/cor}% +\def\pgfPT@data@cvi{Sg/CS,[269]/Ar,/Arstar,1/radio,---/R,---/Rcov,---/Rion,-757/Ei,---/eneg,---/eaff,+6/O,+VI/ORoman,---/Tmelt,---/TmeltC,---/Tboil,---/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep12\noexpand\pgfPTeDistsep2/eDist,[Rn]::5f+14\noexpand\pgfPT@virgula6d+4\noexpand\pgfPT@virgula7s+2/eConfign,[Rn]::7s+2\noexpand\pgfPT@virgula5f+14\noexpand\pgfPT@virgula6d+4/eConfignl,---/d,---/Cp,---/kT,---/ls,---/lsa,/lsb,/lsc,/lsca,1974/DiscY,22/DiscC,0/spectra,sintetico/cor}% +\def\pgfPT@data@cvii{Bh/CS,[270]/Ar,/Arstar,1/radio,---/R,---/Rcov,---/Rion,-740/Ei,---/eneg,---/eaff,+7/O,+VII/ORoman,---/Tmelt,---/TmeltC,---/Tboil,---/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep13\noexpand\pgfPTeDistsep2/eDist,[Rn]::5f+14\noexpand\pgfPT@virgula6d+5\noexpand\pgfPT@virgula7s+2/eConfign,[Rn]::7s+2\noexpand\pgfPT@virgula5f+14\noexpand\pgfPT@virgula6d+5/eConfignl,---/d,---/Cp,---/kT,---/ls,---/lsa,/lsb,/lsc,/lsca,1981/DiscY,8/DiscC,0/spectra,sintetico/cor}% +\def\pgfPT@data@cviii{Hs/CS,[270]/Ar,/Arstar,1/radio,---/R,---/Rcov,---/Rion,-730/Ei,---/eneg,---/eaff,+8/O,+VIII/ORoman,---/Tmelt,---/TmeltC,---/Tboil,---/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep14\noexpand\pgfPTeDistsep2/eDist,[Rn]::5f+14\noexpand\pgfPT@virgula6d+6\noexpand\pgfPT@virgula7s+2/eConfign,[Rn]::7s+2\noexpand\pgfPT@virgula5f+14\noexpand\pgfPT@virgula6d+6/eConfignl,---/d,---/Cp,---/kT,---/ls,---/lsa,/lsb,/lsc,/lsca,1984/DiscY,8/DiscC,0/spectra,sintetico/cor}% +\def\pgfPT@data@cix{Mt/CS,[278]/Ar,/Arstar,1/radio,---/R,---/Rcov,---/Rion,-800/Ei,---/eneg,---/eaff,---/O,---/ORoman,---/Tmelt,---/TmeltC,---/Tboil,---/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep15\noexpand\pgfPTeDistsep2/eDist,[Rn]::5f+14\noexpand\pgfPT@virgula6d+7\noexpand\pgfPT@virgula7s+2/eConfign,[Rn]::7s+2\noexpand\pgfPT@virgula5f+14\noexpand\pgfPT@virgula6d+7/eConfignl,---/d,---/Cp,---/kT,---/ls,---/lsa,/lsb,/lsc,/lsca,1982/DiscY,8/DiscC,0/spectra,sintetico/cor}% +\def\pgfPT@data@cx{Ds/CS,[281]/Ar,/Arstar,1/radio,---/R,---/Rcov,---/Rion,-960/Ei,---/eneg,---/eaff,---/O,---/ORoman,---/Tmelt,---/TmeltC,---/Tboil,---/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep16\noexpand\pgfPTeDistsep2/eDist,[Rn]::5f+14\noexpand\pgfPT@virgula6d+8\noexpand\pgfPT@virgula7s+2/eConfign,[Rn]::7s+2\noexpand\pgfPT@virgula5f+14\noexpand\pgfPT@virgula6d+8/eConfignl,---/d,---/Cp,---/kT,---/ls,---/lsa,/lsb,/lsc,/lsca,1994/DiscY,8/DiscC,0/spectra,sintetico/cor}% +\def\pgfPT@data@cxi{Rg/CS,[282]/Ar,/Arstar,1/radio,---/R,---/Rcov,---/Rion,-1020/Ei,---/eneg,151/eaff,---/O,---/ORoman,---/Tmelt,---/TmeltC,---/Tboil,---/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep17\noexpand\pgfPTeDistsep2/eDist,[Rn]::5f+14\noexpand\pgfPT@virgula6d+9\noexpand\pgfPT@virgula7s+2/eConfign,[Rn]::7s+2\noexpand\pgfPT@virgula5f+14\noexpand\pgfPT@virgula6d+9/eConfignl,---/d,---/Cp,---/kT,---/ls,---/lsa,/lsb,/lsc,/lsca,1994/DiscY,8/DiscC,0/spectra,sintetico/cor}% +\def\pgfPT@data@cxii{Cn/CS,[285]/Ar,/Arstar,1/radio,---/R,---/Rcov,---/Rion,-1155/Ei,---/eneg,---/eaff,+2/O,+II/ORoman,---/Tmelt,---/TmeltC,---/Tboil,---/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep2/eDist,[Rn]::5f+14\noexpand\pgfPT@virgula6d+10\noexpand\pgfPT@virgula7s+2/eConfign,[Rn]::7s+2\noexpand\pgfPT@virgula5f+14\noexpand\pgfPT@virgula6d+10/eConfignl,---/d,---/Cp,---/kT,---/ls,---/lsa,/lsb,/lsc,/lsca,1996/DiscY,8/DiscC,0/spectra,sintetico/cor}% +\def\pgfPT@data@cxiii{Nh/CS,[286]/Ar,/Arstar,1/radio,---/R,---/Rcov,---/Rion,-707.2/Ei,---/eneg,66.6/eaff,---/O,---/ORoman,---/Tmelt,---/TmeltC,---/Tboil,---/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep3/eDist,[Rn]::5f+14\noexpand\pgfPT@virgula6d+10\noexpand\pgfPT@virgula7s+2\noexpand\pgfPT@virgula7p+1/eConfign,[Rn]::7s+2\noexpand\pgfPT@virgula5f+14\noexpand\pgfPT@virgula6d+10\noexpand\pgfPT@virgula7p+1/eConfignl,---/d,---/Cp,---/kT,---/ls,---/lsa,/lsb,/lsc,/lsca,2004/DiscY,16/DiscC,0/spectra,sintetico/cor}% +\def\pgfPT@data@cxiv{Fl/CS,[289]/Ar,/Arstar,1/radio,---/R,---/Rcov,---/Rion,-832.2/Ei,---/eneg,---/eaff,---/O,---/ORoman,---/Tmelt,---/TmeltC,---/Tboil,---/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep4/eDist,[Rn]::5f+14\noexpand\pgfPT@virgula6d+10\noexpand\pgfPT@virgula7s+2\noexpand\pgfPT@virgula7p+2/eConfign,[Rn]::7s+2\noexpand\pgfPT@virgula5f+14\noexpand\pgfPT@virgula6d+10\noexpand\pgfPT@virgula7p+2/eConfignl,---/d,---/Cp,---/kT,---/ls,---/lsa,/lsb,/lsc,/lsca,1998/DiscY,15/DiscC,0/spectra,sintetico/cor}% +\def\pgfPT@data@cxv{Mc/CS,[290]/Ar,/Arstar,1/radio,---/R,---/Rcov,---/Rion,-538.3/Ei,---/eneg,35.3/eaff,---/O,---/ORoman,---/Tmelt,---/TmeltC,---/Tboil,---/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep5/eDist,[Rn]::5f+14\noexpand\pgfPT@virgula6d+10\noexpand\pgfPT@virgula7s+2\noexpand\pgfPT@virgula7p+3/eConfign,[Rn]::7s+2\noexpand\pgfPT@virgula5f+14\noexpand\pgfPT@virgula6d+10\noexpand\pgfPT@virgula7p+3/eConfignl,---/d,---/Cp,---/kT,---/ls,---/lsa,/lsb,/lsc,/lsca,2003/DiscY,16/DiscC,0/spectra,sintetico/cor}% +\def\pgfPT@data@cxvi{Lv/CS,[293]/Ar,/Arstar,1/radio,---/R,---/Rcov,---/Rion,-663.9/Ei,---/eneg,74.9/eaff,---/O,---/ORoman,---/Tmelt,---/TmeltC,---/Tboil,---/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep6/eDist,[Rn]::5f+14\noexpand\pgfPT@virgula6d+10\noexpand\pgfPT@virgula7s+2\noexpand\pgfPT@virgula7p+4/eConfign,[Rn]::7s+2\noexpand\pgfPT@virgula5f+14\noexpand\pgfPT@virgula6d+10\noexpand\pgfPT@virgula7p+4/eConfignl,---/d,---/Cp,---/kT,---/ls,---/lsa,/lsb,/lsc,/lsca,2000/DiscY,15/DiscC,0/spectra,sintetico/cor}% +\def\pgfPT@data@cxvii{Ts/CS,[294]/Ar,/Arstar,1/radio,---/R,---/Rcov,---/Rion,-736.9/Ei,---/eneg,165.9/eaff,---/O,---/ORoman,---/Tmelt,---/TmeltC,---/Tboil,---/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep7/eDist,[Rn]::5f+14\noexpand\pgfPT@virgula6d+10\noexpand\pgfPT@virgula7s+2\noexpand\pgfPT@virgula7p+5/eConfign,[Rn]::7s+2\noexpand\pgfPT@virgula5f+14\noexpand\pgfPT@virgula6d+10\noexpand\pgfPT@virgula7p+5/eConfignl,---/d,---/Cp,---/kT,---/ls,---/lsa,/lsb,/lsc,/lsca,2009/DiscY,100/DiscC,0/spectra,sintetico/cor}% +\def\pgfPT@data@cxviii{Og/CS,[294]/Ar,/Arstar,1/radio,---/R,---/Rcov,---/Rion,-860.1/Ei,---/eneg,5.4/eaff,---/O,---/ORoman,---/Tmelt,---/TmeltC,---/Tboil,---/TboilC,2\noexpand\pgfPTeDistsep8\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep32\noexpand\pgfPTeDistsep18\noexpand\pgfPTeDistsep8/eDist,[Rn]::5f+14\noexpand\pgfPT@virgula6d+10\noexpand\pgfPT@virgula7s+2\noexpand\pgfPT@virgula7p+6/eConfign,[Rn]::7s+2\noexpand\pgfPT@virgula5f+14\noexpand\pgfPT@virgula6d+10\noexpand\pgfPT@virgula7p+6/eConfignl,---/d,---/Cp,---/kT,---/ls,---/lsa,/lsb,/lsc,/lsca,2002/DiscY,16/DiscC,0/spectra,sintetico/cor}% \endinput diff --git a/graphics/pgf/contrib/pgf-periodictable/pgfPT.drawing.keys.tex b/graphics/pgf/contrib/pgf-periodictable/pgfPT.drawing.keys.tex index 8c09f620e1..140577bcce 100644 --- a/graphics/pgf/contrib/pgf-periodictable/pgfPT.drawing.keys.tex +++ b/graphics/pgf/contrib/pgf-periodictable/pgfPT.drawing.keys.tex @@ -189,6 +189,12 @@ group label color/.default=blue!50!black,% label LaAc font/.get=\pgfPTlabLaAcfont,% label LaAc font/.store in=\pgfPTlabLaAcfont,% label LaAc font/.default=\footnotesize\itshape,% +group numbers/.get=\pgfPTgrnum,% new in v2.1.1 +group numbers/.store in=\pgfPTgrnum,% +group numbers/.default=arabic,% +Roman label color/.get=\pgfPTRomanlabgrcolor,% new in v2.1.1 +Roman label color/.store in=\pgfPTRomanlabgrcolor,% +Roman label color/.default=blue!70!white,% LaAc/.code=\pgfPT@LaAcstyle{#1},% LaAc/.default={s=true,f=\footnotesize\itshape},% per/.code=\pgfPT@perstyle{#1},% @@ -199,7 +205,30 @@ per+gr/.code=\pgfPT@pergrstyle{#1},% per+gr/.default={pc=red!50!black,gc=blue!50!black,f=\small\bfseries}% }% % setting keys with default values --------------------------------------------------------------- -\pgfkeys{/pgfPerTable/.cd,label font,period label color,group label color,label LaAc font}% +\pgfkeys{/pgfPerTable/.cd,label font,period label color,group label color,label LaAc font,group numbers,Roman label color}% +% Groups in 'old' Roman numerals +% CAS (USA) ; old IUPAC (Europe) -> +\newif\ifpgfPT@grRoman@CAS\newif\ifpgfPT@grRoman\newif\ifpgfPT@grarabic% +\def\pgfPT@gr@numbers#1{\edef\@pgfPT@grnum@atual{#1}\relax% +\edef\@pgfPT@grnum@CAS{CAS}\edef\@pgfPT@grnum@IUPAC{IUPAC}% +\edef\@pgfPT@grnum@CASarabic{CAS*}\edef\@pgfPT@grnum@IUPACarabic{IUPAC*}% +\pgfPT@grRoman@CASfalse\pgfPT@grRomanfalse\pgfPT@grarabicfalse% +\ifx\@pgfPT@grnum@atual\@pgfPT@grnum@CAS\relax\pgfPT@grRoman@CAStrue\pgfPT@grRomantrue\else% +\ifx\@pgfPT@grnum@atual\@pgfPT@grnum@IUPAC\relax\pgfPT@grRomantrue\else% +\ifx\@pgfPT@grnum@atual\@pgfPT@grnum@CASarabic\relax\pgfPT@grRoman@CAStrue\pgfPT@grRomantrue\pgfPT@grarabictrue\else% +\ifx\@pgfPT@grnum@atual\@pgfPT@grnum@IUPACarabic\relax\pgfPT@grRomantrue\pgfPT@grarabictrue\fi\fi\fi\fi% +}% +\def\pgfPT@gr@Roman#1{\edef\@pgfPT@Z@atual{#1}\relax% +\ifpgfPT@grRoman@CAS% CAS +\ifcase\@pgfPT@Z@atual\relax\or I\hspace{.1ex}A\or II\hspace{.1ex}A\or III\hspace{.1ex}B\or IV\hspace{.1ex}B\or V\hspace{.1ex}B\or VI\hspace{.1ex}B\or VII\hspace{.1ex}B\or% +\tikz{\path (0,0);\draw[line width=.2ex] (.1*\pgfPTcellwd,-.55ex) -- (.1*\pgfPTcellwd,0) -- (1.2*\pgfPTcellwd,0);}\or VIII\hspace{.1ex}B\or\tikz[xscale=-1]{\path (0,0);\draw[line width=.2ex] (.1*\pgfPTcellwd,-.55ex) -- (.1*\pgfPTcellwd,0) -- (1.2*\pgfPTcellwd,0);}% +\or I\hspace{.1ex}B\or II\hspace{.1ex}B\or III\hspace{.1ex}A\or IV\hspace{.1ex}A\or V\hspace{.1ex}A\or VI\hspace{.1ex}A\or VII\hspace{.1ex}A\or VIII\hspace{.1ex}A\fi% +\else% old IUPAC +\ifcase\@pgfPT@Z@atual\relax\or I\hspace{.1ex}A\or II\hspace{.1ex}A\or III\hspace{.1ex}A\or IV\hspace{.1ex}A\or V\hspace{.1ex}A\or VI\hspace{.1ex}A\or VII\hspace{.1ex}A\or +\tikz{\path (0,0);\draw[line width=.2ex] (.1*\pgfPTcellwd,-.55ex) -- (.1*\pgfPTcellwd,0) -- (1.2*\pgfPTcellwd,0);}\or VIII\hspace{.1ex}A\or\tikz[xscale=-1]{\path (0,0);\draw[line width=.2ex] (.1*\pgfPTcellwd,-.55ex) -- (.1*\pgfPTcellwd,0) -- (1.2*\pgfPTcellwd,0);}% +\or I\hspace{.1ex}B\or II\hspace{.1ex}B\or III\hspace{.1ex}B\or IV\hspace{.1ex}B\or V\hspace{.1ex}B\or VI\hspace{.1ex}B\or VII\hspace{.1ex}B\or0\fi% +\fi% +}% % end !! PGF keys: labels of periods and groups ------------------------------------------------ % % defining PGF keys: the cells of the periodic table to be drawn ------------------------------- @@ -347,7 +376,7 @@ name color/.store in=\pgfPTnamecolor,% name color/.default=black,% name font/.get=\pgfPTnamefont,% name font/.store in=\pgfPTnamefont,% -name font/.default=\fontseries{l}\selectfont\tiny,% +name font/.default=\tiny,% \fontseries{l}\selectfont (removed @ v2.1.2) name align/.get=\pgfPTnamealign,% new v1.0.0 name align/.store in=\pgfPTnamealign,% left|center|right name align/.default=center% @@ -444,16 +473,18 @@ eaff font/.default=\tiny\bfseries% % setting keys with default values ----------------------------------------------------------------- \pgfkeys{/pgfPerTable/.cd,eaff color,eaff font}% % end !! +\newif\ifpgfPTORoman% new in v2.1.1 \pgfkeys{/pgfPerTable/.cd,% O color/.get=\pgfPTOcolor,% O color/.store in=\pgfPTOcolor,% O color/.default=black,% O font/.get=\pgfPTOfont,% O font/.store in=\pgfPTOfont,% -O font/.default=\tiny\bfseries% +O font/.default=\tiny\bfseries,% +O Roman/.is if=pgfPTORoman% new in v2.1.1 }% % setting keys with default values ----------------------------------------------------------------- -\pgfkeys{/pgfPerTable/.cd,O color,O font}% +\pgfkeys{/pgfPerTable/.cd,O color,O font,O Roman=false}% % end !! \pgfkeys{/pgfPerTable/.cd,% Tmelt color/.get=\pgfPTTmeltcolor,% diff --git a/graphics/pgf/contrib/pgf-periodictable/pgfPT.names.tex b/graphics/pgf/contrib/pgf-periodictable/pgfPT.names.tex index 2c321dcd34..d4135f61b9 100644 --- a/graphics/pgf/contrib/pgf-periodictable/pgfPT.names.tex +++ b/graphics/pgf/contrib/pgf-periodictable/pgfPT.names.tex @@ -27,7 +27,7 @@ \def\pgfPT@nomes@iii{l\'{i}tio/pt,lithium/en,lithium/fr,Lithium/de,litio/it,litio/es,l\'{i}tio/br,\pgfPT@user@CSname@Li/user}% \def\pgfPT@nomes@iv{ber\'{i}lio/pt,beryllium/en,b\'{e}ryllium/fr,Beryllium/de,berillio/it,berilio/es,ber\'{i}lio/br,\pgfPT@user@CSname@Be/user}% \def\pgfPT@nomes@v{boro/pt,boron/en,bore/fr,Bor/de,boro/it,boro/es,boro/br,\pgfPT@user@CSname@B/user}% -\def\pgfPT@nomes@vi{carbono/pt,carbon/en,carbone/fr,Kohlenstoff/de,carbonio/it,carb\'{o}n/es,carbono/br,\pgfPT@user@CSname@C/user}% +\def\pgfPT@nomes@vi{carbono/pt,carbon/en,carbone/fr,Kohlenstoff/de,carbonio/it,carbono/es,carbono/br,\pgfPT@user@CSname@C/user}% \def\pgfPT@nomes@vii{azoto/pt,nitrogen/en,azote/fr,Stickstoff/de,azoto/it,nitr\'{o}geno/es,nitrog\^{e}nio/br,\pgfPT@user@CSname@N/user}% \def\pgfPT@nomes@viii{oxig\'{e}nio/pt,oxygen/en,oxyg\`{e}ne/fr,Sauerstoff/de,ossigeno/it,ox\'{i}geno/es,oxig\^{e}nio/br,\pgfPT@user@CSname@O/user}% \def\pgfPT@nomes@ix{fl\'{u}or/pt,fluorine/en,fluor/fr,Fluor/de,fluoro/it,fl\'{u}or/es,fl\'{u}or/br,\pgfPT@user@CSname@F/user}% @@ -47,7 +47,7 @@ \def\pgfPT@nomes@xxiii{van\'{a}dio/pt,vanadium/en,vanadium/fr,Vanadium/de,vanadio/it,vanadio/es,van\'{a}dio/br,\pgfPT@user@CSname@V/user}% \def\pgfPT@nomes@xxiv{cr\'{o}mio/pt,chromium/en,chrome/fr,Chrom/de,cromo/it,cromo/es,cr\^{o}mio/br,\pgfPT@user@CSname@Cr/user}% \def\pgfPT@nomes@xxv{mangan\'{e}sio/pt,manganese/en,mangan\`{e}se/fr,Mangan/de,manganese/it,manganeso/es,mangan\^{e}s/br,\pgfPT@user@CSname@Mn/user}% -\def\pgfPT@nomes@xxvi{ferro/pt,iron/en,fer/fr,Eisen/de,ferro/it,planchar/es,ferro/br,\pgfPT@user@CSname@Fe/user}% +\def\pgfPT@nomes@xxvi{ferro/pt,iron/en,fer/fr,Eisen/de,ferro/it,hierro/es,ferro/br,\pgfPT@user@CSname@Fe/user}% \def\pgfPT@nomes@xxvii{cobalto/pt,cobalt/en,cobalt/fr,Kobalt/de,cobalto/it,cobalto/es,cobalto/br,\pgfPT@user@CSname@Co/user}% \def\pgfPT@nomes@xxviii{n\'{i}quel/pt,nickel/en,nickel/fr,Nickel/de,nichel/it,n\'{i}quel/es,n\'{i}quel/br,\pgfPT@user@CSname@Ni/user}% \def\pgfPT@nomes@xxix{cobre/pt,copper/en,cuivre/fr,Kupfer/de,rame/it,cobre/es,cobre/br,\pgfPT@user@CSname@Cu/user}% @@ -82,7 +82,7 @@ \def\pgfPT@nomes@lviii{c\'{e}rio/pt,cerium/en,c\'{e}rium/fr,Cer/de,cerio/it,cerio/es,c\'{e}rio/br,\pgfPT@user@CSname@Ce/user}% \def\pgfPT@nomes@lix{praseod\'{i}mio/pt,praseodymium/en,pras\'{e}odyme/fr,Praseodym/de,praseodimio/it,praseodimio/es,praseod\'{i}mio/br,\pgfPT@user@CSname@Pr/user}% \def\pgfPT@nomes@lx{neod\'{i}mio/pt,neodymium/en,n\'{e}odyme/fr,Neodym/de,neodimio/it,neodimio/es,neod\'{i}mio/br,\pgfPT@user@CSname@Nd/user}% -\def\pgfPT@nomes@lxi{prom\'{e}cio/pt,promethium/en,prom\'{e}thium/fr,Promethium/de,prometeo/it,prometeo/es,prom\'{e}cio/br,\pgfPT@user@CSname@Pm/user}% +\def\pgfPT@nomes@lxi{prom\'{e}cio/pt,promethium/en,prom\'{e}thium/fr,Promethium/de,prometeo/it,prometio/es,prom\'{e}cio/br,\pgfPT@user@CSname@Pm/user}% \def\pgfPT@nomes@lxii{sam\'{a}rio/pt,samarium/en,samarium/fr,Samarium/de,samario/it,samario/es,sam\'{a}rio/br,\pgfPT@user@CSname@Sm/user}% \def\pgfPT@nomes@lxiii{eur\'{o}pio/pt,europium/en,europium/fr,Europium/de,europium/it,europio/es,eur\'{o}pio/br,\pgfPT@user@CSname@Eu/user}% \def\pgfPT@nomes@lxiv{gadol\'{i}nio/pt,gadolinium/en,gadolinium/fr,Gadolinium/de,gadolinio/it,gadolinio/es,gadol\'{i}nio/br,\pgfPT@user@CSname@Gd/user}% @@ -124,20 +124,20 @@ \def\pgfPT@nomes@c{f\'{e}rmio/pt,fermium/en,fermium/fr,Rermium/de,fermium/it,fermio/es,f\'{e}rmio/br,\pgfPT@user@CSname@Fm/user}% \def\pgfPT@nomes@ci{mendel\'{e}vio/pt,mendelevium/en,mendelevium/fr,Mendelevium/de,mendelevio/it,mendelevio/es,mendel\'{e}vio/br,\pgfPT@user@CSname@Md/user}% \def\pgfPT@nomes@cii{nob\'{e}lio/pt,nobelium/en,nobelium/fr,Nobelium/de,nobelium/it,nobelio/es,nob\'{e}lio/br,\pgfPT@user@CSname@No/user}% -\def\pgfPT@nomes@ciii{laur\^{e}ncio/pt,lawrencium/en,lawrencium/fr,Lawrencium/de,laurenzio/it,lawrencium/es,laur\^{e}ncio/br,\pgfPT@user@CSname@Lr/user}% +\def\pgfPT@nomes@ciii{laur\^{e}ncio/pt,lawrencium/en,lawrencium/fr,Lawrencium/de,laurenzio/it,lawrencio/es,laur\^{e}ncio/br,\pgfPT@user@CSname@Lr/user}% \def\pgfPT@nomes@civ{rutherf\'{o}rdio/pt,rutherfordium/en,rutherfordium/fr,Rutherfordium/de,rutherfordium/it,rutherfordio/es,rutherf\'{o}rdio/br,\pgfPT@user@CSname@Rf/user}% -\def\pgfPT@nomes@cv{d\'{u}bnio/pt,dubnium/en,dubnium/fr,Dubnium/de,dubnio/it,dubnium/es,d\'{u}bnio/br,\pgfPT@user@CSname@Db/user}% +\def\pgfPT@nomes@cv{d\'{u}bnio/pt,dubnium/en,dubnium/fr,Dubnium/de,dubnio/it,dubnio/es,d\'{u}bnio/br,\pgfPT@user@CSname@Db/user}% \def\pgfPT@nomes@cvi{seab\'{o}rgio/pt,seaborgium/en,seaborgium/fr,Seaborgium/de,seaborgio/it,seaborgio/es,seab\'{o}rgio/br,\pgfPT@user@CSname@Sg/user}% -\def\pgfPT@nomes@cvii{b\'{o}rio/pt,bohrium/en,bohrium/fr,Bohrium/de,bohrio/it,bohrium/es,b\'{o}hrio/br,\pgfPT@user@CSname@Bh/user}% -\def\pgfPT@nomes@cviii{h\'{a}ssio/pt,hassium/en,hassium/fr,Hassium/de,hassio/it,hassium/es,h\'{a}ssio/br,\pgfPT@user@CSname@Hs/user}% +\def\pgfPT@nomes@cvii{b\'{o}rio/pt,bohrium/en,bohrium/fr,Bohrium/de,bohrio/it,bohrio/es,b\'{o}hrio/br,\pgfPT@user@CSname@Bh/user}% +\def\pgfPT@nomes@cviii{h\'{a}ssio/pt,hassium/en,hassium/fr,Hassium/de,hassio/it,hasio/es,h\'{a}ssio/br,\pgfPT@user@CSname@Hs/user}% \def\pgfPT@nomes@cix{meitn\'{e}rio/pt,meitnerium/en,meitnerium/fr,Meitnerium/de,meitnerio/it,meitnerio/es,meitn\'{e}rio/br,\pgfPT@user@CSname@Mt/user}% -\def\pgfPT@nomes@cx{darmst\'{a}dio/pt,darmstadtium/en,darmstadtium/fr,Darmstadtium/de,darmstadtium/it,darmstadtium/es,darmst\'{a}dtio/br,\pgfPT@user@CSname@Ds/user}% +\def\pgfPT@nomes@cx{darmst\'{a}dio/pt,darmstadtium/en,darmstadtium/fr,Darmstadtium/de,darmstadtium/it,darmstatio/es,darmst\'{a}dtio/br,\pgfPT@user@CSname@Ds/user}% \def\pgfPT@nomes@cxi{roentg\'{e}nio/pt,roentgenium/en,roentgenium/fr,R\"{o}ntgenium/de,roentgenio/it,roentgenio/es,roentg\^{e}nio/br,\pgfPT@user@CSname@Rg/user}% \def\pgfPT@nomes@cxii{copern\'{i}cio/pt,copernicium/en,copernicium/fr,Copernicium/de,copernicium/it,copernicio/es,copern\'{i}cio/br,\pgfPT@user@CSname@Cn/user}% \def\pgfPT@nomes@cxiii{nip\'{o}nio/pt,nihonium/en,nihonium/fr,Nihonium/de,nihonium/it,nihonio/es,nip\^{o}nio/br,\pgfPT@user@CSname@Nh/user}% \def\pgfPT@nomes@cxiv{fler\'{o}vio/pt,flerovium/en,flerovium/fr,Flerovium/de,flerovio/it,flerovio/es,fler\'{o}vio/br,\pgfPT@user@CSname@Fl/user}% \def\pgfPT@nomes@cxv{mosc\'{o}vio/pt,moscovium/en,moscovium/fr,Moscovium/de,moscovium/it,moscovio/es,mosc\'{o}vio/br,\pgfPT@user@CSname@Mc/user}% -\def\pgfPT@nomes@cxvi{liverm\'{o}rio/pt,livermorium/en,livermorium/fr,Livermorium/de,livermorio/it,livermorium/es,liverm\'{o}rio/br,\pgfPT@user@CSname@Lv/user}% +\def\pgfPT@nomes@cxvi{liverm\'{o}rio/pt,livermorium/en,livermorium/fr,Livermorium/de,livermorio/it,livermorio/es,liverm\'{o}rio/br,\pgfPT@user@CSname@Lv/user}% \def\pgfPT@nomes@cxvii{tenesso/pt,tennessine/en,tennessine/fr,Tenness/de,tennessine/it,teneso/es,tenesso/br,\pgfPT@user@CSname@Ts/user}% \def\pgfPT@nomes@cxviii{ogan\'{e}sson/pt,oganesson/en,oganesson/fr,Oganesson/de,oganesson/it,oganes\'{o}n/es,oganess\^{o}nio/br,\pgfPT@user@CSname@Og/user}% \endinput% diff --git a/graphics/pgf/contrib/pgf-spectra/README b/graphics/pgf/contrib/pgf-spectra/README index 3f4fef79e2..12c4c6b8ad 100644 --- a/graphics/pgf/contrib/pgf-spectra/README +++ b/graphics/pgf/contrib/pgf-spectra/README @@ -1,4 +1,4 @@ -This is pgf-spectra, version 3.0.1 (27/04/2023). +This is pgf-spectra, version 3.0.1a (07/07/2024). This package provides the \pgfspectra[<options>] command which draws continuous and emission or absorption spectra for 98 elements and their ions. It was developed mainly for the writing of my own documentation and exams sheets supporting directly PDF output format. @@ -7,7 +7,7 @@ It also allows the user to draw a spectrum with their own personal data. The lines data extends from Extreme UV to Near IR (from 10 to 4000 nanometers). It is possible to redshift the lines of a spectrum, by directly entering the redshift value or the velocity and the angle to compute the redshift value. Spectral lines data can be presented in a table or exported to a file. -This package also provides color conversion (correlated color temperature), shadings for use with TikZ and/or PGFPLOTS, color maps for use with PGFPLOTS, +This package also provides color conversion (correlated color temperature), shadings for use with TikZ and/or PGFPLOTS, color maps for use with PGFPLOTS, displaying the spectral lines in a table and exporting the lines data files. ____________________________________________________________ @@ -18,13 +18,24 @@ ____________________________________________________________ ** Licence: released under the LaTeX Project Public License v1.3 or later, see http://www.latex-project.org/lppl.txt ____________________________________________________________ +*** v3.0.1a (07/07/2024) *** +Removed lines data outside the range 10nm - 4000nm (H, He, Be, C, Si, Kr, Sn, I) in LSE data file, which generate a package warning, e.g. +«Package pgf-spectra Warning: invalid wavelength (4051.1602nm). The wavelength must be lesser or equal to 4000nm (NIR)... on input line 27». +Fixed chemical symbol label width producing incorrect alignment on consecutive lines for the spectrum of some elements, e.g. +------------------------------------------------------- +\pgfspectraStyle[axis,begin=400,end=700,axis step=20,axis ticks=9,axis color=lightgray, axis font color=black,label,width=.88\textwidth,height=0.7cm] +\noindent\pgfspectra[element=Cl] + +\noindent\pgfspectra[element=Rn] +------------------------------------------------------- + *** v3.0.1 (27/04/2023) *** -Fixed a small bug dealing with the 'axis label'/'axis label text' background color, which occurred when setting a visible background with the 'back' key, e.g., +Fixed a small bug dealing with the 'axis label'/'axis label text' background color, which occurred when setting a visible background with the 'back' key, e.g., \pgfspectra[element=H,axis label text={wavenumber in nanometer},back=visible50] *** v3.0.0 (25/04/2023) *** -In the \pgfspectra command, syntax for the key 'lines' has been updated: it is now possible to specify a continuous range using 'start wavelength to end +In the \pgfspectra command, syntax for the key 'lines' has been updated: it is now possible to specify a continuous range using 'start wavelength to end wavelength', for instance, 'lines={380 to 500}' or 'lines={380 to 500,633}' or 'lines={633,555,380 to 500}'. New keys for \pgfspectra: - axis label @@ -45,12 +56,12 @@ ____________________________________________________________ Previous versions *** v2.2.0 (21/02/2023) *** -LSE data renormalized to lower values within TeX capabilities. This prevents 'Dimension too large' errors and subsequent errors in spectrum drawing when +LSE data renormalized to lower values within TeX capabilities. This prevents 'Dimension too large' errors and subsequent errors in spectrum drawing when using the 'relative intensity' key. -Added maximum intensities in IR, visible an UV ranges for both data sources (NIST and LSE). Now, when using the 'relative intensity' key, the interval of -wavelengths is detected and the respective maximum intensity is used. For example, if the spectrum is within the visible range, say between 400 and 700 -nanometers, the maximum visible intensity will be used. The same is true for ranges only in IR or UV ranges. But, if the spectrum to be drawn is in more -than one region - for example, from 300 to 1000 or from 400 to 1000 or from 300 to 700 nanometers - the maximum intensity that will be used is defined +Added maximum intensities in IR, visible an UV ranges for both data sources (NIST and LSE). Now, when using the 'relative intensity' key, the interval of +wavelengths is detected and the respective maximum intensity is used. For example, if the spectrum is within the visible range, say between 400 and 700 +nanometers, the maximum visible intensity will be used. The same is true for ranges only in IR or UV ranges. But, if the spectrum to be drawn is in more +than one region - for example, from 300 to 1000 or from 400 to 1000 or from 300 to 700 nanometers - the maximum intensity that will be used is defined as the maximum intensity of all data. Fixed some typos in the manual. diff --git a/graphics/pgf/contrib/pgf-spectra/pgf-spectra.data.LSE.tex b/graphics/pgf/contrib/pgf-spectra/pgf-spectra.data.LSE.tex index 53303b35f6..9bb4004bfb 100644 --- a/graphics/pgf/contrib/pgf-spectra/pgf-spectra.data.LSE.tex +++ b/graphics/pgf/contrib/pgf-spectra/pgf-spectra.data.LSE.tex @@ -31,12 +31,12 @@ % (see Es, Bk...) % \protected\def\pgfspectra@elt@data#1{\relax\ignorespaces\global\pgfspectra@datanotfoundtrue\relax% -\pgfspectra@elt@search{#1}{H}{[92.6226 15 0],[93.0748 20 0],[93.7803 30 0],[94.9743 50 0],[97.2537 100 0],[102.5722 300 0],[121.5668 1000 0],[121.5674 500 0],[383.5384 5 0],[388.9049 6 0],[397.0072 8 0],[410.174 15 0],[434.047 30 0],[486.133 80 0],[656.272 120 0],[656.2852 180 0],[954.597 5 0],[1004.94 7 0],[1093.81 12 0],[1281.81 20 0],[1875.1 40 0],[2165.5301 5 0],[2625.15 8 0],[4051.1602 15 0],[4652.5102 4 0],[7457.8 6 0],[12368.5 3 0]}{ALLx1000x1000x0x0x0x0x0}{UVx1000x1000x0x0x0x0x0}{VISx180x180x0x0x0x0x0}{IVx40x40x0x0x0x0x0}% -\pgfspectra@elt@search{#1}{He}{[23.1454 15 1],[23.2584 20 1],[23.4347 30 1],[23.7331 50 1],[24.3027 100 1],[25.6317 300 1],[30.378 1000 1],[30.3786 500 1],[32.0293 10 0],[50.55 2 0],[50.5684 3 0],[50.5912 4 0],[50.62 5 0],[50.657 7 0],[50.7058 10 0],[50.7718 15 0],[50.8643 20 0],[50.9998 25 0],[51.2098 35 0],[51.5616 50 0],[52.2213 100 0],[53.703 400 0],[58.4334 1000 0],[59.1412 50 0],[95.87 5 1],[97.211 6 1],[99.236 8 1],[102.527 15 1],[108.494 30 1],[121.509 35 1],[121.517 50 1],[164.034 120 1],[164.047 180 1],[238.54 7 1],[251.12 9 1],[257.76 50 0],[272.319 1 0],[273.33 12 1],[276.38 2 0],[281.82 10 0],[282.908 4 0],[294.511 10 0],[301.37 40 0],[318.774 20 0],[320.296 3 1],[320.31 15 1],[335.455 1 0],[344.759 2 0],[358.727 1 0],[361.364 3 0],[363.423 2 0],[370.5 3 0],[373.286 1 0],[381.9607 10 0],[381.976 1 0],[388.865 500 0],[396.4729 20 0],[400.927 1 0],[402.6191 50 0],[402.636 5 0],[412.082 12 0],[412.099 2 0],[414.376 3 0],[438.7929 10 0],[443.755 3 0],[447.1479 200 0],[447.168 25 0],[468.54 6 1],[468.57 30 1],[471.3146 30 0],[471.338 4 0],[492.1931 20 0],[501.5678 100 0],[504.774 10 0],[541.152 5 1],[587.562 500 0],[587.597 100 0],[656.01 8 1],[667.815 100 0],[686.748 3 0],[706.519 200 0],[706.571 30 0],[728.135 50 0],[781.615 1 0],[836.169 2 0],[906.327 2 0],[921.034 2 0],[946.361 10 0],[951.66 4 0],[952.617 3 0],[952.927 1 0],[960.342 1 0],[970.26 3 0],[1002.773 6 0],[1003.116 2 0],[1012.36 15 1],[1013.85 1 0],[1031.123 10 0],[1031.154 2 0],[1066.765 3 0],[1082.909 300 0],[1083.025 1000 0],[1083.034 2000 0],[1091.305 9 0],[1091.71 3 0],[1162.64 4 1],[1196.912 30 0],[1252.752 20 0],[1278.499 50 0],[1279.057 20 0],[1284.596 7 0],[1296.845 10 0],[1298.489 2 0],[1508.364 12 0],[1700.2471 200 0],[1855.5551 1 0],[1863.6801 6 1],[1868.534 500 0],[1869.723 200 0],[1908.9381 100 0],[1954.308 20 0],[2058.1301 1000 0],[2112.007 80 0],[2112.143 10 0],[2113.2029 20 0],[3090.85 3 1],[4047.8898 4 0]}{ALLx2000x2000x1000x0x0x0x0}{UVx1000x1000x1000x0x0x0x0}{VISx500x500x30x0x0x0x0}{IVx2000x2000x15x0x0x0x0}% +\pgfspectra@elt@search{#1}{H}{[92.6226 15 0],[93.0748 20 0],[93.7803 30 0],[94.9743 50 0],[97.2537 100 0],[102.5722 300 0],[121.5668 1000 0],[121.5674 500 0],[383.5384 5 0],[388.9049 6 0],[397.0072 8 0],[410.174 15 0],[434.047 30 0],[486.133 80 0],[656.272 120 0],[656.2852 180 0],[954.597 5 0],[1004.94 7 0],[1093.81 12 0],[1281.81 20 0],[1875.1 40 0],[2165.5301 5 0],[2625.15 8 0]}{ALLx1000x1000x0x0x0x0x0}{UVx1000x1000x0x0x0x0x0}{VISx180x180x0x0x0x0x0}{IVx40x40x0x0x0x0x0}%,[4051.1602 15 0],[4652.5102 4 0],[7457.8 6 0],[12368.5 3 0] +\pgfspectra@elt@search{#1}{He}{[23.1454 15 1],[23.2584 20 1],[23.4347 30 1],[23.7331 50 1],[24.3027 100 1],[25.6317 300 1],[30.378 1000 1],[30.3786 500 1],[32.0293 10 0],[50.55 2 0],[50.5684 3 0],[50.5912 4 0],[50.62 5 0],[50.657 7 0],[50.7058 10 0],[50.7718 15 0],[50.8643 20 0],[50.9998 25 0],[51.2098 35 0],[51.5616 50 0],[52.2213 100 0],[53.703 400 0],[58.4334 1000 0],[59.1412 50 0],[95.87 5 1],[97.211 6 1],[99.236 8 1],[102.527 15 1],[108.494 30 1],[121.509 35 1],[121.517 50 1],[164.034 120 1],[164.047 180 1],[238.54 7 1],[251.12 9 1],[257.76 50 0],[272.319 1 0],[273.33 12 1],[276.38 2 0],[281.82 10 0],[282.908 4 0],[294.511 10 0],[301.37 40 0],[318.774 20 0],[320.296 3 1],[320.31 15 1],[335.455 1 0],[344.759 2 0],[358.727 1 0],[361.364 3 0],[363.423 2 0],[370.5 3 0],[373.286 1 0],[381.9607 10 0],[381.976 1 0],[388.865 500 0],[396.4729 20 0],[400.927 1 0],[402.6191 50 0],[402.636 5 0],[412.082 12 0],[412.099 2 0],[414.376 3 0],[438.7929 10 0],[443.755 3 0],[447.1479 200 0],[447.168 25 0],[468.54 6 1],[468.57 30 1],[471.3146 30 0],[471.338 4 0],[492.1931 20 0],[501.5678 100 0],[504.774 10 0],[541.152 5 1],[587.562 500 0],[587.597 100 0],[656.01 8 1],[667.815 100 0],[686.748 3 0],[706.519 200 0],[706.571 30 0],[728.135 50 0],[781.615 1 0],[836.169 2 0],[906.327 2 0],[921.034 2 0],[946.361 10 0],[951.66 4 0],[952.617 3 0],[952.927 1 0],[960.342 1 0],[970.26 3 0],[1002.773 6 0],[1003.116 2 0],[1012.36 15 1],[1013.85 1 0],[1031.123 10 0],[1031.154 2 0],[1066.765 3 0],[1082.909 300 0],[1083.025 1000 0],[1083.034 2000 0],[1091.305 9 0],[1091.71 3 0],[1162.64 4 1],[1196.912 30 0],[1252.752 20 0],[1278.499 50 0],[1279.057 20 0],[1284.596 7 0],[1296.845 10 0],[1298.489 2 0],[1508.364 12 0],[1700.2471 200 0],[1855.5551 1 0],[1863.6801 6 1],[1868.534 500 0],[1869.723 200 0],[1908.9381 100 0],[1954.308 20 0],[2058.1301 1000 0],[2112.007 80 0],[2112.143 10 0],[2113.2029 20 0],[3090.85 3 1]}{ALLx2000x2000x1000x0x0x0x0}{UVx1000x1000x1000x0x0x0x0}{VISx500x500x30x0x0x0x0}{IVx2000x2000x15x0x0x0x0}%,[4047.8898 4 0] \pgfspectra@elt@search{#1}{Li}{[149.293 3 1],[149.297 5 1],[149.304 1 1],[165.308 3 1],[165.313 5 1],[165.321 1 1],[233.688 3 1],[233.691 5 1],[233.7 2 1],[239.439 1 0],[242.543 3 0],[247.506 10 0],[255.17 24 1],[256.231 15 0],[265.729 2 1],[265.73 3 1],[272.824 0 1],[272.829 5 1],[272.832 2 1],[273.047 3 1],[273.055 1 1],[274.12 5 0],[293.402 2 1],[293.407 2 1],[293.412 5 1],[293.425 1 1],[302.912 3 1],[302.914 3 1],[315.531 3 1],[315.533 4 1],[319.626 1 1],[319.633 9 1],[319.636 4 1],[319.933 5 1],[319.943 2 1],[323.266 17 0],[371.4 1 1],[371.416 5 1],[371.427 6 1],[371.429 8 1],[371.44 7 1],[371.441 10 1],[371.451 1 1],[371.458 0 1],[371.87 3 0],[379.472 6 0],[391.53 20 0],[391.535 20 0],[398.548 10 0],[398.554 10 0],[413.256 40 0],[413.262 40 0],[427.307 20 0],[427.313 20 0],[432.542 5 1],[432.547 5 1],[432.554 1 1],[460.283 13 0],[460.289 13 0],[467.151 0 1],[467.165 6 1],[467.17 2 1],[467.806 3 1],[467.829 1 1],[488.132 4 1],[488.139 4 1],[488.149 1 1],[497.166 8 0],[497.175 8 0],[548.355 600 1],[548.565 600 1],[610.354 320 0],[610.365 320 0],[670.776 3600 0],[670.791 3600 0],[812.623 48 0],[812.645 48 0]}{ALLx3600x3600x600x0x0x0x0}{UVx24x17x24x0x0x0x0}{VISx3600x3600x600x0x0x0x0}{IVx48x48x0x0x0x0x0}% -\pgfspectra@elt@search{#1}{Be}{[7.61 1 2],[7.648 2 2],[7.853 3 2],[7.866 4 2],[7.892 1 2],[8.189 5 2],[8.238 10 2],[8.32 20 2],[8.476 30 2],[8.831 50 2],[10.025 100 2],[50.999 3 2],[54.931 2 2],[58.208 6 2],[66.132 4 2],[67.559 8 2],[72.559 4 2],[72.571 5 1],[74.358 5 1],[74.623 7 2],[76.775 2 2],[77.537 8 1],[84.206 20 1],[92.525 2 1],[94.356 10 1],[97.327 10 1],[102.693 8 1],[103.632 5 1],[104.823 15 1],[111.469 1 2],[114.303 20 1],[119.719 60 1],[121.312 2 2],[121.432 1 2],[136.225 2 2],[140.152 1 2],[142.126 10 2],[142.286 5 2],[143.517 1 2],[144.077 2 2],[151.23 20 1],[151.243 60 1],[166.149 100 0],[175.469 2 2],[177.612 15 1],[177.634 20 1],[191.703 3 2],[192.967 5 0],[194.368 10 0],[195.497 60 2],[196.459 50 0],[198.513 5 0],[199.801 60 0],[205.59 50 0],[205.601 100 0],[207.694 75 2],[208.038 60 2],[211.856 25 2],[212.227 15 2],[212.557 10 0],[212.568 20 0],[212.72 15 2],[213.725 5 2],[214.5 25 0],[217.499 55 0],[217.51 55 0],[219.157 5 2],[234.861 950 0],[235.066 20 0],[235.071 60 0],[235.083 200 0],[241.334 2 1],[241.346 16 1],[245.384 20 1],[249.454 35 0],[249.458 35 0],[249.473 100 0],[250.743 16 1],[261.799 5 1],[261.813 20 1],[265.045 100 0],[265.055 60 0],[265.062 200 0],[265.069 60 0],[265.076 100 0],[269.746 5 1],[269.758 20 1],[272.888 20 1],[273.805 30 0],[289.813 20 0],[289.819 10 0],[289.825 20 0],[298.606 30 0],[298.642 10 0],[301.933 60 0],[301.949 30 0],[301.953 30 0],[301.96 20 0],[304.652 10 1],[304.669 30 1],[311.081 10 0],[311.092 10 0],[311.099 20 0],[313.042 480 1],[313.107 320 1],[319.381 20 0],[319.71 20 1],[319.715 30 1],[320.86 20 0],[322.963 60 0],[323.352 2 1],[324.162 10 1],[324.183 30 1],[326.902 15 0],[327.458 100 1],[327.467 30 1],[328.291 30 0],[332.101 30 0],[332.109 30 0],[332.134 220 0],[334.543 20 0],[336.763 60 0],[345.137 5 0],[345.518 300 0],[347.656 20 0],[351.554 300 0],[355.5 10 0],[372.036 100 2],[373.63 100 0],[381.345 700 0],[386.513 40 0],[386.542 80 0],[386.551 1 0],[386.572 6 0],[386.603 100 0],[424.914 90 2],[425.305 100 0],[425.376 60 0],[436.066 300 1],[436.099 500 1],[440.794 400 0],[448.552 2 2],[448.73 100 2],[449.509 1 2],[449.78 140 2],[457.266 12 0],[467.333 700 1],[467.342 1000 1],[470.937 6 0],[482.816 200 1],[484.916 40 0],[485.822 2 1],[508.775 80 0],[521.812 8 1],[521.833 20 1],[525.586 3 1],[527.028 64 1],[527.081 500 1],[540.304 20 1],[541.021 20 1],[614.201 140 2],[622.911 10 0],[627.943 16 1],[627.973 30 1],[647.354 30 0],[654.789 60 1],[655.836 60 1],[656.452 30 0],[663.644 2 1],[675.672 1 1],[675.713 2 1],[678.656 30 0],[688.422 1 0],[688.444 6 0],[698.275 100 0],[715.44 6 0],[715.465 40 0],[720.913 100 0],[740.12 3 1],[740.143 2 1],[755.19 10 0],[761.868 10 0],[761.888 20 0],[809.006 60 0],[815.899 5 0],[815.924 10 0],[825.407 4 0],[828.707 10 0],[854.736 30 0],[854.767 60 0],[880.137 300 0],[888.218 6 0],[919.045 40 0],[924.392 20 0],[934.389 1 1],[939.274 40 0],[947.643 2 1],[947.703 16 1],[984.732 20 0],[989.563 10 0],[989.596 20 0],[993.978 80 0],[1009.552 16 1],[1009.573 20 1],[1011.992 60 1],[1033.103 80 0],[1106.646 30 0],[1117.373 1 1],[1149.639 120 0],[1162.516 2 1],[1166.025 2 1],[1209.536 100 1],[1209.818 30 1],[1464.392 100 0],[1464.475 60 0],[1615.772 200 0],[1785.5381 80 0],[1785.6631 120 0],[1814.3539 100 0],[3177.5051 160 0],[3177.8699 200 0]}{ALLx1000x950x1000x140x0x0x0}{UVx950x950x480x100x0x0x0}{VISx1000x700x1000x140x0x0x0}{IVx300x300x100x0x0x0x0}% -\pgfspectra@elt@search{#1}{B}{[4.859 30 4],[5.268 10 3],[6.031 30 3],[34.4 160 3],[38.5 450 3],[41.18 40 2],[41.87 285 3],[51.077 20 2],[51.085 40 2],[51.824 150 2],[51.827 75 2],[67.7 110 2],[67.714 160 2],[69.395 70 1],[73.136 40 1],[73.144 40 1],[75.848 40 2],[75.867 70 2],[88.254 110 1],[88.268 110 1],[98.467 40 1],[108.188 110 1],[108.207 110 1],[111.22 70 3],[116.89 450 3],[117.09 70 3],[123.016 110 1],[136.246 220 1],[160.046 70 0],[160.073 120 0],[162.358 160 1],[162.377 110 1],[162.402 220 1],[162.416 70 1],[162.434 160 1],[166.304 100 0],[166.687 150 0],[166.729 200 0],[181.786 150 0],[181.837 200 0],[182.591 300 0],[182.641 300 0],[184.281 110 1],[195.383 20 2],[206.578 550 2],[206.638 250 0],[206.665 250 0],[206.693 100 0],[206.719 300 0],[206.723 450 2],[207.709 160 2],[208.891 500 0],[208.957 500 0],[222.03 70 1],[223.409 40 2],[223.459 70 2],[232.303 40 1],[232.867 40 1],[239.32 40 1],[239.505 220 1],[245.969 40 1],[245.99 40 1],[249.677 1000 0],[249.773 1000 0],[252.47 70 3],[253.03 160 3],[282.168 450 3],[282.457 70 3],[282.585 285 3],[291.808 160 1],[303.226 110 1],[317.933 70 1],[332.318 110 1],[332.36 110 1],[345.129 450 1],[412.193 285 1],[419.479 110 1],[424.298 40 2],[424.361 70 2],[447.21 110 1],[447.285 110 1],[448.705 220 2],[449.773 360 2],[478.421 70 1],[494.038 110 1],[608.044 110 1],[628.547 70 1],[703.02 70 1],[703.19 40 1],[783.525 110 2],[784.141 70 2],[866.722 20 0],[866.857 70 0],[1166.004 800 0],[1166.247 570 0],[1562.908 125 0],[1624.038 200 0],[1624.467 250 0],[1899.433 235 0]}{ALLx1000x1000x450x550x450x30x0}{UVx1000x1000x450x550x450x30x0}{VISx360x0x285x360x0x0x0}{IVx800x800x0x110x0x0x0}% -\pgfspectra@elt@search{#1}{C}{[3.4973 110 4],[4.0268 450 4],[22.719 110 4],[24.491 250 3],[24.866 160 4],[24.874 160 4],[28.914 200 3],[28.923 250 3],[31.242 570 3],[31.246 500 3],[37.169 250 2],[37.175 250 2],[37.178 150 2],[38.403 650 3],[38.418 700 3],[38.6203 500 2],[41.952 400 3],[41.971 500 3],[45.0734 200 2],[45.946 400 2],[45.952 500 2],[45.963 570 2],[51.1522 250 2],[53.5288 250 2],[53.808 300 2],[53.8149 350 2],[53.8312 400 2],[57.4281 350 2],[59.5022 9 1],[68.7053 30 1],[68.7345 50 1],[85.8092 10 1],[85.8559 20 1],[90.3624 30 1],[90.3962 60 1],[90.4142 150 1],[90.448 30 1],[97.703 800 2],[100.986 9 1],[101.008 10 1],[101.037 10 1],[103.6337 80 1],[103.7018 150 1],[115.791 150 0],[115.8019 150 0],[115.8035 150 0],[117.493 370 2],[117.526 350 2],[117.559 330 2],[117.571 500 2],[117.599 350 2],[117.637 370 2],[118.8992 150 0],[118.9447 150 0],[118.9631 200 0],[119.3009 300 0],[119.3031 300 0],[119.324 300 0],[119.3264 300 0],[119.3393 100 0],[119.3649 150 0],[119.3679 150 0],[119.4064 100 0],[119.4488 100 0],[126.1552 100 0],[127.7245 250 0],[127.7282 250 0],[127.7513 300 0],[127.755 300 0],[128.0333 200 0],[131.1363 100 0],[132.3951 9 1],[132.9578 120 0],[132.96 120 0],[133.4532 150 1],[133.5708 300 1],[135.4288 100 0],[135.584 150 0],[136.4164 120 0],[145.9032 100 0],[146.3336 200 0],[146.7402 120 0],[148.1764 150 0],[154.8202 1000 3],[155.0774 900 3],[156.031 150 0],[156.0683 400 0],[156.0708 400 0],[156.1341 100 0],[156.1438 400 0],[165.6266 150 0],[165.6928 120 0],[165.7008 300 0],[165.738 120 0],[165.7907 120 0],[165.8122 150 0],[175.1823 500 0],[193.0905 1000 0],[216.294 250 2],[227.091 40 4],[227.725 5 4],[227.792 20 4],[229.687 800 2],[247.856 800 0],[250.912 250 1],[251.206 350 1],[252.441 200 3],[252.998 300 3],[257.483 250 1],[269.775 150 2],[272.485 110 2],[272.53 150 2],[272.59 150 2],[274.128 350 1],[274.649 250 1],[283.671 1000 1],[283.76 800 1],[298.211 200 2],[299.262 800 1],[387.619 350 1],[387.641 350 1],[387.666 350 1],[391.898 570 1],[392.069 800 1],[405.606 150 2],[406.794 200 2],[406.891 250 2],[407.026 250 2],[407.452 250 1],[407.585 350 1],[416.286 150 2],[418.69 250 2],[426.7 800 1],[426.726 1000 1],[432.556 200 2],[464.742 600 2],[465.025 520 2],[465.147 375 2],[465.83 200 3],[466.586 200 2],[477.175 200 0],[493.205 200 0],[494.388 5 4],[494.456 5 4],[505.217 200 0],[513.294 350 1],[513.328 350 1],[514.349 350 1],[514.516 570 1],[515.109 400 1],[538.034 300 0],[564.807 250 1],[566.247 350 1],[569.592 450 2],[580.133 250 3],[581.198 200 3],[582.642 150 2],[588.977 570 1],[589.159 350 1],[600.113 200 0],[600.603 250 0],[600.718 110 0],[601.068 150 0],[601.322 300 0],[601.484 250 0],[657.805 800 1],[658.288 570 1],[658.761 200 0],[674.438 150 2],[678.39 250 1],[703.725 150 2],[711.318 250 0],[711.519 250 0],[711.563 250 1],[711.699 200 0],[711.99 350 1],[723.132 800 1],[723.642 1000 1],[761.265 150 2],[772.62 90 3],[786.089 200 0],[805.862 200 0],[819.648 300 2],[833.299 150 2],[833.515 520 0],[850.032 300 2],[906.143 250 0],[906.247 200 0],[907.828 200 0],[908.851 250 0],[909.483 450 0],[911.18 300 0],[940.573 800 0],[960.303 150 0],[962.08 250 0],[965.844 300 0],[1068.308 200 0],[1069.125 300 0],[1161.929 12 0],[1162.883 23 0],[1165.885 13 0],[1165.968 47 0],[1166.963 24 0],[1174.822 85 0],[1175.332 142 0],[1175.476 114 0],[1177.754 11 0],[1189.291 17 0],[1189.575 30 0],[1261.41 26 0],[1350.227 20 0],[1439.965 38 0],[1440.325 16 0],[1442.012 61 0],[1442.903 12 0],[1444.224 13 0],[1655.966 12 0],[1689.0381 50 0],[1733.8561 10 0],[1744.86 11 0],[1813.9801 13 0],[1972.199 23 0]}{ALLx1000x1000x1000x800x1000x450x0}{UVx1000x1000x1000x800x1000x450x0}{VISx1000x300x1000x600x250x5x0}{IVx800x800x0x300x0x0x0}% +\pgfspectra@elt@search{#1}{Be}{[10.025 100 2],[50.999 3 2],[54.931 2 2],[58.208 6 2],[66.132 4 2],[67.559 8 2],[72.559 4 2],[72.571 5 1],[74.358 5 1],[74.623 7 2],[76.775 2 2],[77.537 8 1],[84.206 20 1],[92.525 2 1],[94.356 10 1],[97.327 10 1],[102.693 8 1],[103.632 5 1],[104.823 15 1],[111.469 1 2],[114.303 20 1],[119.719 60 1],[121.312 2 2],[121.432 1 2],[136.225 2 2],[140.152 1 2],[142.126 10 2],[142.286 5 2],[143.517 1 2],[144.077 2 2],[151.23 20 1],[151.243 60 1],[166.149 100 0],[175.469 2 2],[177.612 15 1],[177.634 20 1],[191.703 3 2],[192.967 5 0],[194.368 10 0],[195.497 60 2],[196.459 50 0],[198.513 5 0],[199.801 60 0],[205.59 50 0],[205.601 100 0],[207.694 75 2],[208.038 60 2],[211.856 25 2],[212.227 15 2],[212.557 10 0],[212.568 20 0],[212.72 15 2],[213.725 5 2],[214.5 25 0],[217.499 55 0],[217.51 55 0],[219.157 5 2],[234.861 950 0],[235.066 20 0],[235.071 60 0],[235.083 200 0],[241.334 2 1],[241.346 16 1],[245.384 20 1],[249.454 35 0],[249.458 35 0],[249.473 100 0],[250.743 16 1],[261.799 5 1],[261.813 20 1],[265.045 100 0],[265.055 60 0],[265.062 200 0],[265.069 60 0],[265.076 100 0],[269.746 5 1],[269.758 20 1],[272.888 20 1],[273.805 30 0],[289.813 20 0],[289.819 10 0],[289.825 20 0],[298.606 30 0],[298.642 10 0],[301.933 60 0],[301.949 30 0],[301.953 30 0],[301.96 20 0],[304.652 10 1],[304.669 30 1],[311.081 10 0],[311.092 10 0],[311.099 20 0],[313.042 480 1],[313.107 320 1],[319.381 20 0],[319.71 20 1],[319.715 30 1],[320.86 20 0],[322.963 60 0],[323.352 2 1],[324.162 10 1],[324.183 30 1],[326.902 15 0],[327.458 100 1],[327.467 30 1],[328.291 30 0],[332.101 30 0],[332.109 30 0],[332.134 220 0],[334.543 20 0],[336.763 60 0],[345.137 5 0],[345.518 300 0],[347.656 20 0],[351.554 300 0],[355.5 10 0],[372.036 100 2],[373.63 100 0],[381.345 700 0],[386.513 40 0],[386.542 80 0],[386.551 1 0],[386.572 6 0],[386.603 100 0],[424.914 90 2],[425.305 100 0],[425.376 60 0],[436.066 300 1],[436.099 500 1],[440.794 400 0],[448.552 2 2],[448.73 100 2],[449.509 1 2],[449.78 140 2],[457.266 12 0],[467.333 700 1],[467.342 1000 1],[470.937 6 0],[482.816 200 1],[484.916 40 0],[485.822 2 1],[508.775 80 0],[521.812 8 1],[521.833 20 1],[525.586 3 1],[527.028 64 1],[527.081 500 1],[540.304 20 1],[541.021 20 1],[614.201 140 2],[622.911 10 0],[627.943 16 1],[627.973 30 1],[647.354 30 0],[654.789 60 1],[655.836 60 1],[656.452 30 0],[663.644 2 1],[675.672 1 1],[675.713 2 1],[678.656 30 0],[688.422 1 0],[688.444 6 0],[698.275 100 0],[715.44 6 0],[715.465 40 0],[720.913 100 0],[740.12 3 1],[740.143 2 1],[755.19 10 0],[761.868 10 0],[761.888 20 0],[809.006 60 0],[815.899 5 0],[815.924 10 0],[825.407 4 0],[828.707 10 0],[854.736 30 0],[854.767 60 0],[880.137 300 0],[888.218 6 0],[919.045 40 0],[924.392 20 0],[934.389 1 1],[939.274 40 0],[947.643 2 1],[947.703 16 1],[984.732 20 0],[989.563 10 0],[989.596 20 0],[993.978 80 0],[1009.552 16 1],[1009.573 20 1],[1011.992 60 1],[1033.103 80 0],[1106.646 30 0],[1117.373 1 1],[1149.639 120 0],[1162.516 2 1],[1166.025 2 1],[1209.536 100 1],[1209.818 30 1],[1464.392 100 0],[1464.475 60 0],[1615.772 200 0],[1785.5381 80 0],[1785.6631 120 0],[1814.3539 100 0],[3177.5051 160 0],[3177.8699 200 0]}{ALLx1000x950x1000x140x0x0x0}{UVx950x950x480x100x0x0x0}{VISx1000x700x1000x140x0x0x0}{IVx300x300x100x0x0x0x0}%[7.61 1 2],[7.648 2 2],[7.853 3 2],[7.866 4 2],[7.892 1 2],[8.189 5 2],[8.238 10 2],[8.32 20 2],[8.476 30 2],[8.831 50 2], +\pgfspectra@elt@search{#1}{B}{[34.4 160 3],[38.5 450 3],[41.18 40 2],[41.87 285 3],[51.077 20 2],[51.085 40 2],[51.824 150 2],[51.827 75 2],[67.7 110 2],[67.714 160 2],[69.395 70 1],[73.136 40 1],[73.144 40 1],[75.848 40 2],[75.867 70 2],[88.254 110 1],[88.268 110 1],[98.467 40 1],[108.188 110 1],[108.207 110 1],[111.22 70 3],[116.89 450 3],[117.09 70 3],[123.016 110 1],[136.246 220 1],[160.046 70 0],[160.073 120 0],[162.358 160 1],[162.377 110 1],[162.402 220 1],[162.416 70 1],[162.434 160 1],[166.304 100 0],[166.687 150 0],[166.729 200 0],[181.786 150 0],[181.837 200 0],[182.591 300 0],[182.641 300 0],[184.281 110 1],[195.383 20 2],[206.578 550 2],[206.638 250 0],[206.665 250 0],[206.693 100 0],[206.719 300 0],[206.723 450 2],[207.709 160 2],[208.891 500 0],[208.957 500 0],[222.03 70 1],[223.409 40 2],[223.459 70 2],[232.303 40 1],[232.867 40 1],[239.32 40 1],[239.505 220 1],[245.969 40 1],[245.99 40 1],[249.677 1000 0],[249.773 1000 0],[252.47 70 3],[253.03 160 3],[282.168 450 3],[282.457 70 3],[282.585 285 3],[291.808 160 1],[303.226 110 1],[317.933 70 1],[332.318 110 1],[332.36 110 1],[345.129 450 1],[412.193 285 1],[419.479 110 1],[424.298 40 2],[424.361 70 2],[447.21 110 1],[447.285 110 1],[448.705 220 2],[449.773 360 2],[478.421 70 1],[494.038 110 1],[608.044 110 1],[628.547 70 1],[703.02 70 1],[703.19 40 1],[783.525 110 2],[784.141 70 2],[866.722 20 0],[866.857 70 0],[1166.004 800 0],[1166.247 570 0],[1562.908 125 0],[1624.038 200 0],[1624.467 250 0],[1899.433 235 0]}{ALLx1000x1000x450x550x450x30x0}{UVx1000x1000x450x550x450x30x0}{VISx360x0x285x360x0x0x0}{IVx800x800x0x110x0x0x0}%[4.859 30 4],[5.268 10 3],[6.031 30 3], +\pgfspectra@elt@search{#1}{C}{[22.719 110 4],[24.491 250 3],[24.866 160 4],[24.874 160 4],[28.914 200 3],[28.923 250 3],[31.242 570 3],[31.246 500 3],[37.169 250 2],[37.175 250 2],[37.178 150 2],[38.403 650 3],[38.418 700 3],[38.6203 500 2],[41.952 400 3],[41.971 500 3],[45.0734 200 2],[45.946 400 2],[45.952 500 2],[45.963 570 2],[51.1522 250 2],[53.5288 250 2],[53.808 300 2],[53.8149 350 2],[53.8312 400 2],[57.4281 350 2],[59.5022 9 1],[68.7053 30 1],[68.7345 50 1],[85.8092 10 1],[85.8559 20 1],[90.3624 30 1],[90.3962 60 1],[90.4142 150 1],[90.448 30 1],[97.703 800 2],[100.986 9 1],[101.008 10 1],[101.037 10 1],[103.6337 80 1],[103.7018 150 1],[115.791 150 0],[115.8019 150 0],[115.8035 150 0],[117.493 370 2],[117.526 350 2],[117.559 330 2],[117.571 500 2],[117.599 350 2],[117.637 370 2],[118.8992 150 0],[118.9447 150 0],[118.9631 200 0],[119.3009 300 0],[119.3031 300 0],[119.324 300 0],[119.3264 300 0],[119.3393 100 0],[119.3649 150 0],[119.3679 150 0],[119.4064 100 0],[119.4488 100 0],[126.1552 100 0],[127.7245 250 0],[127.7282 250 0],[127.7513 300 0],[127.755 300 0],[128.0333 200 0],[131.1363 100 0],[132.3951 9 1],[132.9578 120 0],[132.96 120 0],[133.4532 150 1],[133.5708 300 1],[135.4288 100 0],[135.584 150 0],[136.4164 120 0],[145.9032 100 0],[146.3336 200 0],[146.7402 120 0],[148.1764 150 0],[154.8202 1000 3],[155.0774 900 3],[156.031 150 0],[156.0683 400 0],[156.0708 400 0],[156.1341 100 0],[156.1438 400 0],[165.6266 150 0],[165.6928 120 0],[165.7008 300 0],[165.738 120 0],[165.7907 120 0],[165.8122 150 0],[175.1823 500 0],[193.0905 1000 0],[216.294 250 2],[227.091 40 4],[227.725 5 4],[227.792 20 4],[229.687 800 2],[247.856 800 0],[250.912 250 1],[251.206 350 1],[252.441 200 3],[252.998 300 3],[257.483 250 1],[269.775 150 2],[272.485 110 2],[272.53 150 2],[272.59 150 2],[274.128 350 1],[274.649 250 1],[283.671 1000 1],[283.76 800 1],[298.211 200 2],[299.262 800 1],[387.619 350 1],[387.641 350 1],[387.666 350 1],[391.898 570 1],[392.069 800 1],[405.606 150 2],[406.794 200 2],[406.891 250 2],[407.026 250 2],[407.452 250 1],[407.585 350 1],[416.286 150 2],[418.69 250 2],[426.7 800 1],[426.726 1000 1],[432.556 200 2],[464.742 600 2],[465.025 520 2],[465.147 375 2],[465.83 200 3],[466.586 200 2],[477.175 200 0],[493.205 200 0],[494.388 5 4],[494.456 5 4],[505.217 200 0],[513.294 350 1],[513.328 350 1],[514.349 350 1],[514.516 570 1],[515.109 400 1],[538.034 300 0],[564.807 250 1],[566.247 350 1],[569.592 450 2],[580.133 250 3],[581.198 200 3],[582.642 150 2],[588.977 570 1],[589.159 350 1],[600.113 200 0],[600.603 250 0],[600.718 110 0],[601.068 150 0],[601.322 300 0],[601.484 250 0],[657.805 800 1],[658.288 570 1],[658.761 200 0],[674.438 150 2],[678.39 250 1],[703.725 150 2],[711.318 250 0],[711.519 250 0],[711.563 250 1],[711.699 200 0],[711.99 350 1],[723.132 800 1],[723.642 1000 1],[761.265 150 2],[772.62 90 3],[786.089 200 0],[805.862 200 0],[819.648 300 2],[833.299 150 2],[833.515 520 0],[850.032 300 2],[906.143 250 0],[906.247 200 0],[907.828 200 0],[908.851 250 0],[909.483 450 0],[911.18 300 0],[940.573 800 0],[960.303 150 0],[962.08 250 0],[965.844 300 0],[1068.308 200 0],[1069.125 300 0],[1161.929 12 0],[1162.883 23 0],[1165.885 13 0],[1165.968 47 0],[1166.963 24 0],[1174.822 85 0],[1175.332 142 0],[1175.476 114 0],[1177.754 11 0],[1189.291 17 0],[1189.575 30 0],[1261.41 26 0],[1350.227 20 0],[1439.965 38 0],[1440.325 16 0],[1442.012 61 0],[1442.903 12 0],[1444.224 13 0],[1655.966 12 0],[1689.0381 50 0],[1733.8561 10 0],[1744.86 11 0],[1813.9801 13 0],[1972.199 23 0]}{ALLx1000x1000x1000x800x1000x450x0}{UVx1000x1000x1000x800x1000x450x0}{VISx1000x300x1000x600x250x5x0}{IVx800x800x0x300x0x0x0}%[3.4973 110 4],[4.0268 450 4], \pgfspectra@elt@search{#1}{N}{[16.6947 52 4],[18.175 400 3],[18.6069 52 4],[18.6153 62 4],[19.17 400 3],[19.29 400 3],[19.687 500 3],[19.723 500 3],[20.26 500 3],[20.594 500 3],[20.597 500 3],[20.603 500 3],[20.9303 90 4],[21.72 500 3],[21.79 500 3],[22.34 500 3],[22.512 800 3],[22.521 800 3],[23.412 600 3],[23.42 600 3],[23.425 600 3],[23.607 550 3],[23.799 500 3],[23.87 500 3],[23.88 600 3],[23.962 500 3],[24.72 900 3],[24.7561 90 4],[24.7706 120 4],[24.843 500 3],[24.846 500 3],[24.848 500 3],[25.795 500 2],[25.85 650 2],[25.919 700 2],[26.009 800 2],[26.045 600 3],[26.128 800 2],[26.291 500 2],[26.523 500 2],[26.527 500 2],[26.6196 150 4],[26.6379 200 4],[26.87 500 2],[27.099 650 3],[28.342 250 3],[28.348 300 3],[28.358 350 3],[28.556 600 3],[29.77 600 3],[29.782 700 3],[30.032 650 3],[30.3123 90 3],[30.328 500 3],[31.4715 150 2],[31.485 200 2],[31.4877 90 2],[31.5053 150 3],[32.2503 120 3],[32.257 150 3],[32.2724 200 3],[32.3175 120 3],[32.326 600 2],[33.505 300 3],[33.835 500 2],[34.02 500 2],[35.193 500 3],[35.198 500 2],[35.306 700 3],[36.2833 120 2],[36.2881 150 2],[36.2946 150 2],[36.2985 90 2],[37.4204 300 2],[37.4441 350 2],[38.748 500 2],[42.077 500 3],[45.1869 250 2],[45.2226 300 2],[46.374 650 3],[64.4634 285 1],[64.4837 360 1],[64.5178 450 1],[64.75 140 0],[66.0286 360 1],[67.1016 170 1],[67.1386 285 1],[67.163 150 1],[67.1773 160 1],[67.2001 170 1],[68.4996 500 2],[68.5513 570 2],[68.5816 650 2],[68.6335 500 2],[69.27 350 0],[71.3518 90 4],[71.386 150 4],[74.6984 285 1],[74.8195 150 4],[74.8291 200 4],[76.3336 500 2],[76.4359 570 2],[76.5148 570 3],[77.1544 250 2],[77.1901 300 2],[77.2385 350 2],[77.2891 200 2],[77.2975 150 2],[77.5965 650 1],[88.567 90 0],[90.9697 90 0],[91.0278 80 0],[91.0645 40 0],[91.5612 450 1],[91.5962 450 1],[91.6012 550 1],[91.6701 650 1],[92.1992 520 3],[92.1992 520 3],[92.2519 500 3],[92.2519 500 3],[92.3057 480 3],[92.4283 520 3],[95.3415 90 0],[95.3655 100 0],[95.397 130 0],[95.5335 1000 3],[96.399 130 0],[96.4626 115 0],[96.5041 70 0],[97.9842 650 2],[97.9919 700 2],[98.979 900 2],[99.1514 700 2],[99.1579 1000 2],[103.616 150 3],[106.7614 90 0],[106.8612 60 0],[107.871 90 3],[108.399 450 1],[108.458 600 1],[108.5546 430 1],[108.5701 650 1],[109.7237 175 0],[109.8095 115 0],[109.826 115 0],[110.036 105 0],[110.0465 40 0],[110.1291 90 0],[113.4165 360 0],[113.4415 385 0],[113.498 410 0],[114.365 105 0],[116.3884 130 0],[116.4206 60 0],[116.4325 105 0],[116.7448 270 0],[116.8334 105 0],[116.8417 60 0],[116.8536 195 0],[117.651 230 0],[117.663 105 0],[117.7695 195 0],[118.3031 500 2],[118.455 570 2],[118.801 90 3],[119.955 410 0],[120.0223 385 0],[120.071 360 0],[122.5026 175 0],[122.537 160 0],[122.841 130 0],[122.879 160 0],[123.8821 1000 4],[124.2804 900 4],[124.3179 360 0],[124.3306 315 0],[131.054 290 0],[131.095 250 0],[131.9 230 0],[131.968 315 0],[132.657 115 0],[132.792 115 0],[138.7371 150 2],[141.194 360 0],[149.2625 700 0],[149.282 490 0],[149.4675 640 0],[154.9336 90 4],[161.633 200 4],[161.969 350 4],[171.855 1000 3],[172.9945 250 2],[174.2729 775 0],[174.5252 700 0],[174.7848 570 2],[175.1218 350 2],[175.1657 650 2],[180.4486 150 2],[180.5669 200 2],[184.642 150 2],[186.037 90 4],[188.506 350 2],[188.522 400 2],[190.799 200 2],[191.955 150 2],[191.977 150 2],[192.065 300 2],[192.084 150 2],[192.13 200 2],[206.401 200 2],[206.442 250 2],[206.868 120 2],[207.109 90 2],[208.034 90 3],[209.553 160 1],[209.62 70 1],[209.686 110 1],[211.759 90 2],[212.15 90 2],[213.018 110 1],[214.278 160 1],[214.731 90 2],[218.82 200 2],[218.838 150 2],[220.609 160 1],[228.669 160 1],[228.844 110 1],[231.649 220 1],[231.669 160 1],[231.705 285 1],[231.809 90 3],[246.127 160 1],[247.769 150 3],[249.683 110 1],[249.697 70 1],[252.022 110 1],[252.079 160 1],[252.223 220 1],[259.094 110 1],[264.565 250 3],[264.618 300 3],[264.696 350 3],[268.218 250 2],[268.92 90 2],[270.984 160 1],[279.922 110 1],[282.364 110 1],[285.916 60 4],[288.527 160 1],[297.452 90 4],[298.078 150 4],[298.131 250 4],[299.843 60 4],[300.683 220 1],[307.825 90 3],[336.734 120 2],[343.715 360 1],[346.337 90 3],[347.871 570 3],[348.299 500 3],[348.496 400 3],[374.754 90 3],[375.467 90 2],[377.105 120 2],[383.837 285 1],[391.9 360 1],[393.852 90 2],[395.585 450 1],[399.5 1000 1],[399.863 150 2],[400.358 200 2],[403.508 360 1],[404.131 550 1],[404.353 360 1],[405.776 150 3],[409.733 250 2],[409.994 140 0],[410.343 200 2],[410.995 185 0],[417.616 285 1],[419.576 120 2],[420.01 150 2],[422.774 285 1],[423.691 285 1],[423.705 220 1],[424.178 450 1],[433.291 90 2],[434.568 120 2],[437.911 300 2],[443.274 285 1],[444.703 650 1],[451.091 90 2],[451.486 120 2],[453.041 360 1],[460.148 550 1],[460.373 350 4],[460.633 90 3],[460.716 450 1],[461.387 360 1],[461.998 250 4],[462.139 450 1],[463.054 870 1],[463.414 90 2],[464.064 120 2],[464.308 550 1],[478.813 285 1],[480.329 450 1],[484.738 180 0],[485.882 90 2],[486.715 150 2],[489.511 285 1],[491.494 160 0],[493.512 210 0],[494.456 200 4],[495.023 160 0],[496.398 350 0],[498.737 285 1],[499.436 450 1],[500.148 650 1],[500.27 360 1],[500.515 870 1],[500.732 550 1],[501.062 450 1],[501.639 360 1],[502.566 360 1],[504.51 550 1],[528.12 185 0],[529.268 140 0],[531.435 90 2],[532.082 200 2],[532.718 150 2],[549.567 450 1],[553.536 285 1],[566.663 650 1],[567.602 550 1],[567.956 870 1],[568.621 450 1],[571.077 450 1],[574.73 285 1],[575.25 700 0],[576.475 240 0],[582.954 265 0],[585.404 235 0],[592.781 360 1],[593.178 550 1],[594.024 285 1],[594.165 650 1],[595.239 285 1],[599.943 160 0],[600.847 210 0],[616.776 285 1],[637.962 360 1],[638.077 150 3],[641.165 185 0],[642.064 210 0],[642.302 210 0],[642.832 210 0],[643.768 185 0],[644.094 235 0],[645.411 90 2],[645.79 185 0],[646.702 120 2],[646.844 300 0],[648.171 265 0],[648.205 750 1],[648.27 360 0],[648.375 300 0],[648.48 325 0],[649.122 160 0],[649.954 210 0],[650.631 185 0],[661.056 750 1],[662.254 185 0],[663.694 185 0],[664.496 235 0],[664.65 185 0],[665.346 235 0],[665.651 210 0],[672.262 185 0],[739.864 210 0],[740.612 160 0],[740.624 265 0],[742.364 685 0],[744.229 785 0],[746.831 900 0],[760.88 185 0],[761.846 60 4],[776.224 450 1],[818.487 400 0],[818.802 400 0],[820.036 250 0],[821.072 300 0],[821.634 570 0],[822.314 400 0],[824.239 400 0],[843.874 550 1],[856.774 500 0],[859.4 570 0],[862.924 650 0],[865.589 500 0],[867.608 220 1],[868.028 700 0],[868.34 650 0],[868.615 500 0],[868.743 110 1],[869.9 110 1],[870.325 500 0],[871.054 160 1],[871.17 570 0],[871.883 500 0],[872.889 250 0],[874.736 200 0],[938.68 500 0],[939.279 570 0],[946.068 250 0],[986.333 200 0],[986.541 160 1],[986.821 110 1],[988.739 160 1],[989.109 220 1],[996.186 160 1],[996.934 220 1],[1002.327 285 1],[1003.545 220 1],[1006.515 220 1],[1007.012 160 1],[1010.513 250 0],[1010.889 300 0],[1011.248 350 0],[1011.464 400 0],[1012.627 110 1],[1053.957 250 0],[1207.451 200 0],[1218.682 380 0],[1228.897 225 0],[1232.876 290 0],[1238.165 310 0],[1243.84 180 0],[1246.125 510 0],[1246.962 920 0],[1342.961 500 0],[1358.133 840 0],[1358.773 180 0],[1360.227 180 0],[1362.418 290 0],[1475.707 250 0],[1486.887 100 0],[1496.66 160 0],[1558.227 180 0],[1751.658 120 0],[1758.4859 100 0],[1787.826 100 0]}{ALLx1000x920x1000x1000x1000x1000x0}{UVx1000x775x650x1000x1000x1000x0}{VISx1000x900x1000x300x150x350x0}{IVx920x920x550x0x0x0x0}% \pgfspectra@elt@search{#1}{O}{[12.4616 80 4],[13.5523 110 4],[13.8109 80 4],[13.9029 110 4],[15.1447 80 4],[15.1477 110 4],[15.1546 150 4],[16.4574 80 4],[16.4657 110 4],[16.4709 80 4],[16.6235 80 4],[16.799 150 4],[17.0219 110 4],[17.2169 450 4],[18.5745 250 4],[19.2751 375 4],[19.2799 450 4],[19.2906 520 4],[19.3003 80 4],[19.4593 200 4],[19.586 150 3],[19.601 200 3],[20.2161 80 4],[20.2224 80 4],[20.2283 80 4],[20.2334 80 4],[20.2393 150 4],[20.378 110 4],[20.382 150 4],[20.385 100 4],[20.389 200 4],[20.394 100 4],[20.718 110 3],[20.724 150 3],[20.7794 300 4],[21.504 150 4],[21.5103 200 4],[21.5245 250 4],[21.6018 250 4],[22.0352 520 4],[22.7372 80 4],[22.7469 80 4],[22.7511 150 4],[22.7549 80 4],[22.7634 80 4],[22.7689 80 4],[23.1823 150 4],[23.346 140 3],[23.35 150 3],[23.352 110 3],[23.356 200 3],[23.36 110 3],[23.836 90 3],[23.857 180 3],[24.8459 110 4],[25.256 110 3],[25.295 110 3],[25.308 150 3],[26.039 300 3],[26.056 250 3],[26.434 80 2],[26.448 110 2],[26.697 110 2],[26.698 150 2],[26.703 150 2],[27.738 150 2],[27.963 300 3],[27.994 375 3],[28.571 110 3],[28.584 150 3],[28.6448 110 4],[29.562 80 2],[29.566 110 2],[29.572 120 2],[30.341 150 2],[30.346 150 2],[30.352 140 2],[30.362 160 2],[30.369 160 2],[30.38 250 2],[30.56 200 2],[30.566 250 2],[30.57 190 2],[30.577 300 2],[30.584 190 2],[30.662 200 3],[30.688 150 3],[32.0979 450 2],[32.845 300 2],[32.874 250 2],[34.531 300 2],[35.514 110 2],[35.533 90 2],[35.547 80 2],[35.902 200 2],[35.922 190 2],[35.938 150 2],[37.38 210 2],[37.4 200 2],[37.408 300 2],[37.416 190 2],[37.433 200 2],[37.444 210 2],[39.5558 450 2],[43.498 300 2],[50.7391 800 2],[50.7683 900 2],[50.8182 1000 2],[52.5795 1000 2],[53.783 250 1],[53.826 300 1],[53.909 220 1],[53.955 200 1],[53.985 150 1],[55.333 700 3],[55.4075 775 3],[55.4514 850 3],[55.5261 700 3],[59.7818 700 2],[59.9598 1000 2],[60.8398 580 3],[60.97 110 2],[60.9829 640 3],[61.004 160 2],[61.075 200 2],[61.085 100 2],[61.6952 270 3],[61.7005 150 3],[61.7036 200 3],[62.4617 520 3],[62.513 580 3],[62.5852 640 3],[62.973 1000 4],[64.4148 150 1],[67.295 200 1],[67.377 150 1],[68.1272 230 4],[68.5544 70 0],[70.2332 800 2],[70.2822 800 2],[70.2899 900 2],[70.385 1000 2],[71.8484 900 1],[71.8562 600 1],[74.4794 70 0],[75.8678 700 4],[75.9441 640 4],[76.0228 580 4],[76.0445 775 4],[76.1128 640 4],[76.2003 700 4],[77.0793 70 0],[77.1056 90 0],[77.4518 520 4],[77.5321 70 0],[77.9734 200 3],[77.9821 315 3],[77.9912 360 3],[77.9997 200 3],[78.7711 640 3],[79.0109 520 3],[79.0199 700 3],[79.1973 70 0],[79.666 300 1],[80.22 200 3],[80.2255 160 3],[80.4267 90 0],[80.4848 70 0],[80.5295 70 0],[80.581 80 0],[83.2762 240 1],[83.2927 600 2],[83.3332 450 1],[83.3742 780 2],[83.4467 600 1],[83.5096 600 2],[83.5292 800 2],[87.7879 40 0],[92.1296 130 3],[92.1366 160 3],[92.2008 80 0],[92.3367 200 3],[92.3433 130 3],[93.5193 90 0],[94.8686 40 0],[97.1738 90 0],[97.6448 40 0],[98.8773 160 0],[99.0204 40 0],[102.5762 250 0],[102.7431 90 0],[103.923 160 0],[104.0942 60 0],[115.2152 40 0],[130.2168 900 0],[130.4858 600 0],[130.6029 300 0],[133.8612 200 3],[134.2992 130 3],[134.3512 230 3],[137.1292 640 4],[147.689 160 2],[150.672 160 4],[159.001 285 2],[159.133 160 2],[164.368 315 4],[170.7996 160 4],[176.012 220 2],[176.042 110 2],[176.322 220 2],[176.448 220 2],[176.778 750 2],[176.824 550 2],[177.167 360 2],[177.3 110 2],[177.385 110 2],[177.916 220 2],[178.103 160 2],[178.485 160 2],[178.966 220 2],[184.826 110 2],[185.662 110 2],[187.278 285 2],[187.287 285 2],[187.494 285 2],[192.004 160 2],[192.075 110 2],[192.152 110 2],[192.349 220 2],[192.382 110 2],[192.694 110 2],[201.327 360 2],[202.696 160 2],[204.567 220 2],[205.274 160 2],[228.342 30 1],[228.489 30 1],[229.332 110 1],[230.035 200 1],[231.305 30 1],[231.612 30 1],[231.679 30 1],[231.968 50 1],[232.215 30 1],[233.931 30 1],[239.044 200 2],[239.433 80 2],[241.16 110 1],[242.284 80 2],[242.555 80 1],[243.356 250 1],[243.606 80 1],[243.883 80 2],[244.426 80 1],[244.555 300 1],[244.9372 200 3],[245.004 200 3],[245.499 200 2],[249.344 200 3],[249.377 200 3],[250.773 200 3],[250.919 230 3],[251.72 200 3],[255.806 200 2],[268.753 80 2],[269.549 110 2],[273.334 300 1],[274.746 110 1],[278.101 1000 4],[278.699 920 4],[278.985 775 4],[283.626 160 3],[292.145 160 3],[294.133 200 4],[294.165 210 4],[295.968 80 2],[297.229 265 0],[298.378 250 2],[301.763 80 2],[302.345 80 2],[304.302 80 2],[304.713 200 2],[305.93 110 2],[306.342 460 3],[307.161 410 3],[312.171 80 2],[312.262 160 1],[312.944 220 1],[313.286 110 2],[313.482 450 1],[313.844 285 1],[314.466 160 4],[320.966 160 3],[323.857 80 2],[326.098 200 2],[326.546 300 2],[326.731 80 2],[327.098 220 1],[327.352 220 1],[327.769 220 1],[328.759 360 1],[330.515 160 1],[330.66 160 1],[331.23 80 2],[334.074 110 2],[334.808 230 3],[334.911 270 3],[335.427 160 3],[337.54 200 3],[337.72 220 1],[337.806 130 3],[338.12 360 3],[338.552 360 3],[339.025 285 1],[339.679 270 3],[340.352 360 3],[340.738 220 1],[340.966 230 3],[340.984 160 1],[341.169 410 3],[341.364 230 3],[344.41 80 2],[345.512 80 2],[347.081 285 1],[348.983 200 3],[349.224 160 3],[356.039 230 3],[356.333 270 3],[369.87 80 2],[370.275 80 2],[370.337 80 2],[370.724 110 2],[371.275 220 1],[371.508 110 2],[372.593 315 3],[372.733 285 1],[372.903 360 3],[373.685 410 3],[373.992 160 1],[374.4 110 2],[374.489 230 3],[374.949 360 1],[375.467 150 2],[375.721 80 2],[375.987 250 2],[379.126 110 2],[380.314 160 1],[382.341 120 0],[391.196 450 1],[391.929 160 1],[394.729 185 0],[394.748 160 0],[394.759 140 0],[395.437 220 1],[395.461 100 0],[396.159 200 2],[397.326 450 1],[398.22 220 1],[406.99 160 1],[407.216 285 1],[407.587 450 1],[408.391 80 1],[408.714 50 1],[408.927 150 1],[409.724 110 1],[410.5 220 1],[411.922 285 1],[412.399 100 4],[413.281 160 1],[414.606 50 1],[415.33 220 1],[418.546 285 1],[418.979 450 1],[423.327 80 0],[425.374 50 1],[425.398 50 1],[427.547 50 1],[430.378 50 1],[431.714 285 1],[433.686 160 1],[434.556 220 1],[434.943 285 1],[436.69 220 1],[436.825 100 0],[439.595 220 1],[441.491 450 1],[441.698 285 1],[444.821 160 1],[445.238 160 1],[446.545 50 1],[446.628 50 1],[446.783 50 1],[446.941 50 1],[459.097 360 1],[459.617 285 1],[460.939 80 1],[463.885 160 1],[464.181 360 1],[464.914 450 1],[465.084 160 1],[466.164 360 1],[467.623 285 1],[469.921 220 1],[470.536 285 1],[492.46 160 1],[493.027 230 4],[494.306 220 1],[532.91 135 0],[532.968 160 0],[533.074 190 0],[543.518 90 0],[543.578 110 0],[543.686 135 0],[557.734 120 0],[559.237 110 2],[559.791 130 4],[595.839 160 0],[595.858 190 0],[599.528 80 0],[604.623 160 0],[604.644 190 0],[604.649 110 0],[610.627 100 0],[615.598 400 0],[615.677 450 0],[615.818 490 0],[625.683 80 0],[626.155 100 0],[636.634 100 0],[637.432 100 0],[645.36 320 0],[645.444 360 0],[645.598 400 0],[650.024 130 4],[660.491 80 0],[665.383 100 0],[700.192 360 0],[700.223 450 0],[715.67 210 0],[725.415 400 0],[725.445 450 0],[725.453 320 0],[747.644 210 0],[747.724 100 0],[747.908 120 0],[748.067 120 0],[770.675 100 0],[777.194 870 0],[777.417 810 0],[777.539 750 0],[788.627 80 0],[794.315 100 0],[794.717 100 0],[794.755 235 0],[795.08 210 0],[795.216 185 0],[798.194 110 0],[798.24 135 0],[798.698 190 0],[798.733 135 0],[799.507 250 0],[822.182 400 0],[822.765 265 0],[823.002 265 0],[823.3 325 0],[823.535 120 0],[842.616 120 0],[844.625 810 0],[844.636 1000 0],[844.676 935 0],[882.043 325 0],[905.701 160 0],[911.829 120 0],[913.471 80 0],[915.014 80 0],[915.148 80 0],[915.601 235 0],[926.081 450 0],[926.084 490 0],[926.094 450 0],[926.258 400 0],[926.267 540 0],[926.277 590 0],[926.594 490 0],[926.601 640 0],[939.919 185 0],[948.116 120 0],[948.288 120 0],[948.743 235 0],[949.271 140 0],[949.797 265 0],[949.93 160 0],[950.559 235 0],[952.196 210 0],[952.336 120 0],[952.396 120 0],[952.828 100 0],[962.213 100 0],[962.529 120 0],[967.738 160 0],[969.466 80 0],[969.491 65 0],[974.15 235 0],[976.065 235 0],[990.905 120 0],[993.698 140 0],[994.041 120 0],[999.531 160 0],[1042.118 120 0],[1128.634 590 0],[1128.691 640 0],[1128.702 490 0],[1128.732 490 0],[1129.51 490 0],[1129.768 540 0],[1130.238 590 0],[1135.869 265 0],[1246.402 490 0],[1257.004 450 0],[1299.077 120 0],[1307.691 160 0],[1316.389 700 0],[1316.485 750 0],[1316.511 640 0],[1621.206 160 0],[1796.6699 120 0],[1802.1211 590 0],[1804.148 120 0],[1804.2189 120 0],[1804.623 120 0],[1822.923 140 0],[1824.3631 540 0],[2617.3561 140 0]}{ALLx1000x1000x900x1000x850x1000x0}{UVx1000x900x900x1000x850x1000x0}{VISx870x870x450x200x0x230x0}{IVx1000x1000x0x0x0x0x0}% \pgfspectra@elt@search{#1}{F}{[13.454 8 4],[14.795 8 4],[14.8 10 4],[15.251 8 4],[15.854 8 4],[16.227 8 4],[16.35 8 4],[16.356 10 4],[16.598 18 4],[16.618 20 4],[16.979 6 3],[16.984 6 3],[17.107 6 3],[17.47 8 4],[17.637 8 3],[17.843 10 4],[17.859 8 4],[18.152 8 3],[18.157 8 3],[18.298 8 4],[18.672 8 4],[18.679 8 4],[18.684 10 4],[18.697 8 4],[18.701 8 4],[18.724 6 3],[19.057 12 4],[19.084 14 4],[19.197 8 4],[19.639 10 3],[19.645 12 3],[19.976 10 3],[19.98 10 3],[19.985 10 3],[19.993 10 3],[20 10 3],[20.009 14 3],[20.101 12 3],[20.106 14 3],[20.11 12 3],[20.116 16 3],[20.122 12 3],[20.555 8 4],[20.825 18 3],[21.385 14 3],[21.406 14 3],[22.077 14 3],[22.694 12 3],[22.71 10 3],[23.012 10 2],[23.322 12 3],[23.339 10 3],[23.986 14 3],[24.002 14 3],[24.008 18 3],[24.015 14 3],[24.028 14 3],[24.037 14 3],[25.103 20 3],[25.572 10 2],[25.577 12 2],[25.586 14 2],[26.171 14 2],[26.175 12 2],[26.381 16 2],[27.023 12 3],[27.969 14 2],[31.522 16 2],[31.554 14 2],[31.575 12 2],[37.53 6 1],[38.09 6 1],[40.704 8 1],[41.965 28 3],[42.005 30 3],[42.073 32 3],[42.951 20 2],[43.015 22 2],[43.022 16 2],[43.076 30 3],[43.091 10 1],[43.155 8 1],[43.564 8 1],[45.718 14 1],[46.429 18 2],[46.437 20 4],[46.511 20 2],[46.537 22 4],[46.598 24 4],[46.699 20 4],[47.195 8 1],[47.2 12 1],[47.271 10 1],[47.302 8 1],[48.46 18 1],[49.057 26 3],[49.1 32 3],[49.738 10 3],[49.783 12 3],[49.88 14 3],[50.616 18 4],[50.808 20 4],[50.839 24 2],[51.364 10 1],[51.397 14 4],[51.408 12 4],[51.494 14 1],[52.459 16 4],[52.529 18 4],[52.63 20 4],[54.685 14 1],[54.787 12 1],[54.832 10 1],[54.852 8 1],[56.769 24 2],[56.775 22 2],[57.064 28 3],[57.13 28 3],[57.139 30 3],[57.266 32 3],[60.567 18 1],[60.629 16 1],[60.68 20 1],[60.692 14 1],[60.747 16 1],[60.806 18 1],[63.014 16 2],[63.02 18 2],[64.767 14 4],[64.777 20 4],[64.787 22 4],[64.797 14 4],[65.403 26 4],[65.612 24 2],[65.687 26 2],[65.723 22 4],[65.733 28 4],[65.833 28 2],[67.612 28 3],[67.715 26 3],[67.722 30 3],[67.899 26 3],[67.921 32 3],[75.704 12 4],[78.039 3 0],[78.052 2 0],[78.238 2 0],[79.188 2.4 0],[79.254 2 0],[79.442 2 0],[80.696 30 0],[80.96 25 0],[95.187 100 0],[95.483 200 0],[95.555 150 0],[95.852 100 0],[97.24 4 0],[97.39 70 0],[97.622 20 0],[97.651 8 0],[97.775 20 0],[108.231 12 4],[108.839 14 4],[112.976 8 1],[121.903 16 2],[126.687 16 2],[126.771 18 2],[129.754 14 2],[132.706 8 1],[132.811 10 1],[133.359 8 1],[134.36 10 1],[134.404 8 1],[135.992 14 2],[140.061 10 1],[140.714 8 1],[149.309 12 1],[149.324 10 1],[149.331 8 1],[149.893 22 2],[150.201 24 2],[150.418 22 2],[150.479 28 2],[150.63 26 2],[150.677 22 2],[155.302 20 2],[155.759 22 2],[156.373 20 2],[156.554 20 2],[162.34 20 2],[165.076 20 2],[167.039 26 2],[167.74 28 2],[170.213 8 1],[171.699 20 2],[174.475 8 1],[174.555 10 1],[174.739 12 1],[177.009 24 2],[177.067 30 2],[177.293 22 2],[177.336 28 2],[179.165 32 2],[180.303 22 2],[180.47 20 2],[180.59 34 2],[183.93 22 2],[183.997 24 2],[184.014 22 2],[190.076 16 2],[202.744 20 2],[203.032 24 2],[217.144 8 3],[221.717 24 2],[222.918 2 4],[225.272 4 4],[229.829 10 3],[245.063 4 4],[245.158 8 3],[245.207 24 2],[245.692 10 3],[246.133 2 4],[246.485 26 2],[247.029 26 2],[247.873 24 2],[248.437 30 2],[254.277 24 2],[255.611 20 1],[258.004 24 2],[258.381 26 2],[259.323 24 2],[259.553 26 2],[259.928 28 2],[262.501 26 2],[262.97 28 2],[265.644 24 2],[269.398 2 4],[270.23 2 4],[270.396 2 4],[270.717 4 4],[275.555 26 2],[275.963 32 2],[278.815 24 2],[281.145 32 2],[282.074 8 3],[282.613 10 3],[283.399 28 2],[283.563 30 2],[286.033 30 2],[286.286 24 2],[287.14 20 1],[288.758 28 2],[288.945 30 2],[290.53 24 2],[291.329 28 2],[291.634 32 2],[293.249 28 2],[299.428 28 2],[299.721 24 2],[299.753 26 2],[299.947 24 2],[303.925 26 2],[303.975 24 2],[304.28 32 2],[304.914 30 2],[305.999 24 1],[311.362 28 2],[311.57 32 2],[312.154 36 2],[312.479 28 2],[313.423 28 2],[314.699 28 2],[315.349 28 1],[317.417 36 2],[317.476 34 2],[320.276 34 1],[321.4 24 2],[326.408 28 1],[341.465 28 1],[341.645 30 1],[341.68 28 1],[341.7 32 1],[347.296 32 1],[347.331 30 1],[347.478 34 1],[350.139 38 1],[350.145 40 1],[350.157 40 1],[350.284 36 1],[350.296 40 1],[350.311 42 1],[350.537 34 1],[350.552 40 1],[350.563 44 1],[352.289 32 1],[353.687 30 1],[354.177 32 1],[359.052 32 1],[359.41 1.2 0],[359.869 34 1],[360.139 36 1],[360.284 38 1],[366.817 2.4 0],[370.453 36 1],[371.035 32 1],[373.957 32 1],[380.583 28 1],[384.709 54 1],[384.999 52 1],[385.167 50 1],[389.848 1 0],[389.883 38 1],[390.193 36 1],[390.382 34 1],[393.069 1.6 0],[393.426 1 0],[394.856 1 0],[397.204 30 1],[397.267 32 1],[397.478 34 1],[402.473 48 1],[402.501 44 1],[402.549 46 1],[408.391 32 1],[410.307 38 1],[410.322 34 1],[410.351 40 1],[410.371 36 1],[410.387 34 1],[410.916 34 1],[411.654 32 1],[411.921 30 1],[420.715 28 1],[422.516 34 1],[424.412 30 1],[424.623 40 1],[424.639 38 1],[424.659 36 1],[424.677 34 1],[424.684 32 1],[427.536 34 1],[427.753 32 1],[427.893 32 1],[429.917 40 1],[442.03 28 2],[442.735 24 2],[443.232 24 2],[444.653 32 1],[444.672 34 1],[444.719 36 1],[447.999 28 2],[473.438 28 1],[485.939 34 1],[493.326 32 1],[496.065 1.2 0],[500.2 28 1],[501.254 30 2],[511.099 32 2],[517.325 30 1],[523.041 3 0],[527.901 2.4 0],[554.052 3.6 0],[555.243 2.4 0],[557.733 2 0],[558.927 32 1],[562.406 4 0],[562.693 2.4 0],[565.915 3 0],[566.753 8 0],[567.167 18 0],[568.914 3.6 0],[570.082 5 0],[570.731 5 0],[575.317 28 2],[576.12 24 2],[595.015 2.4 0],[595.919 5 0],[596.528 14 0],[599.443 10 0],[601.583 30 0],[603.804 16 0],[604.754 180 0],[608.011 20 0],[609.182 30 2],[612.55 28 2],[614.976 160 0],[621.087 80 0],[623.357 26 2],[623.965 2600 0],[624.79 28 1],[634.851 2000 0],[636.305 28 2],[641.365 1600 0],[656.969 90 0],[658.039 60 0],[665.041 80 0],[669.048 360 0],[670.828 80 0],[677.398 1400 0],[679.553 300 0],[683.426 1800 0],[685.603 10000 0],[687.022 1600 0],[690.248 3000 0],[690.982 1200 0],[696.635 800 0],[703.747 9000 0],[712.789 6000 0],[717.99 26 1],[720.236 3000 0],[721.179 26 1],[730.903 200 0],[731.102 3000 0],[731.43 140 0],[733.196 1000 0],[733.677 24 2],[735.494 26 2],[739.869 2000 0],[742.565 800 0],[748.272 440 0],[748.916 500 0],[751.492 180 0],[755.224 1000 0],[757.338 1000 0],[760.717 1400 0],[775.47 3600 0],[780.021 3000 0],[787.918 60 0],[789.859 100 0],[793.631 70 0],[795.632 60 0],[801.601 16 1],[804.093 200 0],[807.552 180 0],[807.752 70 0],[812.656 70 0],[812.926 120 0],[815.951 60 0],[817.934 120 0],[819.124 60 0],[820.863 70 0],[821.473 500 0],[823.077 600 0],[823.219 100 0],[827.462 300 0],[829.858 400 0],[830.24 120 0],[880.758 180 0],[890.092 200 0],[891.278 60 0],[902.549 70 0],[904.21 80 0],[917.868 70 0],[943.367 40 0],[950.53 5 0],[966.204 2.4 0],[973.434 5 0],[982.211 3 0],[990.265 2.4 0],[1004.798 16 1],[1028.545 3 0],[1086.231 4 0]}{ALLx10000x10000x54x36x32x28x0}{UVx200x200x44x36x32x28x0}{VISx10000x10000x54x32x0x0x0}{IVx3000x3000x16x0x0x0x0}% @@ -44,7 +44,7 @@ \pgfspectra@elt@search{#1}{Na}{[10.628 100 4],[10.63 100 4],[10.64 100 4],[10.649 100 4],[10.793 200 4],[10.802 200 4],[11.082 200 4],[11.088 200 4],[11.151 100 4],[11.201 300 4],[11.47 100 4],[11.474 100 4],[11.799 400 4],[12.004 100 4],[12.518 400 4],[12.522 400 4],[12.529 500 4],[12.543 300 4],[12.546 300 4],[12.59 200 4],[12.621 100 4],[12.656 200 4],[12.661 100 4],[12.744 400 4],[12.747 400 4],[12.803 400 4],[12.805 400 4],[13.068 200 4],[13.135 300 4],[13.141 200 4],[13.164 300 4],[13.316 500 4],[13.339 400 4],[13.427 200 4],[13.579 300 4],[13.585 300 4],[13.6551 4 3],[13.6854 4 3],[13.881 200 4],[13.892 300 4],[13.9961 4 3],[14.2232 7 3],[14.2359 6 3],[14.6064 8 3],[14.6302 7 3],[14.864 400 4],[14.886 300 4],[15.0298 9 3],[15.0543 7 3],[15.064 7 3],[15.0687 8 3],[15.113 400 4],[15.1299 7 3],[15.5083 7 3],[15.524 7 3],[15.5448 7 3],[15.551 8 3],[15.6537 8 3],[15.721 300 4],[16.2448 12 3],[16.319 10 3],[16.362 300 4],[16.8411 12 3],[16.8546 10 3],[18.395 5 2],[18.935 5 2],[19.0445 10 3],[19.38 5 2],[19.404 5 2],[19.417 5 2],[19.429 5 2],[19.468 6 2],[19.553 6 2],[19.9772 10 3],[20.215 6 2],[20.219 6 2],[20.249 8 2],[20.271 5 2],[20.272 7 2],[20.276 8 2],[20.306 8 2],[20.328 8 2],[20.333 8 2],[20.549 10 3],[20.73 10 2],[21.534 10 2],[21.586 12 2],[21.612 12 2],[22.987 15 2],[23.059 12 2],[25.052 50 2],[25.137 30 2],[26.69 25 2],[26.765 70 2],[26.787 50 2],[26.863 50 2],[27.208 20 2],[27.245 20 2],[30.015 160 1],[30.02 160 1],[30.132 90 1],[30.144 100 1],[30.245 60 1],[30.715 800 4],[30.826 1000 4],[31.9644 10 3],[33.255 800 4],[33.391 900 4],[36.032 800 4],[36.037 800 4],[36.076 10 3],[37.208 300 1],[37.638 350 1],[37.814 100 2],[38.01 70 2],[40.072 1000 4],[40.8684 12 3],[40.9614 10 3],[41.0372 15 3],[41.1334 10 3],[41.2242 13 3],[44.505 500 4],[44.519 600 4],[45.99 600 4],[46.105 850 4],[46.326 1000 4],[129.397 60 1],[132.774 50 1],[133.676 7 2],[133.736 7 2],[134.067 8 2],[134.239 9 2],[134.273 10 2],[134.754 45 1],[135.528 11 2],[136.19 12 2],[137.234 11 2],[137.469 90 1],[140.468 90 1],[142.089 10 2],[144.419 10 2],[144.931 12 2],[149.521 45 1],[149.601 40 1],[149.773 45 1],[150.641 80 1],[150.691 60 1],[151.31 70 1],[151.963 60 1],[156.287 11 2],[156.529 10 2],[158.05 10 3],[158.218 11 3],[158.233 10 3],[158.398 11 3],[158.414 12 3],[158.699 10 3],[158.705 12 3],[159.818 10 2],[161.395 10 3],[161.592 11 3],[161.857 12 3],[165.547 11 3],[165.792 60 1],[168.894 11 2],[169.929 10 2],[170.197 15 3],[170.241 10 3],[171.112 10 2],[172.827 11 2],[173.111 10 2],[175.548 10 2],[177.657 90 1],[177.824 40 1],[178.304 60 1],[178.719 80 1],[178.885 45 1],[179.841 80 1],[180.126 45 1],[180.707 15 2],[180.709 90 1],[180.838 60 1],[181.077 10 2],[181.167 11 2],[181.681 10 2],[182.17 50 1],[183.387 45 1],[183.522 10 2],[183.522 80 1],[183.789 45 1],[183.894 10 2],[184.182 60 1],[184.436 11 2],[184.502 70 1],[184.753 12 2],[184.759 10 2],[184.956 15 2],[185.015 45 1],[185.038 12 2],[185.119 70 1],[185.317 80 1],[185.592 10 2],[185.671 10 2],[186.121 10 2],[186.645 45 1],[187.337 45 1],[187.508 60 1],[188.066 10 2],[188.191 160 1],[188.509 50 1],[188.574 45 1],[188.739 10 2],[188.747 20 2],[189.075 15 2],[190.016 15 2],[191.845 10 2],[192.396 11 2],[192.626 14 2],[192.724 12 2],[193.274 12 2],[193.389 13 2],[194.352 10 2],[194.643 12 2],[195.091 12 2],[195.124 14 2],[196.076 12 3],[196.508 11 3],[196.76 10 3],[197.716 10 2],[198.557 13 2],[199.568 10 2],[200.421 10 2],[200.522 11 2],[200.847 11 2],[201.187 15 2],[201.417 11 2],[201.703 12 2],[201.839 10 3],[202.856 12 2],[203.113 12 2],[203.59 11 2],[204.166 12 2],[204.329 12 2],[204.482 10 2],[204.544 10 2],[205.148 11 2],[206.036 10 2],[206.66 15 2],[208.291 13 2],[210.633 12 3],[211.453 10 3],[214.072 15 2],[214.454 14 2],[215.576 10 3],[220.283 15 2],[222.593 15 2],[222.853 80 1],[223.033 30 2],[223.219 16 2],[224.67 20 2],[225.147 14 2],[227.842 15 2],[228.566 13 2],[230.358 80 1],[230.999 15 2],[231.565 300 1],[238.699 18 2],[239.328 130 1],[239.403 17 2],[240.101 100 1],[240.659 15 2],[242.099 300 1],[242.473 300 1],[243.914 200 1],[244.15 250 1],[244.872 200 1],[245.218 200 1],[245.931 25 2],[246.885 18 2],[247.473 20 2],[249.315 1000 1],[249.703 25 2],[250.284 300 1],[250.63 450 1],[251.026 17 2],[251.546 600 1],[253.025 15 2],[253.154 600 1],[254.28 14 2],[258.631 550 1],[259.496 600 1],[261.181 850 1],[262.741 300 1],[263.181 300 1],[264.853 160 1],[265.131 200 1],[265.981 200 1],[266.1 850 1],[266.346 200 1],[266.646 350 1],[267.183 1000 1],[267.404 200 1],[267.809 850 1],[280.871 650 1],[280.952 850 1],[281.829 350 1],[282.987 600 1],[283.956 800 1],[284.172 1000 1],[285.281 16 0],[285.301 15 0],[285.651 650 1],[285.949 800 1],[286.102 350 1],[287.128 750 1],[287.295 650 1],[288.115 900 1],[288.626 850 1],[289.395 700 1],[290.114 900 1],[290.472 800 1],[290.492 1100 1],[291.752 1100 1],[291.905 1100 1],[291.985 1200 1],[292.095 1300 1],[292.349 1000 1],[293.088 750 1],[293.408 850 1],[293.774 950 1],[294.266 450 1],[294.57 800 1],[294.75 950 1],[295.124 1200 1],[295.24 1100 1],[296.012 850 1],[296.574 450 1],[297.073 500 1],[297.424 600 1],[297.499 750 1],[297.713 1000 1],[297.966 1100 1],[298.063 1100 1],[298.419 1300 1],[300.415 550 1],[300.744 750 1],[300.914 750 1],[300.948 450 1],[301.54 600 1],[301.734 450 1],[302.907 400 1],[303.708 400 1],[304.56 400 1],[305.367 550 1],[305.535 550 1],[305.616 550 1],[305.738 550 1],[305.795 550 1],[305.872 550 1],[306.025 700 1],[306.135 800 1],[306.438 500 1],[306.622 500 1],[306.654 500 1],[307.433 550 1],[307.832 550 1],[308.025 550 1],[308.706 550 1],[308.826 450 1],[309.204 550 1],[309.273 550 1],[309.445 650 1],[309.555 650 1],[310.358 500 1],[310.44 500 1],[311.145 450 1],[311.369 500 1],[312.294 400 1],[312.442 1700 1],[312.521 600 1],[312.938 600 1],[313.548 2500 1],[313.786 1700 1],[314.571 950 1],[314.928 2000 1],[316.374 2000 1],[317.509 700 1],[317.906 1000 1],[318.979 1700 1],[321.219 1600 1],[323.493 700 1],[325.796 1500 1],[326.021 650 1],[327.422 950 1],[328.56 1700 1],[330.135 1700 1],[330.237 19 0],[330.298 18 0],[330.496 1500 1],[331.804 1000 1],[332.769 950 1],[342.686 6 0],[353.305 1500 1],[363.127 1200 1],[371.107 850 1],[408.137 200 1],[411.37 300 1],[412.308 250 1],[423.326 250 1],[423.899 2 0],[424.037 200 1],[424.09 250 1],[424.208 3 0],[427.364 4 0],[427.679 5 0],[428.784 2 0],[429.101 3 0],[429.248 250 1],[429.286 250 1],[430.881 250 1],[430.904 250 1],[432.091 250 1],[432.14 6 0],[432.462 7 0],[433.729 250 1],[434.149 4 0],[434.411 250 1],[434.474 5 0],[436.86 200 1],[437.522 200 1],[438.749 200 1],[439.003 8 0],[439.281 250 1],[439.334 9 0],[440.512 200 1],[441.989 6 0],[442.325 7 0],[444.67 200 1],[444.741 200 1],[445.474 200 1],[445.523 200 1],[445.721 200 1],[447.463 200 1],[447.88 200 1],[448.167 200 1],[449.015 200 1],[449.087 200 1],[449.418 10 0],[449.766 11 0],[449.962 200 1],[450.697 200 1],[451.921 200 1],[452.498 200 1],[453.332 200 1],[454.163 7 0],[454.519 8 0],[455.153 200 1],[459.092 160 1],[472.223 160 1],[473.11 160 1],[473.25 100 1],[474.167 160 1],[476.879 160 1],[478.879 100 1],[481.475 50 1],[483.526 50 1],[514.311 60 1],[519.165 100 1],[520.333 50 1],[520.855 80 1],[539.063 60 1],[540.046 70 1],[541.455 90 1],[568.2633 5 0],[568.8204 9 0],[588.995 32 0],[589.5924 16 0],[617.525 60 1],[619.926 70 1],[623.468 70 1],[626.001 80 1],[627.474 80 1],[631.08 60 1],[635.283 60 1],[635.805 60 1],[636.115 70 1],[636.641 70 1],[637.891 60 1],[647.529 50 1],[651.421 90 1],[652.468 80 1],[653.07 130 1],[654.404 130 1],[654.575 130 1],[655.243 80 1],[780.978 4 0],[781.024 3 0],[818.3256 5 0],[819.4824 9 0],[864.992 7 0],[865.089 6 0],[915.388 4 0],[946.594 6 0],[996.128 7 0],[1057.228 3 0],[1074.644 10 0],[1074.929 9 0],[1083.487 8 0],[1138.145 11 0],[1140.378 12 0],[1476.748 115 0],[2205.6439 30 0],[2208.367 27 0],[2334.841 24 0],[2337.9131 24 0]}{ALLx2500x115x2500x100x15x1000x0}{UVx2500x19x2500x100x15x1000x0}{VISx300x32x300x0x0x0x0}{IVx115x115x0x0x0x0x0}% \pgfspectra@elt@search{#1}{Mg}{[11.816 40 3],[11.881 80 3],[12.359 70 3],[12.465 240 3],[12.986 300 3],[13.281 300 3],[14.695 400 3],[14.741 300 3],[14.754 300 3],[17.08 15 2],[17.139 15 2],[18.007 350 3],[18.062 400 3],[18.08 400 3],[18.134 350 3],[18.224 15 2],[18.297 12 2],[18.651 20 2],[18.72 20 2],[18.853 10 2],[23.173 100 2],[23.426 80 2],[25.158 5 4],[27.658 35 4],[31.23 10 4],[32.099 4000 3],[32.331 3000 3],[35.109 20 4],[35.22 18 4],[35.309 30 4],[35.33 15 4],[35.422 18 4],[35.533 20 4],[80.041 40 3],[85.729 150 3],[86.674 30 3],[91.903 50 3],[92.978 30 3],[94.67 8 1],[94.677 9 1],[100.876 40 3],[102.596 14 1],[102.611 12 1],[102.641 30 3],[103.741 250 3],[104.437 80 3],[105.576 60 3],[121.099 300 3],[123.994 25 1],[124.04 20 1],[124.851 6 1],[124.993 8 1],[127.124 8 1],[127.194 9 1],[127.272 8 1],[127.343 11 1],[127.483 10 2],[128.07 11 2],[130.671 11 1],[130.788 12 1],[130.828 12 1],[130.944 14 1],[134.219 300 3],[134.657 800 3],[134.668 300 3],[135.205 600 3],[136.545 14 1],[136.726 15 1],[136.77 15 1],[136.942 18 1],[138.446 900 3],[138.577 500 3],[138.753 800 3],[139.127 12 2],[139.339 15 2],[140.468 300 3],[140.936 1000 3],[143.114 10 2],[143.753 500 3],[143.764 1000 3],[144.742 300 3],[145.954 300 3],[145.962 400 3],[147.6 20 1],[147.801 25 1],[148.089 20 1],[148.151 400 3],[148.29 30 1],[149.045 350 3],[149.55 300 3],[157.271 16 2],[158.624 12 2],[160.711 300 3],[164.593 1 0],[165.116 1 0],[165.831 2 0],[166.843 5 0],[168.302 500 3],[168.341 10 0],[168.709 13 2],[169.728 13 2],[169.881 400 3],[170.706 15 0],[172.204 10 2],[173.484 40 1],[173.762 50 1],[173.884 22 2],[174.756 12 2],[174.78 20 0],[174.893 18 2],[175.065 40 1],[175.346 50 1],[177.298 15 2],[178.325 20 2],[179.458 14 2],[180.066 15 2],[182.793 30 0],[184.417 300 3],[185.819 13 2],[187.949 12 2],[190.85 10 2],[192.39 12 2],[193.067 13 2],[193.784 11 2],[202.582 9 0],[203.955 15 2],[205.549 15 2],[206.49 25 2],[208.59 15 2],[209.196 20 2],[209.793 13 2],[211.277 15 2],[213.406 16 2],[217.77 20 2],[232.958 3 1],[239.515 20 2],[244.957 6 1],[246.775 15 2],[249.054 10 2],[251.84 12 3],[252.919 10 2],[253.479 4 3],[255.723 1 0],[256.094 1 0],[256.226 1 0],[256.494 1 0],[257.091 1 0],[257.225 1 0],[257.494 2 0],[257.789 1 0],[258.059 1 0],[258.422 1 0],[258.556 2 0],[258.828 3 0],[259.189 1 0],[259.323 1 0],[259.597 2 0],[260.25 2 0],[260.385 4 0],[260.662 5 0],[261.336 1 0],[261.473 2 0],[261.751 3 0],[262.866 3 0],[263.005 6 0],[263.287 8 0],[264.48 2 0],[264.621 3 0],[264.906 4 0],[266.076 8 1],[266.082 8 1],[266.812 6 0],[266.955 8 0],[267.246 10 0],[269.372 3 0],[269.518 5 0],[269.814 6 0],[273.199 8 0],[273.349 10 0],[273.653 12 0],[276.522 5 0],[276.834 7 0],[277.669 38 0],[277.827 32 0],[277.983 90 0],[278.129 8 0],[278.142 32 0],[278.297 36 0],[279.079 13 1],[279.553 1000 1],[279.806 16 1],[280.27 600 1],[280.976 3 0],[281.111 2 0],[281.178 1 0],[284.672 12 0],[284.675 12 0],[284.834 14 0],[284.842 14 0],[285.165 16 0],[285.166 16 0],[285.213 6000 0],[290.292 2 0],[290.636 4 0],[291.545 3 0],[291.545 3 0],[292.875 2 1],[293.654 3 1],[293.674 10 0],[293.674 10 0],[293.847 12 0],[293.847 12 0],[294.2 2 0],[294.2 13 0],[296.787 1 1],[297.17 1 1],[309.108 20 0],[309.299 22 0],[309.69 14 0],[310.471 9 1],[310.481 8 1],[316.898 6 1],[317.271 6 1],[317.578 7 1],[319.762 2 0],[329.905 12 2],[330.639 13 2],[332.993 17 0],[333.215 6 0],[333.59 12 2],[333.668 9 0],[334.258 11 2],[336.141 12 2],[338.124 10 2],[338.29 11 2],[338.737 11 2],[353.504 7 1],[353.886 8 1],[354.952 7 1],[355.337 8 1],[370.674 10 2],[382.93 140 0],[383.23 300 0],[383.829 500 0],[384.824 8 1],[384.891 1 0],[385.04 7 1],[385.396 2 0],[385.496 1 0],[385.886 2 0],[387.831 3 0],[389.191 2 0],[389.33 2 0],[389.557 3 0],[390.386 4 0],[393.84 6 0],[398.421 1 0],[398.675 8 0],[405.469 2 0],[405.75 10 0],[407.506 3 0],[408.183 2 0],[416.51 4 0],[416.727 15 0],[435.191 20 0],[435.453 6 0],[438.038 6 0],[438.464 9 1],[439.059 10 1],[442.8 8 1],[443.399 9 1],[443.649 5 1],[443.66 4 1],[448.116 14 1],[448.133 13 1],[453.429 6 1],[457.11 28 0],[462.13 3 0],[470.299 7 0],[473.003 10 0],[473.959 6 1],[473.971 5 1],[485.11 7 1],[491.6 10 2],[516.733 75 0],[517.268 220 0],[518.361 400 0],[526.421 8 1],[526.437 7 1],[534.598 1 0],[540.154 9 1],[550.96 2 0],[552.841 6 0],[571.109 30 0],[578.531 5 0],[578.556 4 0],[583.982 10 2],[591.643 7 1],[591.816 6 1],[625.675 15 2],[631.872 10 0],[631.924 9 0],[631.949 7 0],[634.674 10 1],[634.696 9 1],[654.597 11 1],[662.044 5 1],[662.057 6 1],[663.083 2 0],[678.145 7 1],[678.785 8 1],[681.286 7 1],[681.927 8 1],[689.49 4 0],[696.54 6 0],[706.041 8 0],[719.317 10 0],[729.106 10 0],[738.7 5 0],[738.769 12 0],[758.076 4 1],[765.76 20 0],[765.915 19 0],[765.99 17 0],[769.016 8 0],[769.155 15 0],[772.261 1 0],[774.634 1 0],[775.93 1 0],[778.65 5 1],[779.098 4 1],[781.114 3 0],[787.705 12 1],[788.167 2 0],[789.637 13 1],[793.081 7 0],[804.773 3 0],[804.985 5 0],[805.423 7 0],[809.872 10 0],[811.522 9 1],[812.043 8 1],[815.464 1 0],[815.913 2 0],[820.984 10 0],[821.303 20 0],[821.399 10 1],[822.292 7 1],[823.319 7 1],[823.464 11 1],[830.331 7 0],[830.56 9 0],[831.026 10 0],[834.612 15 0],[846.648 2 0],[846.884 5 0],[847.369 7 0],[871.018 10 0],[871.269 12 0],[871.783 13 0],[873.499 10 1],[873.602 17 0],[874.566 11 1],[880.676 14 0],[882.432 10 1],[883.508 11 1],[892.357 20 0],[898.903 7 0],[899.169 9 0],[899.716 10 0],[921.825 14 1],[924.427 13 1],[924.65 12 0],[925.578 30 0],[932.754 10 1],[934.054 10 1],[941.496 25 0],[942.981 17 0],[943.276 19 0],[943.878 20 0],[950.245 8 0],[950.311 7 0],[950.343 5 0],[963.189 12 1],[963.243 11 1],[995.32 15 0],[998.32 15 0],[998.647 17 0],[999.321 18 0],[1009.216 14 1],[1039.176 5 1],[1039.223 6 1],[1081.108 35 0],[1091.423 11 1],[1091.527 7 1],[1095.178 10 1],[1095.332 25 0],[1095.73 27 0],[1096.545 28 0],[1103.21 15 0],[1103.366 14 0],[1125.593 5 1],[1125.635 4 1],[1182.818 45 0],[1208.366 30 0],[1487.762 28 0],[1502.499 35 0],[1504.024 30 0],[1504.77 25 0],[1574.071 6 0],[1574.899 8 0],[1576.584 10 0],[1710.866 30 0],[2639.29 5 0]}{ALLx6000x6000x1000x100x4000x35x0}{UVx6000x6000x1000x100x4000x35x0}{VISx500x500x14x15x0x0x0}{IVx45x45x14x0x0x0x0}% \pgfspectra@elt@search{#1}{Al}{[10.38 300 4],[10.388 400 4],[10.407 250 4],[10.418 250 4],[10.795 600 4],[10.806 300 4],[10.811 300 4],[11.85 250 4],[12.403 400 3],[12.553 900 4],[12.607 800 4],[12.973 700 3],[13.041 800 4],[13.085 1000 4],[13.1 900 4],[13.144 900 4],[13.263 500 4],[16.007 800 3],[16.169 700 3],[27.869 1000 4],[28.139 900 4],[48.6884 70 2],[48.6912 30 2],[51.1138 250 2],[51.1191 150 2],[56.0317 500 2],[56.0433 200 2],[67.0068 100 2],[67.1118 200 2],[69.5829 500 2],[69.6217 400 2],[72.5683 200 2],[72.6915 300 2],[85.5034 400 2],[85.6746 500 2],[89.2024 400 2],[89.3887 50 2],[89.3897 450 2],[102.734 500 3],[104.217 800 3],[104.852 700 3],[105.89 500 3],[106.143 500 3],[106.489 600 3],[106.657 500 3],[106.826 250 4],[106.944 600 3],[108.867 500 4],[109.014 300 4],[110.574 400 3],[111.882 600 3],[112.561 500 3],[113.682 400 3],[115.03 300 4],[116.259 10 2],[116.262 5 2],[116.542 350 4],[116.848 250 4],[117.743 40 1],[119.1812 50 1],[119.85 400 3],[122.055 400 3],[123.719 900 3],[124.021 600 3],[124.086 700 3],[124.879 700 3],[125.762 900 3],[126.418 800 3],[127.276 1000 3],[128.77 500 4],[133.006 400 4],[133.79 400 3],[135.018 150 1],[135.052 400 4],[135.281 100 2],[135.282 5 2],[135.286 70 2],[136.335 400 4],[136.92 600 4],[137.37 300 4],[137.662 500 3],[137.967 600 2],[138.413 800 2],[138.879 500 3],[143.194 600 3],[144.182 700 3],[144.587 400 4],[144.751 800 3],[145.526 300 4],[145.796 600 3],[147.564 600 4],[148.605 300 4],[148.689 700 3],[149.479 800 3],[150.837 700 4],[151.907 400 3],[152.614 1000 4],[153.754 800 3],[153.912 500 4],[153.983 800 1],[155.019 500 3],[155.725 1000 3],[155.903 500 3],[156.416 700 3],[156.9385 100 1],[157.79 300 4],[158.204 900 3],[158.446 800 3],[158.928 400 3],[158.987 350 4],[159.6059 125 1],[160.5766 700 2],[160.665 400 3],[161.1814 100 2],[161.1874 800 2],[161.781 400 3],[162.5627 150 1],[162.754 600 3],[163.682 500 3],[163.906 800 3],[164.4235 100 1],[164.4809 100 1],[167.0787 1000 1],[168.625 100 1],[171.944 800 1],[172.1244 500 1],[172.1271 900 1],[172.4952 500 1],[172.4984 900 1],[176.0104 350 1],[176.1975 300 1],[176.3 290 0],[176.3869 500 1],[176.3952 700 1],[176.564 450 0],[176.5815 300 1],[176.638 450 0],[176.7731 400 1],[176.914 450 0],[181.856 1000 3],[182.8588 600 1],[183.2837 400 1],[183.4808 250 1],[185.4716 1000 2],[185.5929 300 1],[185.8026 700 1],[185.998 120 1],[186.2311 1000 1],[186.279 600 2],[188.116 700 3],[192.9978 200 1],[193.1048 150 1],[193.2377 200 1],[193.4503 400 1],[193.4713 150 1],[193.584 300 2],[193.5863 15 2],[193.5949 200 2],[193.6907 150 1],[193.9261 220 1],[199.0531 700 1],[201.6052 150 1],[201.6234 150 1],[201.6368 100 1],[207.4008 200 1],[209.4264 700 1],[209.4744 150 1],[209.4791 300 1],[209.5104 100 1],[209.5141 200 1],[215.07 60 0],[218.1 60 0],[226.91 400 0],[226.922 120 0],[231.249 60 0],[231.353 70 0],[231.748 90 0],[231.906 60 0],[232.156 140 0],[236.705 460 0],[236.761 110 0],[236.811 110 0],[236.93 180 0],[237.022 140 0],[237.073 70 0],[237.207 160 0],[237.312 850 0],[237.335 170 0],[237.357 110 0],[237.84 60 0],[239.9 110 2],[251.33 60 0],[251.587 400 3],[256.798 240 0],[257.51 480 0],[257.54 60 0],[263.155 80 1],[263.77 110 1],[265.248 150 0],[266.039 200 0],[266.917 160 1],[276.277 285 2],[276.287 220 2],[281.619 650 1],[283.796 90 0],[284.01 90 0],[290.693 450 2],[304.128 150 1],[305.007 360 0],[305.468 60 0],[305.714 450 0],[306.429 90 0],[306.614 60 0],[307.464 150 1],[308.2153 4500 0],[309.271 7200 0],[309.2839 1800 0],[320.82 500 3],[326.721 500 3],[328.513 600 3],[334.446 400 3],[334.852 360 2],[335.088 290 2],[342.892 150 1],[343.935 70 0],[344.364 150 0],[344.486 70 0],[345.822 70 0],[347.354 500 3],[347.981 60 0],[348.263 60 0],[349.223 900 3],[350.846 800 3],[351.128 500 3],[351.756 700 3],[352.703 400 3],[354.108 500 3],[358.656 450 1],[358.707 360 1],[358.745 290 1],[360.163 870 2],[360.193 550 2],[361.236 750 2],[365.106 220 1],[365.11 110 1],[365.498 150 1],[365.5 290 1],[370.211 450 2],[371.312 550 2],[390.068 450 1],[393.2 60 0],[394.4006 4500 0],[396.152 9000 0],[398.014 110 2],[399.586 110 1],[408.245 110 2],[408.861 150 2],[414.237 110 2],[414.992 650 2],[415.017 650 2],[422.681 290 1],[436.464 110 2],[447.989 650 2],[447.997 650 2],[451.256 760 2],[452.894 550 2],[452.919 870 2],[458.582 150 1],[458.819 110 1],[466.68 550 1],[470.115 110 2],[470.141 150 2],[489.876 110 1],[490.277 110 1],[490.41 110 2],[510.752 70 0],[515.101 110 2],[516.389 110 2],[528.021 150 1],[528.377 290 1],[528.585 150 1],[531.232 110 1],[531.607 220 1],[537.184 150 1],[555.706 180 0],[555.795 110 0],[559.323 450 1],[569.66 1200 2],[572.273 1000 2],[585.362 110 1],[597.194 220 1],[600.176 290 1],[600.188 220 1],[600.642 450 1],[605.521 110 2],[606.111 150 1],[606.843 290 1],[606.853 110 1],[607.323 450 1],[618.157 110 1],[618.168 150 1],[618.228 290 1],[618.245 220 1],[618.342 450 1],[620.152 450 1],[620.17 360 1],[622.618 290 1],[623.178 360 1],[624.336 450 1],[633.574 450 1],[669.602 360 0],[669.867 230 0],[708.397 60 0],[708.464 70 0],[736.157 110 0],[736.23 140 0],[760.616 60 0],[761.482 90 0],[763.537 220 2],[766.026 150 2],[768.197 220 2],[783.531 230 0],[783.613 290 0],[788.179 360 2],[788.252 150 2],[790.551 290 2],[799.305 60 0],[800.319 90 0],[806.597 70 0],[807.535 110 0],[824.359 290 2],[827.511 360 2],[864.07 290 1],[877.287 360 0],[877.39 450 0],[882.891 110 0],[884.128 180 0],[891.29 90 0],[892.356 140 0],[908.991 60 0],[913.995 70 0],[929.065 150 1],[929.075 110 1],[957.152 290 2],[960.599 360 2],[1007.629 150 1],[1076.836 110 0],[1078.204 140 0],[1087.298 110 0],[1089.173 230 0],[1125.319 450 0],[1125.488 570 0],[1312.341 570 0],[1315.076 450 0],[1671.8961 230 0],[1675.0561 300 0],[1676.3359 140 0],[2109.3039 300 0],[2116.375 360 0]}{ALLx9000x9000x1000x1200x1000x1000x0}{UVx7200x7200x1000x1000x1000x1000x0}{VISx9000x9000x550x1200x0x0x0}{IVx570x570x290x360x0x0x0}% -\pgfspectra@elt@search{#1}{Si}{[7.861 1 4],[7.89 1 4],[8.081 2 4],[8.111 2 4],[8.518 10 4],[8.558 6 4],[9.045 4 4],[9.085 4 4],[9.644 15 4],[9.714 10 4],[9.821 2 4],[11.786 20 4],[11.897 20 4],[45.782 4 3],[45.816 3 3],[51.512 2 3],[51.635 3 3],[56.661 8 2],[64.576 2 3],[65.222 6 2],[65.333 8 2],[67.348 5 2],[74.994 5 3],[80.007 5 2],[80.51 10 1],[81.505 7 3],[81.813 8 3],[82.052 20 1],[82.341 9 2],[84.372 20 1],[84.577 40 1],[85.014 10 1],[88.34 5 2],[88.972 100 1],[89.2 200 1],[89.941 10 1],[90.174 20 1],[91.301 10 1],[91.385 20 1],[92.981 20 1],[93.909 7 2],[96.795 9 2],[98.987 100 1],[99.268 200 1],[99.352 10 2],[99.479 13 2],[99.739 16 2],[100.537 7 2],[102.07 25 1],[102.369 50 1],[103.116 7 2],[103.392 8 2],[103.705 7 2],[105.705 30 1],[105.75 15 1],[106.663 8 3],[108.322 6 2],[110.837 14 2],[110.997 16 2],[111.323 18 2],[112.249 8 3],[112.744 20 1],[112.791 40 1],[112.834 10 3],[114.055 6 2],[114.158 7 2],[114.228 6 2],[114.431 8 2],[114.496 6 2],[114.511 8 2],[114.518 7 2],[115.5 6 2],[115.596 6 2],[115.81 7 2],[116.026 6 2],[116.158 8 2],[117.437 5 2],[117.443 6 2],[117.8 8 2],[119.042 100 1],[119.328 200 1],[119.45 250 1],[119.739 100 1],[120.651 30 2],[120.653 30 2],[120.752 9 2],[121.046 10 2],[121.612 10 1],[122.391 20 1],[122.425 20 1],[122.497 10 1],[122.681 50 1],[122.689 20 1],[122.699 40 1],[122.76 100 1],[122.844 10 1],[122.862 25 1],[122.875 150 1],[122.939 200 1],[123.543 7 2],[123.592 10 1],[124.674 100 1],[124.843 150 1],[125.009 100 1],[125.043 150 1],[125.116 200 1],[125.528 10 0],[125.649 40 0],[125.88 50 0],[126.042 1000 1],[126.473 2000 1],[126.502 200 1],[128.035 6 2],[129.454 17 2],[129.673 14 2],[129.889 15 2],[129.896 18 2],[130.115 14 2],[130.332 16 2],[130.437 100 1],[130.559 50 1],[130.927 200 1],[130.946 20 1],[131.259 13 2],[134.147 8 2],[134.239 7 2],[134.339 6 2],[134.687 100 1],[134.854 100 1],[135.006 150 1],[135.052 20 1],[135.066 20 1],[135.264 100 1],[135.372 100 1],[136.16 8 2],[136.237 5 2],[136.347 7 2],[136.526 8 2],[136.705 7 2],[136.944 5 2],[137.303 5 2],[138.799 5 2],[139.376 15 3],[140.277 12 3],[140.907 10 1],[141.022 20 1],[141.697 10 1],[141.724 13 2],[143.369 6 2],[143.577 8 2],[143.617 7 2],[144.173 5 2],[144.72 6 2],[145.725 5 2],[147.465 15 1],[148.487 15 1],[148.502 90 1],[148.522 30 1],[148.551 100 1],[150.024 12 2],[150.119 10 2],[150.187 9 2],[150.606 6 2],[150.91 100 1],[151.207 50 1],[151.357 30 1],[151.691 60 1],[152.672 500 1],[153.345 1000 1],[156.245 10 1],[156.285 15 1],[156.377 10 1],[157.387 50 0],[157.482 50 0],[159.241 50 0],[159.455 150 0],[159.493 50 0],[159.795 30 0],[162.287 100 0],[162.571 30 0],[162.943 300 0],[162.992 200 0],[163.113 75 0],[163.398 50 0],[163.461 1 3],[165.335 30 0],[166.452 30 0],[166.637 50 0],[166.762 100 0],[166.852 100 0],[167.259 100 0],[167.332 7 2],[167.52 200 0],[168.268 30 0],[168.682 30 0],[168.929 50 0],[169.079 30 0],[169.329 50 0],[169.551 50 0],[169.62 200 0],[169.794 200 0],[170.042 50 0],[170.063 30 0],[170.286 30 0],[170.443 50 0],[171.083 10 1],[171.13 20 1],[172.253 6 3],[172.738 5 3],[174.388 30 0],[174.74 50 0],[175.311 30 0],[176.366 50 0],[176.503 40 0],[176.56 30 0],[176.606 30 0],[177.063 30 0],[177.092 100 0],[177.683 100 0],[178.323 50 0],[179.912 100 0],[180.8 150 1],[180.909 50 0],[181.407 500 0],[181.692 200 1],[181.745 10 1],[182.245 50 0],[183.651 200 0],[183.801 30 0],[184.115 100 0],[184.144 200 0],[184.255 9 2],[184.377 200 0],[184.551 300 0],[184.61 100 0],[184.747 400 0],[184.814 200 0],[184.874 100 0],[185.067 500 0],[185.179 30 0],[185.246 200 0],[185.315 50 0],[186.932 20 1],[187.023 15 1],[187.31 100 0],[187.484 500 0],[187.581 100 0],[188.185 200 0],[188.77 200 0],[189.325 200 0],[190.133 1000 0],[190.246 100 1],[190.466 50 0],[191.062 50 1],[194.167 50 1],[194.459 15 1],[194.933 10 1],[194.956 100 1],[195.497 100 0],[198.443 30 0],[199.185 50 0],[201.097 30 0],[205.483 50 0],[205.865 50 1],[205.901 50 1],[206.119 40 0],[206.552 30 0],[207.202 200 1],[207.27 200 1],[210.321 30 0],[211.463 30 0],[212.018 3 3],[212.412 100 0],[212.747 4 3],[213.399 10 1],[213.64 30 1],[213.656 50 1],[214.791 50 0],[217.689 5 2],[220.798 110 0],[221.089 115 0],[221.174 110 0],[221.667 120 0],[221.806 120 0],[221.891 50 0],[228.704 5 3],[229.103 35 0],[229.548 6 2],[229.687 10 2],[230.093 8 2],[230.306 55 0],[230.819 10 2],[232.856 2 3],[233.44 30 1],[233.461 30 1],[234.42 10 1],[234.954 10 1],[235.017 20 1],[235.309 20 1],[235.63 100 1],[235.718 30 1],[235.797 50 1],[236.02 10 1],[236.676 2 3],[236.697 30 1],[237.099 3 3],[237.426 20 1],[242.845 10 1],[243.515 300 0],[243.877 65 0],[244.336 65 0],[244.948 11 2],[245.212 70 0],[248.282 2 3],[248.32 6 2],[248.538 1 3],[250.69 425 0],[251.432 375 0],[251.6113 500 0],[251.751 7 3],[251.9202 350 0],[252.4108 425 0],[252.8509 450 0],[253.2381 110 0],[254.182 25 2],[254.609 10 2],[255.921 14 2],[256.3679 30 0],[256.8641 85 0],[257.7151 45 0],[263.1282 190 0],[264.079 11 2],[265.551 14 2],[267.219 1 3],[267.512 4 3],[267.525 4 3],[267.757 1 3],[268.221 10 1],[272.381 3 3],[281.711 9 2],[283.149 7 2],[283.962 5 2],[288.1579 1000 0],[288.751 10 1],[289.513 3 3],[290.428 300 1],[290.447 2 3],[290.569 500 1],[295.915 5 2],[297.0355 55 0],[297.152 1 3],[298.052 5 2],[298.7645 150 0],[300.6739 50 0],[301.309 5 2],[302.0004 75 0],[302.155 20 1],[303 100 1],[303.473 6 2],[303.729 8 2],[304.093 9 2],[304.157 20 1],[304.219 30 1],[304.369 100 1],[304.385 10 1],[304.393 7 2],[304.508 5 2],[304.577 10 1],[304.83 50 1],[305.318 150 1],[306.824 7 2],[308.624 25 2],[308.646 6 2],[309.342 20 2],[309.365 5 2],[309.683 16 2],[312.627 6 2],[314.737 7 2],[314.956 7 3],[316.161 8 2],[316.571 9 3],[318.513 16 2],[318.602 13 2],[318.897 150 1],[319.225 50 1],[319.309 150 1],[319.421 50 1],[319.469 50 1],[319.541 100 1],[319.65 14 2],[319.951 200 1],[320.249 20 1],[320.387 100 1],[321.003 200 1],[321.055 15 2],[321.466 75 1],[321.625 7 2],[321.799 15 1],[322.044 10 1],[322.301 20 1],[323.05 12 2],[323.395 14 2],[324.162 15 2],[324.419 1 3],[325.34 7 2],[325.374 5 2],[325.48 7 2],[325.866 12 2],[327.046 6 2],[327.626 10 2],[327.926 7 2],[333.314 300 1],[333.982 500 1],[348.691 15 2],[352.594 9 2],[356.967 8 2],[359.047 20 2],[362.254 8 2],[363.945 5 2],[364.512 6 2],[368.14 7 2],[368.215 5 2],[376.244 8 3],[377.315 6 3],[379.141 20 2],[379.611 25 2],[380.654 30 2],[384.246 7 2],[385.366 100 1],[385.602 500 1],[386.26 200 1],[390.5523 300 0],[392.447 20 2],[394.749 6 2],[395.574 10 1],[396.384 6 2],[397.746 10 1],[398.124 5 2],[399.177 15 1],[399.801 10 1],[403.139 1 3],[403.806 2 3],[407.545 20 1],[407.678 15 1],[408.885 10 3],[410.186 5 2],[410.242 8 2],[410.2936 70 0],[411.55 5 2],[411.61 9 3],[412.807 300 1],[413.089 500 1],[418.335 10 1],[419.072 100 1],[419.813 50 1],[421.241 7 3],[431.41 3 3],[432.818 5 3],[433.85 9 2],[434.14 8 2],[437.763 8 2],[440.373 2 3],[440.59 6 2],[440.672 8 2],[441.165 1 3],[449.405 6 2],[455.262 30 2],[455.4 8 2],[456.782 25 2],[457.476 20 2],[461.127 1 3],[461.966 7 2],[462.142 100 1],[462.172 150 1],[462.862 3 3],[463.124 9 3],[463.828 7 2],[465.432 10 3],[465.692 3 3],[466.587 8 2],[466.714 1 3],[467.33 2 3],[468.302 9 2],[468.38 7 2],[471.665 16 2],[473.052 7 2],[478.2991 50 0],[479.2212 35 0],[479.2324 80 0],[480.043 8 2],[481.333 15 2],[481.972 16 2],[482.897 18 2],[488.32 15 1],[490.699 20 1],[493.28 20 1],[494.745 1 3],[494.7607 30 0],[495.011 3 3],[500.6061 40 0],[504.103 1000 1],[505.598 1000 1],[509.142 10 2],[511.376 7 2],[511.412 8 2],[518.19 100 1],[518.525 100 1],[519.286 200 1],[519.726 5 2],[520.241 500 1],[529.519 30 1],[530.497 2 3],[530.949 1 3],[540.534 100 1],[541.724 15 1],[542.892 15 1],[543.289 15 1],[543.862 100 1],[544.726 20 1],[545.146 6 2],[545.449 15 1],[545.645 100 1],[546.643 500 1],[546.687 500 1],[546.921 100 1],[547.305 7 2],[549.323 40 0],[549.645 200 1],[551.7535 35 0],[554.074 100 1],[557.666 150 1],[562.2221 30 0],[563.297 100 1],[563.948 200 1],[564.5611 90 0],[566.066 150 1],[566.5554 80 0],[566.956 1000 1],[568.144 30 1],[568.4484 120 0],[568.881 300 1],[569.0425 100 0],[570.1105 90 0],[570.137 200 1],[570.46 7 2],[570.637 100 1],[570.8397 160 0],[571.629 8 2],[573.973 20 2],[574.7667 45 0],[575.3625 45 0],[575.422 45 0],[576.2977 45 0],[577.2145 70 0],[578.0384 70 0],[578.573 30 1],[579.3071 90 0],[579.49 30 1],[579.7859 100 0],[580.047 150 1],[580.674 200 1],[582.78 30 1],[584.613 50 1],[586.748 10 1],[586.84 300 1],[587.3764 40 0],[589.879 10 2],[591.522 150 1],[594.8545 200 0],[595.756 500 1],[597.893 500 1],[606.745 10 1],[608.006 20 1],[608.667 10 1],[612.5021 90 0],[613.1574 85 0],[613.185 90 0],[614.2487 100 0],[614.5015 100 0],[615.5134 160 0],[623.732 160 0],[623.8287 40 0],[624.3813 125 0],[624.4468 125 0],[625.4188 180 0],[631.446 7 2],[633.1954 45 0],[634.71 1000 1],[637.136 1000 1],[652.436 6 2],[652.6609 45 0],[652.7199 45 0],[655.5462 45 0],[666.052 50 1],[666.5 15 1],[666.756 5 3],[667.188 100 1],[669.938 20 1],[670.121 7 3],[671.704 50 1],[672.1853 100 0],[674.164 30 0],[675.028 20 1],[681.845 30 1],[682.982 50 1],[683.156 6 2],[684.8568 30 0],[685.165 7 2],[697.6523 80 0],[699.836 3 3],[700.3567 180 0],[700.5883 180 0],[701.728 30 0],[701.7646 90 0],[703.4903 250 0],[704.794 6 3],[706.841 4 3],[716.469 70 0],[716.5545 200 0],[718.489 70 0],[719.358 65 0],[719.39 30 0],[722.6206 100 0],[723.5326 100 0],[723.582 60 0],[725.0625 180 0],[727.5294 160 0],[728.281 40 0],[728.9173 400 0],[729.026 55 0],[737.3 35 0],[740.5774 375 0],[740.9082 200 0],[741.535 40 0],[741.5946 275 0],[742.3497 425 0],[742.46 85 0],[746.189 5 2],[746.262 8 2],[746.632 9 2],[761.236 12 2],[763.05 2 3],[765.456 4 3],[767.875 4 3],[768.0267 100 0],[771.879 5 3],[772.382 6 3],[772.564 2 3],[773.047 1 3],[774.271 40 0],[775.291 1 3],[780.0008 30 0],[784.88 400 1],[784.972 500 1],[784.9967 30 0],[791.8386 90 0],[793.2349 120 0],[794.4001 140 0],[797.0306 35 0],[803.5619 35 0],[809.3241 70 0],[810.286 9 2],[810.345 11 2],[819.043 7 2],[819.116 6 2],[819.168 8 2],[823.0642 35 0],[824.061 1 3],[826.257 9 2],[826.564 5 2],[826.932 8 2],[827.138 5 2],[827.194 6 2],[844.3982 40 0],[850.1547 40 0],[850.2221 60 0],[853.6165 40 0],[855.678 120 0],[864.8462 50 0],[872.8011 40 0],[874.2451 75 0],[875.2009 100 0],[879.0389 35 0],[895.725 2 3],[901.816 1 3],[941.272 100 1],[941.3506 100 0],[1037.1269 30 0],[1058.5141 120 0],[1060.3431 120 0],[1066.0975 120 0],[1069.4251 30 0],[1072.7408 30 0],[1074.9384 60 0],[1078.455 30 0],[1078.6856 80 0],[1082.7091 140 0],[1084.3854 60 0],[1086.879 30 0],[1086.9541 130 0],[1088.2802 30 0],[1088.5336 30 0],[1097.9308 80 0],[1098.2061 30 0],[1101.7965 80 0],[1118.76 13 0],[1128.984 12 0],[1161.109 12 0],[1198.419 370 0],[1199.157 220 0],[1203.151 440 0],[1210.353 150 0],[1227.068 120 0],[1317.69 11 0],[1588.839 190 0],[1596.004 40 0],[1606.003 95 0],[1609.48 20 0],[1616.371 60 0],[1621.568 11 0],[1638.155 16 0],[1668.077 29 0],[1732.7289 28 0],[1872.29 26 0],[1938.5939 15 0],[1943.2971 48 0],[1949.3381 13 0],[1972.25 110 0],[1992.8881 31 0],[2091.7131 12 0],[2135.424 21 0],[2206.2711 12 0]}{ALLx2000x1000x2000x30x15x20x0}{UVx2000x1000x2000x30x15x20x0}{VISx1000x425x1000x30x10x0x0}{IVx500x440x500x11x2x0x0}% +\pgfspectra@elt@search{#1}{Si}{[11.786 20 4],[11.897 20 4],[45.782 4 3],[45.816 3 3],[51.512 2 3],[51.635 3 3],[56.661 8 2],[64.576 2 3],[65.222 6 2],[65.333 8 2],[67.348 5 2],[74.994 5 3],[80.007 5 2],[80.51 10 1],[81.505 7 3],[81.813 8 3],[82.052 20 1],[82.341 9 2],[84.372 20 1],[84.577 40 1],[85.014 10 1],[88.34 5 2],[88.972 100 1],[89.2 200 1],[89.941 10 1],[90.174 20 1],[91.301 10 1],[91.385 20 1],[92.981 20 1],[93.909 7 2],[96.795 9 2],[98.987 100 1],[99.268 200 1],[99.352 10 2],[99.479 13 2],[99.739 16 2],[100.537 7 2],[102.07 25 1],[102.369 50 1],[103.116 7 2],[103.392 8 2],[103.705 7 2],[105.705 30 1],[105.75 15 1],[106.663 8 3],[108.322 6 2],[110.837 14 2],[110.997 16 2],[111.323 18 2],[112.249 8 3],[112.744 20 1],[112.791 40 1],[112.834 10 3],[114.055 6 2],[114.158 7 2],[114.228 6 2],[114.431 8 2],[114.496 6 2],[114.511 8 2],[114.518 7 2],[115.5 6 2],[115.596 6 2],[115.81 7 2],[116.026 6 2],[116.158 8 2],[117.437 5 2],[117.443 6 2],[117.8 8 2],[119.042 100 1],[119.328 200 1],[119.45 250 1],[119.739 100 1],[120.651 30 2],[120.653 30 2],[120.752 9 2],[121.046 10 2],[121.612 10 1],[122.391 20 1],[122.425 20 1],[122.497 10 1],[122.681 50 1],[122.689 20 1],[122.699 40 1],[122.76 100 1],[122.844 10 1],[122.862 25 1],[122.875 150 1],[122.939 200 1],[123.543 7 2],[123.592 10 1],[124.674 100 1],[124.843 150 1],[125.009 100 1],[125.043 150 1],[125.116 200 1],[125.528 10 0],[125.649 40 0],[125.88 50 0],[126.042 1000 1],[126.473 2000 1],[126.502 200 1],[128.035 6 2],[129.454 17 2],[129.673 14 2],[129.889 15 2],[129.896 18 2],[130.115 14 2],[130.332 16 2],[130.437 100 1],[130.559 50 1],[130.927 200 1],[130.946 20 1],[131.259 13 2],[134.147 8 2],[134.239 7 2],[134.339 6 2],[134.687 100 1],[134.854 100 1],[135.006 150 1],[135.052 20 1],[135.066 20 1],[135.264 100 1],[135.372 100 1],[136.16 8 2],[136.237 5 2],[136.347 7 2],[136.526 8 2],[136.705 7 2],[136.944 5 2],[137.303 5 2],[138.799 5 2],[139.376 15 3],[140.277 12 3],[140.907 10 1],[141.022 20 1],[141.697 10 1],[141.724 13 2],[143.369 6 2],[143.577 8 2],[143.617 7 2],[144.173 5 2],[144.72 6 2],[145.725 5 2],[147.465 15 1],[148.487 15 1],[148.502 90 1],[148.522 30 1],[148.551 100 1],[150.024 12 2],[150.119 10 2],[150.187 9 2],[150.606 6 2],[150.91 100 1],[151.207 50 1],[151.357 30 1],[151.691 60 1],[152.672 500 1],[153.345 1000 1],[156.245 10 1],[156.285 15 1],[156.377 10 1],[157.387 50 0],[157.482 50 0],[159.241 50 0],[159.455 150 0],[159.493 50 0],[159.795 30 0],[162.287 100 0],[162.571 30 0],[162.943 300 0],[162.992 200 0],[163.113 75 0],[163.398 50 0],[163.461 1 3],[165.335 30 0],[166.452 30 0],[166.637 50 0],[166.762 100 0],[166.852 100 0],[167.259 100 0],[167.332 7 2],[167.52 200 0],[168.268 30 0],[168.682 30 0],[168.929 50 0],[169.079 30 0],[169.329 50 0],[169.551 50 0],[169.62 200 0],[169.794 200 0],[170.042 50 0],[170.063 30 0],[170.286 30 0],[170.443 50 0],[171.083 10 1],[171.13 20 1],[172.253 6 3],[172.738 5 3],[174.388 30 0],[174.74 50 0],[175.311 30 0],[176.366 50 0],[176.503 40 0],[176.56 30 0],[176.606 30 0],[177.063 30 0],[177.092 100 0],[177.683 100 0],[178.323 50 0],[179.912 100 0],[180.8 150 1],[180.909 50 0],[181.407 500 0],[181.692 200 1],[181.745 10 1],[182.245 50 0],[183.651 200 0],[183.801 30 0],[184.115 100 0],[184.144 200 0],[184.255 9 2],[184.377 200 0],[184.551 300 0],[184.61 100 0],[184.747 400 0],[184.814 200 0],[184.874 100 0],[185.067 500 0],[185.179 30 0],[185.246 200 0],[185.315 50 0],[186.932 20 1],[187.023 15 1],[187.31 100 0],[187.484 500 0],[187.581 100 0],[188.185 200 0],[188.77 200 0],[189.325 200 0],[190.133 1000 0],[190.246 100 1],[190.466 50 0],[191.062 50 1],[194.167 50 1],[194.459 15 1],[194.933 10 1],[194.956 100 1],[195.497 100 0],[198.443 30 0],[199.185 50 0],[201.097 30 0],[205.483 50 0],[205.865 50 1],[205.901 50 1],[206.119 40 0],[206.552 30 0],[207.202 200 1],[207.27 200 1],[210.321 30 0],[211.463 30 0],[212.018 3 3],[212.412 100 0],[212.747 4 3],[213.399 10 1],[213.64 30 1],[213.656 50 1],[214.791 50 0],[217.689 5 2],[220.798 110 0],[221.089 115 0],[221.174 110 0],[221.667 120 0],[221.806 120 0],[221.891 50 0],[228.704 5 3],[229.103 35 0],[229.548 6 2],[229.687 10 2],[230.093 8 2],[230.306 55 0],[230.819 10 2],[232.856 2 3],[233.44 30 1],[233.461 30 1],[234.42 10 1],[234.954 10 1],[235.017 20 1],[235.309 20 1],[235.63 100 1],[235.718 30 1],[235.797 50 1],[236.02 10 1],[236.676 2 3],[236.697 30 1],[237.099 3 3],[237.426 20 1],[242.845 10 1],[243.515 300 0],[243.877 65 0],[244.336 65 0],[244.948 11 2],[245.212 70 0],[248.282 2 3],[248.32 6 2],[248.538 1 3],[250.69 425 0],[251.432 375 0],[251.6113 500 0],[251.751 7 3],[251.9202 350 0],[252.4108 425 0],[252.8509 450 0],[253.2381 110 0],[254.182 25 2],[254.609 10 2],[255.921 14 2],[256.3679 30 0],[256.8641 85 0],[257.7151 45 0],[263.1282 190 0],[264.079 11 2],[265.551 14 2],[267.219 1 3],[267.512 4 3],[267.525 4 3],[267.757 1 3],[268.221 10 1],[272.381 3 3],[281.711 9 2],[283.149 7 2],[283.962 5 2],[288.1579 1000 0],[288.751 10 1],[289.513 3 3],[290.428 300 1],[290.447 2 3],[290.569 500 1],[295.915 5 2],[297.0355 55 0],[297.152 1 3],[298.052 5 2],[298.7645 150 0],[300.6739 50 0],[301.309 5 2],[302.0004 75 0],[302.155 20 1],[303 100 1],[303.473 6 2],[303.729 8 2],[304.093 9 2],[304.157 20 1],[304.219 30 1],[304.369 100 1],[304.385 10 1],[304.393 7 2],[304.508 5 2],[304.577 10 1],[304.83 50 1],[305.318 150 1],[306.824 7 2],[308.624 25 2],[308.646 6 2],[309.342 20 2],[309.365 5 2],[309.683 16 2],[312.627 6 2],[314.737 7 2],[314.956 7 3],[316.161 8 2],[316.571 9 3],[318.513 16 2],[318.602 13 2],[318.897 150 1],[319.225 50 1],[319.309 150 1],[319.421 50 1],[319.469 50 1],[319.541 100 1],[319.65 14 2],[319.951 200 1],[320.249 20 1],[320.387 100 1],[321.003 200 1],[321.055 15 2],[321.466 75 1],[321.625 7 2],[321.799 15 1],[322.044 10 1],[322.301 20 1],[323.05 12 2],[323.395 14 2],[324.162 15 2],[324.419 1 3],[325.34 7 2],[325.374 5 2],[325.48 7 2],[325.866 12 2],[327.046 6 2],[327.626 10 2],[327.926 7 2],[333.314 300 1],[333.982 500 1],[348.691 15 2],[352.594 9 2],[356.967 8 2],[359.047 20 2],[362.254 8 2],[363.945 5 2],[364.512 6 2],[368.14 7 2],[368.215 5 2],[376.244 8 3],[377.315 6 3],[379.141 20 2],[379.611 25 2],[380.654 30 2],[384.246 7 2],[385.366 100 1],[385.602 500 1],[386.26 200 1],[390.5523 300 0],[392.447 20 2],[394.749 6 2],[395.574 10 1],[396.384 6 2],[397.746 10 1],[398.124 5 2],[399.177 15 1],[399.801 10 1],[403.139 1 3],[403.806 2 3],[407.545 20 1],[407.678 15 1],[408.885 10 3],[410.186 5 2],[410.242 8 2],[410.2936 70 0],[411.55 5 2],[411.61 9 3],[412.807 300 1],[413.089 500 1],[418.335 10 1],[419.072 100 1],[419.813 50 1],[421.241 7 3],[431.41 3 3],[432.818 5 3],[433.85 9 2],[434.14 8 2],[437.763 8 2],[440.373 2 3],[440.59 6 2],[440.672 8 2],[441.165 1 3],[449.405 6 2],[455.262 30 2],[455.4 8 2],[456.782 25 2],[457.476 20 2],[461.127 1 3],[461.966 7 2],[462.142 100 1],[462.172 150 1],[462.862 3 3],[463.124 9 3],[463.828 7 2],[465.432 10 3],[465.692 3 3],[466.587 8 2],[466.714 1 3],[467.33 2 3],[468.302 9 2],[468.38 7 2],[471.665 16 2],[473.052 7 2],[478.2991 50 0],[479.2212 35 0],[479.2324 80 0],[480.043 8 2],[481.333 15 2],[481.972 16 2],[482.897 18 2],[488.32 15 1],[490.699 20 1],[493.28 20 1],[494.745 1 3],[494.7607 30 0],[495.011 3 3],[500.6061 40 0],[504.103 1000 1],[505.598 1000 1],[509.142 10 2],[511.376 7 2],[511.412 8 2],[518.19 100 1],[518.525 100 1],[519.286 200 1],[519.726 5 2],[520.241 500 1],[529.519 30 1],[530.497 2 3],[530.949 1 3],[540.534 100 1],[541.724 15 1],[542.892 15 1],[543.289 15 1],[543.862 100 1],[544.726 20 1],[545.146 6 2],[545.449 15 1],[545.645 100 1],[546.643 500 1],[546.687 500 1],[546.921 100 1],[547.305 7 2],[549.323 40 0],[549.645 200 1],[551.7535 35 0],[554.074 100 1],[557.666 150 1],[562.2221 30 0],[563.297 100 1],[563.948 200 1],[564.5611 90 0],[566.066 150 1],[566.5554 80 0],[566.956 1000 1],[568.144 30 1],[568.4484 120 0],[568.881 300 1],[569.0425 100 0],[570.1105 90 0],[570.137 200 1],[570.46 7 2],[570.637 100 1],[570.8397 160 0],[571.629 8 2],[573.973 20 2],[574.7667 45 0],[575.3625 45 0],[575.422 45 0],[576.2977 45 0],[577.2145 70 0],[578.0384 70 0],[578.573 30 1],[579.3071 90 0],[579.49 30 1],[579.7859 100 0],[580.047 150 1],[580.674 200 1],[582.78 30 1],[584.613 50 1],[586.748 10 1],[586.84 300 1],[587.3764 40 0],[589.879 10 2],[591.522 150 1],[594.8545 200 0],[595.756 500 1],[597.893 500 1],[606.745 10 1],[608.006 20 1],[608.667 10 1],[612.5021 90 0],[613.1574 85 0],[613.185 90 0],[614.2487 100 0],[614.5015 100 0],[615.5134 160 0],[623.732 160 0],[623.8287 40 0],[624.3813 125 0],[624.4468 125 0],[625.4188 180 0],[631.446 7 2],[633.1954 45 0],[634.71 1000 1],[637.136 1000 1],[652.436 6 2],[652.6609 45 0],[652.7199 45 0],[655.5462 45 0],[666.052 50 1],[666.5 15 1],[666.756 5 3],[667.188 100 1],[669.938 20 1],[670.121 7 3],[671.704 50 1],[672.1853 100 0],[674.164 30 0],[675.028 20 1],[681.845 30 1],[682.982 50 1],[683.156 6 2],[684.8568 30 0],[685.165 7 2],[697.6523 80 0],[699.836 3 3],[700.3567 180 0],[700.5883 180 0],[701.728 30 0],[701.7646 90 0],[703.4903 250 0],[704.794 6 3],[706.841 4 3],[716.469 70 0],[716.5545 200 0],[718.489 70 0],[719.358 65 0],[719.39 30 0],[722.6206 100 0],[723.5326 100 0],[723.582 60 0],[725.0625 180 0],[727.5294 160 0],[728.281 40 0],[728.9173 400 0],[729.026 55 0],[737.3 35 0],[740.5774 375 0],[740.9082 200 0],[741.535 40 0],[741.5946 275 0],[742.3497 425 0],[742.46 85 0],[746.189 5 2],[746.262 8 2],[746.632 9 2],[761.236 12 2],[763.05 2 3],[765.456 4 3],[767.875 4 3],[768.0267 100 0],[771.879 5 3],[772.382 6 3],[772.564 2 3],[773.047 1 3],[774.271 40 0],[775.291 1 3],[780.0008 30 0],[784.88 400 1],[784.972 500 1],[784.9967 30 0],[791.8386 90 0],[793.2349 120 0],[794.4001 140 0],[797.0306 35 0],[803.5619 35 0],[809.3241 70 0],[810.286 9 2],[810.345 11 2],[819.043 7 2],[819.116 6 2],[819.168 8 2],[823.0642 35 0],[824.061 1 3],[826.257 9 2],[826.564 5 2],[826.932 8 2],[827.138 5 2],[827.194 6 2],[844.3982 40 0],[850.1547 40 0],[850.2221 60 0],[853.6165 40 0],[855.678 120 0],[864.8462 50 0],[872.8011 40 0],[874.2451 75 0],[875.2009 100 0],[879.0389 35 0],[895.725 2 3],[901.816 1 3],[941.272 100 1],[941.3506 100 0],[1037.1269 30 0],[1058.5141 120 0],[1060.3431 120 0],[1066.0975 120 0],[1069.4251 30 0],[1072.7408 30 0],[1074.9384 60 0],[1078.455 30 0],[1078.6856 80 0],[1082.7091 140 0],[1084.3854 60 0],[1086.879 30 0],[1086.9541 130 0],[1088.2802 30 0],[1088.5336 30 0],[1097.9308 80 0],[1098.2061 30 0],[1101.7965 80 0],[1118.76 13 0],[1128.984 12 0],[1161.109 12 0],[1198.419 370 0],[1199.157 220 0],[1203.151 440 0],[1210.353 150 0],[1227.068 120 0],[1317.69 11 0],[1588.839 190 0],[1596.004 40 0],[1606.003 95 0],[1609.48 20 0],[1616.371 60 0],[1621.568 11 0],[1638.155 16 0],[1668.077 29 0],[1732.7289 28 0],[1872.29 26 0],[1938.5939 15 0],[1943.2971 48 0],[1949.3381 13 0],[1972.25 110 0],[1992.8881 31 0],[2091.7131 12 0],[2135.424 21 0],[2206.2711 12 0]}{ALLx2000x1000x2000x30x15x20x0}{UVx2000x1000x2000x30x15x20x0}{VISx1000x425x1000x30x10x0x0}{IVx500x440x500x11x2x0x0}%[7.861 1 4],[7.89 1 4],[8.081 2 4],[8.111 2 4],[8.518 10 4],[8.558 6 4],[9.045 4 4],[9.085 4 4],[9.644 15 4],[9.714 10 4],[9.821 2 4], \pgfspectra@elt@search{#1}{P}{[25.559 80 4],[25.567 50 4],[28.2301 90 3],[30.4996 90 3],[31.058 110 4],[31.134 150 4],[32.847 300 4],[32.878 250 4],[34.723 150 4],[34.82 200 4],[35.9293 120 3],[35.9899 150 3],[36.1514 120 3],[36.1629 150 3],[37.1299 120 3],[37.1504 150 3],[37.2001 200 3],[37.856 110 4],[38.8318 500 3],[38.95 250 4],[39.07 300 4],[41.003 150 4],[41.4604 120 3],[41.4999 200 3],[41.5805 250 3],[44.4245 250 3],[44.5158 300 3],[47.1146 90 2],[47.56 375 4],[48.4278 90 2],[49.818 120 2],[53.463 110 4],[53.499 80 4],[54.257 520 4],[54.492 600 4],[56.8038 250 3],[56.9853 200 2],[58.1831 200 2],[62.9008 350 3],[62.9914 400 3],[63.1779 500 3],[64.8482 350 3],[67.39 450 4],[75.651 300 3],[77.6353 300 3],[81.024 10 1],[82.3179 650 3],[82.473 700 3],[82.7932 800 3],[84.4646 200 2],[84.5038 150 2],[84.5664 250 2],[84.7019 250 3],[84.7669 300 2],[84.8016 200 2],[84.8465 120 2],[84.8639 150 2],[84.9799 350 3],[85.0392 200 3],[85.2686 250 2],[85.5624 350 2],[85.9406 200 2],[85.9652 500 2],[85.9729 250 2],[86.544 10 1],[86.545 450 4],[87.139 600 4],[87.7476 700 3],[91.3971 300 2],[91.712 300 2],[91.8665 350 2],[92.1849 250 2],[95.0655 1000 3],[99.762 250 4],[99.7999 200 2],[100.038 150 4],[100.3598 250 2],[102.5563 570 3],[102.8096 500 3],[103.0517 570 3],[103.3111 500 3],[103.5517 500 3],[111.798 900 4],[111.8551 570 3],[112.801 700 4],[120.6422 200 3],[124.982 20 1],[130.187 20 1],[130.447 20 1],[130.468 15 1],[130.548 35 1],[130.987 25 1],[131.07 60 1],[133.4808 500 2],[133.5705 200 3],[134.4327 650 2],[134.4845 300 2],[136.6695 500 3],[137.2674 400 3],[137.349 20 0],[137.706 20 0],[137.7282 350 3],[137.793 20 0],[137.94 25 0],[137.962 150 4],[138.0463 250 2],[138.1089 150 2],[138.147 25 0],[138.505 250 4],[143.013 50 0],[144.783 375 4],[145.289 30 1],[148.4507 500 3],[148.7788 400 3],[148.9098 300 3],[149.136 50 0],[149.299 40 0],[150.2228 350 2],[150.4663 250 2],[153.251 80 1],[153.59 120 1],[153.639 80 1],[154.229 120 1],[154.843 60 0],[161.05 450 4],[161.8632 150 2],[161.8907 200 2],[167.107 70 0],[167.168 180 0],[167.248 90 0],[167.461 230 0],[167.971 300 0],[168.599 120 0],[169.406 100 0],[170.641 60 0],[177.499 250 0],[178.287 200 0],[178.768 180 0],[184.719 100 0],[185.122 80 0],[185.891 150 0],[185.943 150 0],[186.2762 250 3],[186.2893 120 3],[186.358 200 3],[188.8523 650 3],[191.0183 200 3],[198.5682 120 3],[198.5851 150 3],[198.6114 200 3],[198.7022 150 3],[202.348 100 0],[203.347 150 0],[213.547 100 0],[213.618 200 0],[214.914 200 0],[215.294 100 0],[215.408 150 0],[218.029 200 4],[218.642 150 4],[242.44 375 4],[244.093 450 4],[244.124 200 4],[247.7823 200 3],[247.807 150 3],[247.8256 250 3],[248.419 100 1],[253.399 500 0],[253.561 700 0],[255.325 600 0],[255.49 500 0],[260.5506 250 3],[260.606 150 1],[261.1147 200 2],[262.618 100 1],[263.2713 300 2],[263.676 90 1],[264.4295 400 3],[268.0133 200 2],[272.4764 300 3],[272.877 400 3],[272.912 200 3],[273.9309 500 3],[273.9872 250 3],[274.0223 200 3],[289.5241 250 2],[296.1 300 4],[296.1242 200 3],[297.855 450 4],[317.509 700 4],[318.6186 250 2],[320.404 520 4],[321.9307 300 2],[323.3536 150 2],[323.3602 400 2],[330.892 150 1],[334.7736 650 3],[336.4467 570 3],[337.1122 400 3],[341.3543 200 3],[341.934 125 1],[342.5 100 1],[355.6546 200 2],[357.7526 200 2],[373.3393 200 3],[390.4812 200 2],[391.4314 250 2],[395.7641 300 2],[397.8307 350 2],[405.744 200 2],[405.9312 400 2],[408.0084 300 2],[408.318 150 4],[409.495 110 4],[417.848 100 1],[422.2195 500 2],[424.672 350 2],[424.9656 300 3],[428.86 200 1],[438.535 200 1],[442.071 400 1],[442.8171 200 2],[445.246 100 1],[446.3 150 1],[446.3668 200 2],[446.798 120 1],[447.526 200 1],[447.9776 250 2],[449.924 200 1],[453.081 120 1],[454.0288 250 3],[454.1112 250 3],[454.8056 150 3],[454.8449 200 3],[455.483 120 1],[455.807 120 1],[458.171 120 1],[458.804 500 1],[458.986 500 1],[460.208 600 1],[462.67 300 1],[465.831 300 1],[486.442 200 1],[492.72 150 1],[494.353 500 1],[495.439 300 1],[496.971 300 1],[515.672 110 4],[519.141 150 1],[523.5499 150 3],[525.352 300 1],[529.613 400 1],[531.607 250 1],[534.475 300 1],[537.82 250 1],[538.688 300 1],[540.972 200 1],[542.591 400 1],[545.074 400 1],[545.831 100 0],[546.12 125 1],[547.775 200 0],[548.355 200 1],[549.973 200 1],[550.719 200 1],[554.114 200 1],[558.327 200 1],[558.834 250 1],[572.771 100 1],[598.9774 150 3],[602.418 500 1],[603.404 400 1],[604.312 500 1],[605.55 250 1],[605.786 100 1],[608.3409 150 2],[608.782 350 1],[609.768 150 0],[614.2605 150 3],[616.559 350 1],[619.901 180 0],[623.229 100 1],[636.727 200 1],[640.9204 150 2],[643.532 250 1],[643.631 130 1],[645.999 600 1],[648.444 150 2],[648.6381 150 2],[650.346 600 1],[650.797 600 1],[671.328 150 1],[671.3939 150 3],[671.5906 120 3],[671.742 120 0],[699.269 150 2],[716.545 100 0],[717.512 150 0],[717.666 120 0],[744.3657 200 3],[750.576 100 0],[784.563 250 1],[811.3528 150 2],[827.807 120 0],[836.784 150 0],[853.146 100 0],[861.385 100 0],[863.762 150 0],[874.154 250 0],[887.217 50 0],[952.578 30 0],[959.354 25 0],[973.474 20 0],[975.073 25 0],[979.679 50 0],[1008.422 25 0],[1052.945 6 0],[1058.152 8 0]}{ALLx1000x700x600x650x1000x900x0}{UVx1000x700x150x650x1000x900x0}{VISx600x200x600x500x300x150x0}{IVx250x250x250x150x0x0x0}% \pgfspectra@elt@search{#1}{S}{[43.74 5 4],[43.82 5 4],[43.96 5 4],[51.93 20 3],[52.01 20 3],[52.08 40 3],[52.2 20 3],[52.25 20 3],[55.12 20 3],[65.25 40 3],[65.3 40 3],[65.36 70 3],[65.4 40 3],[65.56 70 3],[65.59 20 3],[65.73 110 3],[65.83 40 4],[65.98 70 4],[66.09 40 3],[66.14 160 3],[66.32 110 4],[66.37 40 3],[66.48 40 3],[66.61 70 3],[67.62 5 4],[67.73 5 4],[67.81 20 4],[68.03 40 4],[68.09 110 4],[68.16 40 4],[68.62 5 4],[68.69 5 4],[68.98 5 4],[69.17 5 4],[69.35 20 4],[72.95 70 2],[73.242 110 2],[73.52 70 2],[73.85 70 2],[74.49 110 3],[74.84 110 3],[75.02 110 3],[75.38 110 3],[78.65 285 4],[78.9 70 2],[79.67 70 2],[79.83 40 3],[80.05 70 3],[80.4 70 3],[80.97 70 3],[81.6 110 3],[82.49 70 2],[83.63 70 2],[84.92 160 4],[85.22 110 4],[85.48 220 4],[85.79 110 4],[86.05 110 4],[88.36 20 4],[88.45 20 4],[88.58 5 4],[90.09 20 4],[90.28 5 4],[90.59 20 4],[90.69 40 1],[91.05 40 1],[91.27 40 1],[93.74 40 1],[93.77 40 1],[99.6 20 1],[100.05 20 1],[101.44 20 1],[101.95 20 1],[106.27 160 3],[107.3 160 3],[107.35 70 3],[107.71 285 2],[109.66 20 1],[110.23 40 1],[110.84 20 3],[111.09 20 3],[113.1 20 1],[113.16 20 1],[119.4 70 2],[120.1 70 2],[123.41 40 1],[125.05 40 1],[125.38 110 1],[125.95 110 1],[127.0782 275 0],[127.7216 250 0],[129.5653 280 0],[130.2337 275 0],[130.2863 235 0],[130.311 235 0],[130.343 245 0],[130.5883 260 0],[131.0194 265 0],[131.6542 355 0],[131.6618 290 0],[132.3515 375 0],[132.6643 355 0],[138.1552 775 0],[138.551 710 0],[138.8435 960 0],[138.9154 640 0],[139.2588 775 0],[139.6112 1000 0],[140.9337 300 0],[142.503 510 0],[143.328 425 0],[143.6968 300 0],[144.8229 300 0],[147.2972 425 0],[147.3995 550 0],[147.438 300 0],[148.1665 355 0],[148.3039 485 0],[148.3233 300 0],[148.5622 330 0],[148.715 390 0],[162.4 20 3],[162.92 20 3],[166.6688 680 0],[168.753 640 0],[180.7311 710 0],[182.0343 680 0],[182.6245 640 0],[190.0286 710 0],[191.4698 550 0],[238.7 20 3],[239.89 40 3],[246.05 110 2],[248.96 110 2],[249.62 160 2],[249.91 160 2],[250.82 220 2],[262.91 20 1],[263.69 70 2],[266.54 220 2],[267 40 1],[268.05 70 2],[269.18 110 2],[270.28 110 2],[271.89 220 2],[272.14 110 2],[272.68 220 2],[273.11 220 2],[274.1 110 2],[275.69 285 2],[277.52 110 2],[278.55 160 2],[279.74 70 2],[284.77 40 1],[285.6 70 2],[286.35 110 2],[290.43 160 2],[296.48 70 2],[298.6 160 2],[309.75 110 3],[311.77 40 3],[323.42 70 2],[332.49 70 2],[349.73 110 2],[363.2 160 2],[366.2 70 2],[370.94 110 2],[371.78 160 2],[383.83 160 2],[386.76 285 0],[390.2 285 0],[392.86 160 2],[393.33 360 1],[412.08 450 0],[414.23 280 1],[414.51 360 1],[415.31 450 1],[416.27 450 1],[425.36 360 2],[428.5 110 2],[433.27 70 2],[469.41 450 0],[469.54 285 0],[469.62 160 0],[471.62 280 1],[481.55 450 1],[492.41 360 1],[492.53 450 1],[499.35 285 0],[542.86 360 1],[543.28 650 1],[545.38 1000 1],[547.36 1000 1],[550.97 1000 1],[556.49 280 1],[560.61 1000 1],[564 450 1],[564.03 450 1],[564.7 280 1],[565.99 650 1],[566.47 450 1],[570.61 160 0],[581.92 450 1],[605.27 450 0],[628.64 280 1],[628.71 450 1],[630.55 450 1],[631.27 450 1],[638.49 280 1],[639.73 280 1],[639.8 280 1],[641.37 360 1],[674.36 160 0],[674.88 285 0],[675.72 450 0],[757.9 450 0],[762.98 450 0],[768.61 285 0],[769.67 450 0],[792.4 1000 0],[792.88 160 0],[793.03 285 0],[793.17 450 0],[796.74 450 0],[796.74 450 1],[831.47 450 0],[831.47 450 1],[858.56 450 0],[868.05 285 0],[869.47 450 0],[887.45 360 0],[888.25 110 0],[888.42 220 0],[903.59 160 0],[921.29 450 0],[922.81 450 0],[923.75 450 0],[941.35 285 0],[942.19 285 0],[943.71 285 0],[964.99 650 0],[967.23 450 0],[968.08 450 0],[969.37 450 0],[969.73 285 0],[973.97 285 0],[974.19 110 0],[993.23 285 0],[994.98 285 0],[995.89 285 0],[1045.55 285 0],[1045.68 70 0],[1045.95 285 0]}{ALLx1000x1000x1000x360x160x285x0}{UVx1000x1000x110x285x160x285x0}{VISx1000x450x1000x360x0x0x0}{IVx1000x1000x450x0x0x0x0}% \pgfspectra@elt@search{#1}{Cl}{[28.733 30 4],[31.962 30 3],[33.184 20 3],[37.378 30 4],[39.015 40 4],[39.243 50 4],[40.627 10 2],[41.137 40 2],[41.181 40 2],[43.783 40 3],[46.486 40 3],[48.617 80 3],[53.473 80 3],[53.567 70 3],[53.615 60 3],[53.653 30 4],[53.701 40 4],[53.746 30 4],[53.761 90 3],[53.803 50 4],[53.812 60 3],[53.868 40 4],[54.223 80 4],[54.23 60 4],[54.287 40 4],[54.511 100 4],[54.633 60 4],[54.763 100 4],[54.922 50 3],[55.002 40 3],[55.202 70 3],[55.33 60 3],[55.462 70 3],[55.623 60 2],[55.661 70 2],[55.712 70 2],[55.9305 35 1],[56.153 70 2],[56.168 70 2],[56.174 70 2],[57.1904 40 1],[57.4406 80 1],[58.624 50 1],[60.15 50 3],[60.459 50 3],[60.635 50 2],[60.89 40 3],[61.207 40 3],[61.8057 70 1],[61.9982 60 1],[62.0298 80 1],[62.128 40 2],[62.6735 70 1],[63.319 40 4],[63.532 40 4],[63.5881 80 1],[63.6626 100 1],[65.0894 100 1],[65.37 40 3],[65.9811 100 1],[66.1841 130 1],[66.3074 200 1],[67.038 30 2],[67.313 30 2],[68.192 40 4],[68.2053 150 1],[68.317 40 4],[68.7656 150 1],[68.893 40 4],[69.3594 150 1],[72.5271 200 1],[72.8951 250 1],[74.521 40 3],[77.7562 200 1],[78.758 500 1],[78.874 500 1],[79.3342 500 1],[83.143 40 3],[83.484 50 3],[83.497 50 3],[83.9297 600 1],[83.9599 800 1],[84.081 40 3],[84.093 60 3],[84.141 700 1],[85.1691 500 1],[88.313 40 4],[88.8026 200 1],[89.3549 200 1],[89.434 40 4],[89.491 10 4],[93.628 10 2],[96.1499 200 1],[96.992 3 0],[97.321 50 3],[97.756 60 3],[97.79 40 3],[97.8284 4 0],[98.495 70 3],[98.575 40 3],[99.8372 2.5 0],[99.8432 2.5 0],[100.2346 7.5 0],[100.528 50 2],[100.878 60 2],[101.3664 15 0],[101.502 70 2],[102.5553 9 0],[106.3831 600 1],[106.7945 300 1],[107.1036 900 1],[107.1767 600 1],[107.523 500 1],[107.908 500 1],[108.4667 20 0],[108.5171 20 0],[108.5304 25 0],[108.806 40 0],[109.0271 35 0],[109.0982 25 0],[109.2437 25 0],[109.4769 40 0],[109.5148 35 0],[109.5662 35 0],[109.5797 40 0],[109.681 25 0],[109.7369 30 0],[109.8068 20 0],[109.9523 20 0],[110.7528 50 0],[113.9214 80 1],[116.7148 80 0],[117.9293 300 0],[118.8774 120 0],[120.1353 90 0],[133.5726 300 0],[134.724 1000 0],[135.1657 500 0],[136.3447 1200 0],[137.3116 250 0],[137.9528 2000 0],[138.9693 2500 0],[138.9957 2000 0],[139.6527 1200 0],[144.147 50 1],[152.8569 50 1],[153.721 30 3],[153.93 20 3],[154.2942 50 1],[154.519 20 3],[154.915 20 3],[155.8144 50 1],[156.505 50 1],[162.286 20 3],[182.25 60 2],[182.84 50 2],[185.7488 50 1],[190.161 50 2],[198.361 50 2],[199.737 45 1],[200.684 40 2],[203.2116 45 1],[208.8583 35 1],[209.1458 35 1],[225.307 70 2],[226.895 50 2],[227.834 50 2],[228.393 70 2],[232.35 60 2],[233.645 50 2],[234.064 60 2],[235.967 60 2],[237.037 60 2],[241.642 70 2],[242.779 17 1],[243.407 36 1],[244.714 60 2],[244.858 60 2],[248.691 50 2],[249.853 34 1],[250.274 47 1],[253.248 50 2],[254.696 26 1],[254.988 50 1],[256.484 46 1],[258.067 60 2],[260.331 32 1],[260.359 50 2],[263.267 50 2],[263.318 50 2],[265.872 95 1],[266.554 60 2],[267.695 75 1],[268.804 120 1],[270.136 40 3],[271.037 70 2],[272.403 50 3],[275.123 50 3],[277.064 40 3],[278.247 70 3],[283.54 40 3],[291.205 41 1],[296.556 60 2],[299.665 95 1],[300.606 50 1],[305.796 95 1],[306.313 50 3],[307.132 130 1],[307.668 60 3],[309.219 140 1],[310.446 60 2],[312.372 120 1],[313.934 80 2],[316.787 20 3],[319.145 90 2],[328.98 70 2],[331.543 190 1],[332.057 70 2],[332.906 80 2],[332.91 120 1],[334.042 90 2],[335.335 250 1],[339.289 80 2],[339.345 80 2],[353.003 90 2],[356.068 80 2],[360.21 90 2],[361.285 80 2],[362.269 70 2],[365.695 70 2],[367.028 70 2],[368.205 70 2],[370.545 60 2],[370.734 60 2],[372.045 80 2],[372.654 2 0],[374.881 80 2],[374.996 120 1],[377.935 50 2],[378.117 100 1],[379.876 150 1],[380.518 190 1],[380.946 130 1],[382.02 170 1],[382.759 280 1],[383.335 450 1],[384.32 250 1],[384.537 310 1],[384.565 390 1],[384.58 150 1],[385.099 1000 1],[385.137 790 1],[385.165 120 1],[386.083 2500 1],[386.099 440 1],[386.137 100 1],[391.387 150 1],[391.663 110 1],[392.587 50 2],[394.482 2 0],[399.15 70 2],[401.85 60 2],[405.907 60 2],[410.423 50 2],[410.479 2 0],[410.683 50 2],[413.25 1000 1],[420.967 6.5 0],[422.642 5 0],[426.458 6 0],[436.327 10 0],[436.95 10 0],[437.091 40 2],[437.293 500 1],[437.99 10 0],[438.975 10 0],[439.04 9 0],[440.303 9 0],[443.849 10 0],[447.53 9 0],[448.991 150 1],[452.619 10 0],[460.098 8 0],[460.821 50 2],[462.3938 4 0],[465.404 5 0],[466.1208 8 0],[469.1523 4.5 0],[470.314 30 2],[472.1255 4 0],[474.0729 4.5 0],[476.865 430 1],[478.132 1300 1],[479.455 9900 1],[481.006 2900 1],[481.947 1600 1],[486.375 10 2],[489.677 8100 1],[490.478 4700 1],[491.773 2600 1],[497.164 1 2],[499.548 1000 1],[507.826 2600 1],[509.9789 3 0],[521.794 5600 1],[522.136 2300 1],[539.212 1500 1],[542.323 9900 1],[542.351 1000 1],[544.337 1900 1],[544.421 1000 1],[545.702 560 1],[553.2162 4 0],[579.6305 5 0],[579.9914 4.5 0],[585.6742 3 0],[594.858 10 0],[601.9812 5 0],[608.261 3.5 0],[609.469 190 1],[611.443 16 0],[614.0245 20 0],[619.4757 16 0],[639.866 16 0],[643.4833 15 0],[653.143 15 0],[666.167 140 1],[667.843 15 0],[668.602 130 1],[671.341 120 1],[684.029 15 0],[693.2903 30 0],[698.1886 30 0],[708.6814 60 0],[725.662 750 0],[741.411 500 0],[746.237 55 0],[748.947 55 0],[749.2118 70 0],[754.7072 1100 0],[767.242 230 0],[770.2828 45 0],[771.7581 700 0],[774.497 1000 0],[776.916 220 0],[777.109 65 0],[782.136 220 0],[783.075 170 0],[787.822 300 0],[789.334 22 0],[789.931 230 0],[791.508 180 0],[792.4645 300 0],[793.389 210 0],[793.5012 170 0],[795.252 65 0],[797.472 150 0],[797.697 130 0],[798.06 60 0],[799.785 290 0],[801.561 220 0],[802.333 110 0],[805.107 40 0],[808.451 170 0],[808.556 220 0],[808.667 300 0],[808.773 130 0],[809.467 25 0],[819.442 250 0],[819.913 220 0],[820.021 220 0],[820.378 80 0],[821.204 1800 0],[822.045 300 0],[822.174 2000 0],[833.331 1800 0],[836.071 100 1],[836.184 56 1],[837.594 9990 0],[838.267 18 1],[839.202 10 1],[840.6199 40 0],[842.825 1500 0],[846.734 220 0],[855.044 220 0],[857.524 2000 0],[857.802 75 0],[858.597 7500 0],[862.854 45 0],[864.171 30 0],[868.626 350 0],[891.292 220 0],[894.806 300 0],[903.8982 200 0],[904.543 250 0],[906.9656 100 0],[907.317 200 0],[912.115 750 0],[919.1731 300 0],[919.7596 50 0],[928.886 400 0],[939.3862 150 0],[945.21 350 0],[948.6964 50 0],[958.4801 100 0],[959.222 350 0],[963.2509 25 0],[970.2439 100 0],[974.4426 25 0],[980.7057 20 0],[987.597 40 0],[1039.2549 33.1 0],[1043.283 3.8 1],[1050.662 1 1],[1050.912 1.4 1],[1051.246 1.9 1],[1051.417 2.5 1],[1080.147 0.9 1],[1088.542 0.5 1],[1095.571 0.1 1],[1112.305 30 0],[1139.262 23.1 0],[1140.969 26.9 0],[1143.633 100 0],[1172.056 18 0],[1186.676 19.5 0],[1202.17 17.2 0],[1324.38 35 0],[1329.6 31 0],[1334.68 55 0],[1382.17 52.5 0],[1436.97 14.8 0],[1493.17 29.4 0],[1510.8 26.9 0],[1546.51 38.1 0],[1546.76 16.9 0],[1552.03 109.4 0],[1573.01 148.7 0],[1581.84 19.3 0],[1586.97 278 0],[1588.33 27.7 0],[1592.89 34.2 0],[1596 73.5 0],[1597.05 28.3 0],[1607.76 12.9 0],[1619.85 25.9 0],[1937.0301 22.7 0],[1975.5301 71.7 0],[1976.6801 18.5 0],[2019.94 22.7 0],[2037.01 8.5 0],[2447 10 0]}{ALLx9990x9990x9900x90x90x100x0}{UVx2500x2500x900x90x90x100x0}{VISx9900x1100x9900x70x0x0x0}{IVx9990x9990x100x0x0x0x0}% @@ -66,7 +66,7 @@ \pgfspectra@elt@search{#1}{As}{[60.07 25 4],[61.6 40 4],[71.55 120 4],[73.48 150 4],[73.72 60 4],[76.124 165 1],[80.283 165 1],[84.99 185 2],[86.63 185 2],[87.17 510 2],[88.9 325 2],[92.75 325 2],[93.72 325 2],[95.36 325 2],[96.38 325 2],[98.77 250 4],[102.196 340 1],[102.95 250 4],[105.16 40 4],[105.66 60 4],[108.235 340 1],[113.94 500 1],[114.931 615 1],[117.22 120 2],[118.151 555 1],[118.987 555 1],[119.638 615 1],[119.656 615 1],[120.744 340 1],[120.93 185 2],[121.117 800 1],[121.81 800 1],[122.315 340 1],[124.131 760 1],[124.308 965 1],[124.567 870 1],[125.858 800 1],[126.377 965 1],[126.634 800 1],[126.759 800 1],[128.099 715 1],[128.754 715 1],[130.57 715 1],[130.774 340 1],[133.315 760 1],[134.155 965 1],[135.593 760 1],[136.977 965 1],[137.365 800 1],[137.507 1000 1],[137.578 760 1],[139.464 800 1],[140.031 800 1],[144.859 500 1],[155.888 500 1],[157.099 500 1],[159.36 100 0],[166.055 500 1],[175.86 100 0],[180.615 170 0],[186.034 340 1],[189.042 1000 0],[191.294 500 1],[193.759 800 0],[197.262 585 0],[199.035 170 0],[199.113 100 0],[199.543 100 0],[200.334 230 0],[200.919 100 0],[201.332 100 0],[211.299 100 0],[214.408 100 0],[216.552 135 0],[225.31 150 3],[226.32 200 3],[228.812 350 0],[230.1 200 3],[234.984 350 0],[237.077 100 0],[238.118 135 0],[241.75 250 3],[244.61 150 3],[245.4 250 3],[245.653 170 0],[246.14 200 3],[260.2 340 1],[278.022 170 0],[283.0359 300 1],[283.1164 300 1],[286.044 100 0],[288.4406 300 1],[292.63 80 2],[295.9572 615 1],[298.2 185 2],[300.3819 300 1],[310.88 150 3],[311.6516 300 1],[384.26 340 1],[392.26 325 2],[403.72 185 2],[419.0082 715 1],[419.74 615 1],[424.2982 615 1],[431.5657 500 1],[432.3867 500 1],[433.664 500 1],[435.2145 500 1],[435.2864 425 1],[437.117 375 1],[442.7106 615 1],[443.1562 615 1],[445.8469 715 1],[446.1075 340 1],[446.6348 715 1],[447.446 500 1],[449.423 800 1],[450.7659 850 1],[453.974 615 1],[454.3483 715 1],[460.2427 615 1],[462.9787 340 1],[470.7586 340 1],[473.067 340 1],[488.8557 340 1],[506.898 100 0],[510.558 340 1],[510.755 500 1],[512.134 100 0],[514.163 100 0],[523.138 425 1],[533.123 500 1],[540.813 100 0],[545.132 135 0],[549.7727 340 1],[555.809 425 1],[565.132 425 1],[611.007 425 1],[617.027 500 1],[651.174 300 1],[709.227 300 1],[710.272 300 1],[799.053 340 1],[817.451 300 1],[842.891 100 0],[856.471 100 0],[865.414 100 0],[882.173 135 0],[886.966 100 0],[926.728 135 0],[930.061 200 0],[959.795 230 0],[962.67 290 0],[983.376 230 0],[988.605 100 0],[990.055 140 0],[991.571 170 0],[992.305 290 0],[1001.063 100 0],[1002.404 290 0],[1045.309 100 0],[1057.502 100 0],[1061.407 170 0]}{ALLx1000x1000x1000x510x250x250x0}{UVx1000x1000x1000x510x250x250x0}{VISx850x135x850x325x0x0x0}{IVx340x290x340x0x0x0x0}% \pgfspectra@elt@search{#1}{Se}{[59.6 285 4],[60.1 285 4],[60.87 220 4],[61.3 360 4],[61.43 285 4],[63.6 285 3],[65.27 360 3],[65.42 285 3],[67.01 450 3],[67.19 285 3],[70.92 220 2],[70.94 220 2],[72.06 220 2],[72.28 220 3],[72.43 360 2],[72.64 285 2],[73.46 285 3],[73.72 220 2],[74.19 220 2],[74.64 450 3],[75.9 285 3],[75.91 450 4],[77.65 285 3],[77.73 285 2],[78.58 285 4],[79.08 220 2],[80.38 285 3],[80.43 285 4],[80.87 360 4],[81.48 220 4],[82.07 220 4],[82.85 285 1],[83.03 360 4],[83.27 360 1],[83.95 450 4],[84.3 360 2],[84.58 360 4],[87.92 220 2],[90.66 285 1],[91.29 360 1],[95.37 285 2],[95.44 220 2],[95.47 220 2],[95.96 360 3],[97.41 160 2],[97.48 360 2],[99.67 450 3],[101.34 360 1],[101.4 360 1],[103.36 450 1],[104.96 450 1],[105.74 360 1],[107.98 285 2],[109.47 360 4],[109.78 285 1],[109.91 360 2],[111.92 450 2],[114.19 360 1],[115.1 220 4],[115.6 220 1],[115.69 285 1],[116.85 285 1],[119.23 450 1],[120.57 220 1],[122.76 450 4],[123.49 220 1],[129.1 285 1],[130.72 220 3],[130.89 285 1],[131.44 285 3],[140.54 100 0],[140.64 100 0],[140.66 100 0],[143.53 120 0],[143.58 120 0],[144.48 100 0],[144.68 100 0],[144.7 100 0],[144.92 150 0],[145.63 120 0],[150.09 150 0],[153.04 250 0],[153.13 150 0],[153.18 200 0],[154.71 120 0],[156.03 120 0],[157.53 150 0],[157.76 150 0],[157.79 150 0],[157.95 150 0],[158 200 0],[158.75 150 0],[159.32 150 0],[160.65 250 0],[161.07 100 0],[161.13 100 0],[161.74 200 0],[162.12 150 0],[162.27 100 0],[162.62 120 0],[164.34 150 0],[167.12 250 0],[167.53 250 0],[169.07 250 0],[179.33 250 0],[179.53 300 0],[185.52 300 0],[185.88 250 0],[189.86 400 0],[191.38 350 0],[191.92 300 0],[196.09 500 0],[199.51 150 0],[203.98 500 0],[205.75 285 2],[207.48 500 0],[209 220 3],[213.66 285 3],[216.42 500 0],[216.52 160 3],[216.66 160 3],[233.28 150 0],[241.35 600 0],[254.8 300 0],[266.55 360 3],[272.43 285 3],[276.72 285 2],[277.38 220 2],[295.16 160 3],[303.87 220 1],[304.13 220 1],[337.98 285 2],[338.72 450 2],[341.39 450 2],[342.84 285 2],[345.78 450 2],[354.36 360 2],[357.02 285 2],[363.76 450 2],[371.17 360 2],[373.87 450 2],[374.3 285 2],[380.09 450 2],[404.67 360 2],[407.02 285 1],[408.32 220 2],[416.91 450 2],[417.53 360 1],[418.09 450 1],[432.87 120 0],[433.03 100 0],[438.29 285 1],[444.6 285 1],[444.92 220 1],[446.76 285 1],[463.79 220 2],[473.08 500 0],[473.9 400 0],[474.22 300 0],[484.06 285 1],[484.5 360 1],[522.75 450 1],[530.54 360 1],[536.55 100 0],[536.99 120 0],[537.41 110 0],[552.24 285 1],[556.69 285 1],[586.63 285 1],[605.6 450 1],[630.38 285 2],[632.56 200 0],[644.42 360 1],[649.05 285 1],[653.5 285 1],[683.13 150 0],[699.069 120 0],[699.1792 100 0],[701.0809 200 0],[701.3875 150 0],[706.2065 300 0],[757.51 200 0],[758.34 250 0],[759.22 150 0],[760.68 120 0],[800.1 300 0],[803.64 200 0],[806.09 120 0],[806.53 120 0],[808.11 120 0],[809.32 150 0],[809.47 150 0],[814.93 180 0],[815.2 150 0],[815.77 200 0],[816.31 180 0],[818.29 150 0],[818.5 100 0],[819.46 120 0],[844.047 150 0],[845.038 150 0],[874.233 150 0],[891.886 300 0],[896.969 100 0],[900.197 200 0],[903.861 200 0],[908.314 80 0],[908.879 120 0],[914.083 80 0],[918.188 60 0],[927.112 60 0],[943.25 100 0],[982.558 60 0],[1021.725 200 0],[1030.745 377 0],[1032.726 900 0],[1038.636 640 0],[1065.03 124 0],[1193.456 125 0],[1194.687 275 0],[1194.792 100 0],[1195.227 105 0],[1195.264 170 0],[1196.604 100 0],[1197.293 205 0],[1197.307 115 0],[1481.793 315 0],[1491.747 410 0],[1515.144 500 0],[1546.906 115 0],[1547.1 320 0],[1552.097 265 0],[1561.84 395 0],[1562.038 115 0],[1665.9439 360 0],[1681.3779 505 0],[1681.776 165 0],[1686.6539 205 0],[1697.2711 115 0],[2137.424 235 0],[2144.2561 680 0],[2147.348 415 0],[2171.6359 270 0],[2173.06 240 0],[2313.366 105 0],[2338.885 150 0],[2362.817 110 0],[2414.818 265 0],[2415.923 170 0],[2420.4439 185 0],[2438.599 375 0],[2441.367 160 0],[2447.117 225 0],[2501.751 255 0],[2512.743 510 0]}{ALLx900x900x450x450x450x450x0}{UVx600x600x450x450x450x450x0}{VISx500x500x450x450x0x0x0}{IVx900x900x0x0x0x0x0}% \pgfspectra@elt@search{#1}{Br}{[37.973 70 3],[40.037 70 3],[46.837 60 4],[48.211 80 4],[53.197 90 4],[54.543 100 3],[54.79 100 4],[54.977 70 4],[55.976 100 3],[56.919 100 3],[57.659 100 3],[58.51 100 3],[58.671 100 3],[59.751 100 3],[60.009 100 3],[60.127 100 3],[60.703 100 3],[61.11 45 2],[61.785 100 3],[61.987 100 3],[62.04 30 2],[62.103 80 4],[63.014 100 3],[63.222 80 4],[64.223 100 3],[64.544 70 4],[65.264 40 4],[65.754 80 4],[66.153 100 3],[66.554 50 2],[67.719 50 2],[67.78 30 2],[67.962 80 4],[68.351 100 3],[68.768 45 2],[69.02 40 2],[69.699 35 2],[69.772 100 3],[71.168 30 1],[71.539 100 3],[72.7 30 2],[73.1 100 3],[73.64 30 2],[76.963 25 2],[80.012 100 3],[81.295 70 4],[81.366 100 3],[81.548 25 1],[81.779 25 2],[85.081 100 4],[85.527 15 4],[85.619 35 1],[88.923 100 1],[89.664 50 1],[90.599 50 1],[92.256 30 1],[94.897 100 1],[94.9 35 2],[96.04 40 2],[98.49 45 2],[98.493 50 1],[101.21 50 1],[101.554 100 1],[103.702 50 1],[104.16 60 4],[104.9 100 1],[106.476 45 1],[106.915 100 4],[107.187 50 1],[108.054 50 4],[110.15 25 0],[111.213 90 4],[113.459 30 0],[113.629 25 0],[114.356 100 4],[117.723 25 0],[117.89 40 0],[118.928 100 0],[118.938 25 0],[118.95 100 0],[119.837 50 0],[120.976 80 0],[121.073 100 0],[121.601 75 0],[122.113 100 0],[122.187 90 0],[122.324 100 0],[122.441 120 0],[122.69 120 0],[122.805 75 0],[123.243 750 0],[124.39 120 0],[124.959 80 0],[125.166 150 0],[125.58 100 0],[125.92 150 0],[126.166 120 0],[126.62 120 0],[127.482 90 3],[127.948 100 0],[128.626 100 0],[130.991 300 0],[131.35 25 2],[131.674 300 0],[131.737 100 0],[131.77 200 0],[138.46 1200 0],[140.29 25 2],[142.975 15 4],[144.26 40 4],[144.99 300 0],[147.035 15 4],[148.845 5000 0],[153.174 3000 0],[154.065 2500 0],[157.484 3000 0],[157.639 2000 0],[158.231 2500 0],[163.34 7500 0],[170.351 100 3],[213.379 100 3],[214.502 100 3],[225.721 100 3],[227.273 100 3],[228.517 35 1],[228.76 35 1],[229.344 40 2],[230.74 100 3],[231.329 30 2],[231.73 50 1],[233.693 40 1],[238.645 35 1],[238.67 50 1],[238.869 30 1],[238.896 45 1],[238.969 50 1],[239.221 35 1],[239.242 40 1],[240.816 100 3],[241.158 100 3],[246.239 30 2],[248.26 30 2],[248.85 30 1],[249.114 70 3],[249.522 30 1],[249.925 35 2],[252.17 45 1],[252.949 35 2],[254.148 40 1],[255.109 35 2],[255.692 40 1],[257.083 35 2],[257.317 30 2],[258.119 100 3],[258.499 40 2],[258.914 50 2],[259.448 30 2],[259.598 40 2],[260.62 45 2],[260.815 35 2],[261.313 50 2],[261.626 35 2],[262.652 50 2],[262.923 35 2],[263.96 35 2],[266.14 60 3],[267.153 35 2],[269.017 35 1],[271.377 40 1],[273.583 35 2],[274.652 35 1],[277.05 30 2],[278.528 30 2],[280.416 30 2],[280.755 30 1],[282.087 70 3],[284.288 100 3],[289.34 40 1],[290.771 110 3],[291.718 40 1],[292.696 40 2],[293.622 30 2],[296.721 40 1],[296.9 35 2],[297.226 50 1],[298.186 30 1],[298.587 30 1],[298.653 30 1],[299.404 40 2],[301.648 30 1],[302.076 50 2],[303.363 30 2],[303.645 35 2],[304.118 50 3],[307.442 50 2],[309.194 35 2],[311.729 35 2],[314.781 30 2],[317.408 40 2],[332.108 30 2],[333.307 45 2],[334.964 50 2],[338.056 50 3],[338.525 30 2],[342.382 35 1],[344.736 45 2],[348.758 40 2],[350.647 30 2],[351.736 45 2],[354.016 50 2],[355.108 30 2],[356.243 50 2],[360.071 45 2],[360.68 30 1],[369.353 25 2],[371.43 35 1],[381.565 120 0],[382.026 45 2],[383.469 35 1],[387.121 30 1],[389.163 40 1],[390.124 30 1],[390.395 20 2],[391.42 30 1],[391.438 50 1],[391.951 35 1],[392.409 40 1],[392.955 30 1],[393.969 35 1],[395.061 35 1],[398.038 50 1],[399.236 150 0],[402.404 30 1],[413.566 30 1],[414.02 30 1],[417.963 40 1],[419.345 30 1],[422.389 100 1],[423.689 30 1],[429.139 30 1],[436.514 200 0],[436.56 100 1],[442.514 150 0],[444.174 1000 0],[447.261 1000 0],[447.772 2000 0],[449.042 100 0],[450.655 35 2],[451.344 300 0],[451.974 20 2],[452.559 1500 0],[452.96 30 1],[454.292 50 1],[457.574 300 0],[460.136 30 1],[461.458 250 0],[462.27 35 1],[464.202 30 1],[465.198 30 1],[467.87 50 1],[469.317 40 1],[470.485 50 1],[471.976 35 1],[472.036 40 1],[472.82 30 1],[473.541 30 1],[474.264 40 1],[475.228 250 0],[476.6 35 1],[477.94 40 1],[478.031 400 0],[478.519 160 0],[478.55 50 1],[480.233 30 1],[481.67 50 1],[481.846 30 1],[484.481 35 1],[484.875 35 1],[492.112 40 1],[492.879 40 1],[493.066 45 1],[494.551 30 1],[497.976 400 0],[503.874 30 1],[505.464 30 1],[516.438 40 1],[517.587 15 2],[518.001 30 1],[518.235 50 1],[519.39 30 1],[523.823 50 1],[527.268 30 1],[530.41 35 1],[533.057 40 1],[533.205 50 1],[539.548 120 0],[542.278 40 1],[542.499 35 1],[543.507 30 1],[544.68 10 2],[546.622 120 0],[547.847 35 1],[548.879 30 1],[549.506 30 1],[550.669 50 1],[558.994 35 1],[571.871 30 1],[583.078 30 1],[585.208 180 0],[594.048 160 0],[612.214 240 0],[614.86 4000 0],[616.174 30 1],[617.739 200 0],[633.548 150 0],[635.073 6000 0],[635.294 40 1],[641.032 250 0],[648.356 180 0],[651.462 100 0],[654.457 2000 0],[654.809 150 0],[655.98 5000 0],[657.131 100 0],[657.914 180 0],[658.217 2000 0],[662.047 150 0],[663.162 5000 0],[668.228 2000 0],[669.213 1000 0],[672.828 800 0],[676.006 200 0],[677.948 200 0],[678.674 220 0],[679.004 650 0],[679.148 160 0],[686.115 180 0],[700.519 1000 0],[719.28 10 2],[726.045 200 0],[734.851 1000 0],[751.296 4000 0],[759.161 160 0],[759.507 180 0],[761.641 200 0],[767.31 10 2],[780.302 3000 0],[782.723 120 0],[788.145 250 0],[788.157 250 0],[792.581 250 0],[793.868 3000 0],[794.794 300 0],[795.018 300 0],[797.844 800 0],[797.857 1000 0],[798.994 3000 0],[802.635 200 0],[802.654 250 0],[813.152 3000 0],[815.265 100 0],[815.375 1000 0],[815.4 2500 0],[824.686 500 0],[826.496 1500 0],[827.244 7500 0],[833.47 2000 0],[834.37 1000 0],[838.404 120 0],[844.655 4000 0],[847.745 400 0],[851.338 150 0],[855.773 100 0],[856.628 100 0],[863.866 2000 0],[869.853 400 0],[879.347 1000 0],[881.996 1500 0],[882.522 2500 0],[888.898 400 0],[889.762 3000 0],[893.24 600 0],[894.939 180 0],[896.4 900 0],[902.442 35 1],[916.606 3000 0],[917.363 1500 0],[917.816 2000 0],[926.542 4000 0],[932.086 1500 0],[943.404 30 1],[979.348 600 0],[989.64 1000 0],[1014.008 300 0],[1023.774 600 0],[1029.962 100 0],[1037.765 150 0],[1045.796 3000 0],[1074.214 100 0],[1075.592 300 0],[1321.717 170 0],[1435.457 180 0],[1488.87 125 0],[1673.1189 180 0],[1856.8311 120 0],[1973.3619 350 0],[2028.173 100 0],[2062.467 100 0],[2178.724 120 0],[2286.565 400 0],[2351.315 100 0],[2834.65 50 0],[3038.085 50 0],[3163.0131 60 0],[3269.39 12 0],[3418.1871 15 0],[3834.575 15 0],[3996.4359 12 0]}{ALLx7500x7500x100x50x110x100x0}{UVx7500x7500x100x50x110x100x0}{VISx6000x6000x100x45x0x0x0}{IVx7500x7500x35x0x0x0x0}% -\pgfspectra@elt@search{#1}{Kr}{[46.735 30 2],[47.216 150 4],[48.439 100 4],[49.625 250 4],[50.077 120 4],[50.72 200 4],[54.086 30 2],[54.804 60 4],[56.564 30 2],[56.916 30 2],[57.198 30 2],[57.983 30 2],[58.514 30 2],[58.596 30 2],[59.37 30 2],[59.41 30 2],[59.641 30 2],[60.017 40 2],[60.367 30 2],[60.586 50 2],[60.647 35 2],[61.112 50 2],[61.672 35 2],[62.145 40 2],[62.28 45 2],[62.502 50 2],[62.576 30 2],[62.859 45 2],[63.004 50 2],[63.309 35 2],[63.787 120 4],[63.998 50 2],[64.641 60 2],[65.12 50 2],[65.972 50 2],[66.486 30 2],[67.234 40 2],[67.285 35 2],[67.657 35 2],[68.013 35 2],[68.368 35 2],[68.625 45 2],[68.798 45 2],[69.193 45 2],[69.561 50 2],[69.805 30 2],[70.836 50 2],[70.885 600 4],[71.4 50 2],[72.204 100 2],[72.94 60 1],[74.67 30 2],[76.118 200 1],[76.398 100 1],[76.62 60 1],[77.103 200 1],[77.369 60 1],[78.21 200 1],[78.372 100 1],[78.597 60 2],[80.576 7 3],[81.682 18 3],[81.815 60 1],[83.038 60 1],[83.766 50 2],[84.204 22 3],[84.406 100 1],[85.473 50 2],[86.258 60 2],[86.482 60 1],[86.887 60 1],[87.084 40 2],[87.608 50 2],[88.414 200 1],[88.63 1000 1],[89.101 400 1],[89.781 75 2],[91.139 200 1],[91.743 2000 1],[94.544 50 0],[94.654 50 0],[95.106 20 0],[95.34 50 0],[96.337 50 0],[96.497 2000 1],[98.729 50 2],[100.106 100 0],[100.355 100 0],[103.002 100 0],[115.874 30 2],[116.487 200 0],[123.584 650 0],[163.882 6 2],[191.409 6 2],[223.734 3 3],[229.126 6 3],[232.93 3 3],[233.675 4 3],[234.827 4 3],[235.85 3 3],[238.805 3 3],[239.394 40 2],[241.69 4 3],[242.804 3 3],[244.268 5 3],[245.17 4 3],[245.974 6 3],[246.477 100 1],[247.406 5 3],[249.248 60 1],[249.401 40 2],[251.7 4 3],[251.802 5 3],[251.938 6 3],[252.45 5 3],[254.6 5 3],[254.7 6 3],[255.808 4 3],[256.325 30 2],[258.69 3 3],[260.617 5 3],[260.95 10 3],[261.53 8 3],[262.111 7 3],[263.976 60 2],[268.032 30 2],[268.119 40 2],[271.24 80 1],[273.055 3 3],[274.818 8 3],[277.47 6 3],[282.96 3 3],[283.3 100 1],[283.608 3 3],[284.1 30 2],[285.116 30 2],[285.3 5 3],[285.93 3 3],[287.061 50 2],[289.218 100 2],[290.917 30 2],[295.256 50 2],[299.222 60 2],[302.23 50 2],[302.445 80 2],[304.693 50 2],[305.672 30 2],[306.313 60 2],[309.716 40 2],[311.225 60 2],[312.061 30 2],[312.439 100 2],[314.135 60 2],[314.201 3 3],[318.911 100 2],[319.121 80 2],[322.499 6 3],[323.952 40 2],[324.044 40 2],[324.569 300 2],[326.17 3 3],[326.481 150 2],[326.848 100 2],[327.165 30 2],[328.589 30 2],[330.475 30 2],[331.147 50 2],[332.575 200 2],[333.076 60 2],[334.248 50 2],[335.193 100 2],[337.496 40 2],[343.946 100 2],[347.465 70 2],[348.859 100 2],[350.742 200 2],[356.423 100 2],[360.788 100 1],[363.1889 200 1],[364.134 30 2],[365.3928 250 1],[366.5324 80 0],[366.901 150 1],[367.9559 100 0],[368.6182 80 1],[369.065 30 2],[371.802 300 1],[371.8595 200 1],[372.135 150 1],[374.1638 200 1],[374.48 150 1],[375.4245 80 1],[377.8089 500 1],[378.3095 500 1],[380.93 3 3],[386.058 5 3],[386.87 40 2],[387.544 150 1],[390.6177 150 1],[392.0081 200 1],[393.429 5 3],[399.484 100 1],[399.7793 100 1],[405.7037 300 1],[406.5128 300 1],[406.737 50 2],[408.8337 500 1],[409.8729 250 1],[410.9248 100 1],[413.133 40 2],[414.5122 250 1],[415.446 40 2],[425.058 150 1],[427.3969 1000 0],[428.2967 100 0],[429.2923 600 1],[430.049 200 1],[431.781 500 1],[431.8551 400 0],[431.9579 1000 0],[432.298 150 1],[435.1359 100 0],[435.5477 3000 1],[436.2641 500 0],[436.969 200 1],[437.6121 800 0],[438.654 300 1],[439.9965 200 0],[442.5189 100 0],[443.1685 500 1],[443.6812 600 1],[445.3917 600 0],[446.3689 800 0],[447.5014 800 1],[448.988 400 1],[450.2353 600 0],[452.314 400 1],[455.661 200 1],[457.7209 800 1],[458.2978 300 1],[459.28 150 1],[461.5292 500 1],[461.9166 1000 1],[463.3885 800 1],[465.8876 2000 1],[468.0406 500 1],[469.1301 100 1],[469.436 200 1],[473.9002 3000 1],[476.2435 300 1],[476.5744 1000 1],[481.176 300 1],[482.518 300 1],[483.2077 800 1],[484.6612 700 1],[485.72 150 1],[494.559 300 1],[501.645 20 2],[502.24 200 1],[508.652 250 1],[512.573 400 1],[520.832 500 1],[530.866 200 1],[533.341 500 1],[546.817 200 1],[550.143 10 2],[556.2224 500 0],[557.0288 2000 0],[558.0386 80 0],[564.9561 100 0],[568.189 400 1],[569.035 200 1],[583.2855 100 0],[587.0914 3000 0],[599.222 200 1],[599.3849 60 0],[603.717 10 2],[605.6125 60 0],[607.838 10 2],[631.022 10 2],[642.018 300 1],[642.1026 100 0],[645.6288 200 0],[657.007 150 1],[669.9228 60 0],[690.4678 100 0],[721.313 250 1],[722.4104 100 0],[728.7258 80 0],[728.978 400 1],[740.702 400 1],[742.5541 60 0],[743.578 200 1],[748.6862 100 0],[752.446 300 1],[758.7411 1000 0],[760.1544 2000 0],[764.116 150 1],[768.5244 1000 0],[769.4538 1200 0],[773.569 250 1],[774.6827 150 0],[785.4821 800 0],[791.3423 200 0],[792.8597 180 0],[793.322 200 1],[797.362 120 1],[798.2401 100 0],[805.9503 1500 0],[810.4364 4000 0],[811.2899 6000 0],[813.2967 60 0],[819.0054 3000 0],[820.272 200 1],[821.8365 80 0],[826.324 3000 0],[827.2353 100 0],[828.105 1500 0],[829.8107 5000 0],[841.243 100 0],[850.887 3000 0],[876.411 150 0],[877.6748 6000 0],[892.8692 2000 0],[923.848 500 1],[929.382 500 1],[932.099 200 1],[936.195 300 1],[936.2082 100 0],[940.282 200 1],[947.093 200 1],[957.752 500 1],[960.58 500 1],[961.961 400 1],[966.334 200 1],[971.16 200 1],[975.1758 2000 0],[980.314 500 1],[985.6314 500 0],[1022.146 1000 1],[1118.7108 100 0],[1125.7711 200 0],[1125.9126 150 0],[1145.7481 500 0],[1179.2425 150 0],[1181.9377 1500 0],[1199.7105 600 0],[1207.7224 160 0],[1286.1892 100 0],[1317.7412 1100 0],[1362.2415 1000 0],[1363.422 2400 0],[1365.8394 800 0],[1371.1036 200 0],[1373.8851 600 0],[1397.4027 150 0],[1404.5657 550 0],[1410.4298 140 0],[1440.222 180 0],[1442.6793 2000 0],[1451.784 100 0],[1473.4436 1600 0],[1476.2672 550 0],[1476.5472 450 0],[1496.1894 400 0],[1500.5307 120 0],[1520.9526 140 0],[1523.9615 1700 0],[1532.648 130 0],[1533.4958 1500 0],[1537.2037 700 0],[1547.4026 200 0],[1568.102 180 0],[1582.009 120 0],[1672.6514 200 0],[1678.5129 2000 0],[1685.3488 1000 0],[1689.0441 2400 0],[1689.6754 1600 0],[1693.5807 1800 0],[1709.8771 600 0],[1736.7605 700 0],[1740.4443 120 0],[1761.6854 150 0],[1784.2736 650 0],[1800.2229 700 0],[1816.7314 2600 0],[1839.9785 100 0],[1858.0896 150 0],[1869.6295 300 0],[1878.5461 170 0],[1879.7703 200 0],[2020.9879 140 0],[2042.3965 300 0],[2044.6971 140 0],[2116.5471 600 0],[2190.2514 1800 0],[2248.5775 120 0],[2334.0416 180 0],[2426.0506 120 0],[2429.2221 180 0],[2523.382 600 0],[2861.0551 180 0],[2865.5721 1000 0],[2876.9711 150 0],[2882.249 140 0],[2923.6689 300 0],[3066.3539 300 0],[3097.916 300 0],[3930.0602 500 0],[3948.652 1100 0],[3955.725 220 0],[3957.2602 100 0],[3958.8398 1400 0],[3958.9602 1100 0],[3995.4801 500 0],[3996.6602 300 0],[4030.6102 1300 0],[4068.516 250 0]}{ALLx6000x6000x3000x300x22x600x0}{UVx2000x650x2000x300x22x600x0}{VISx3000x3000x3000x50x5x0x0}{IVx6000x6000x1000x0x0x0x0}% +\pgfspectra@elt@search{#1}{Kr}{[46.735 30 2],[47.216 150 4],[48.439 100 4],[49.625 250 4],[50.077 120 4],[50.72 200 4],[54.086 30 2],[54.804 60 4],[56.564 30 2],[56.916 30 2],[57.198 30 2],[57.983 30 2],[58.514 30 2],[58.596 30 2],[59.37 30 2],[59.41 30 2],[59.641 30 2],[60.017 40 2],[60.367 30 2],[60.586 50 2],[60.647 35 2],[61.112 50 2],[61.672 35 2],[62.145 40 2],[62.28 45 2],[62.502 50 2],[62.576 30 2],[62.859 45 2],[63.004 50 2],[63.309 35 2],[63.787 120 4],[63.998 50 2],[64.641 60 2],[65.12 50 2],[65.972 50 2],[66.486 30 2],[67.234 40 2],[67.285 35 2],[67.657 35 2],[68.013 35 2],[68.368 35 2],[68.625 45 2],[68.798 45 2],[69.193 45 2],[69.561 50 2],[69.805 30 2],[70.836 50 2],[70.885 600 4],[71.4 50 2],[72.204 100 2],[72.94 60 1],[74.67 30 2],[76.118 200 1],[76.398 100 1],[76.62 60 1],[77.103 200 1],[77.369 60 1],[78.21 200 1],[78.372 100 1],[78.597 60 2],[80.576 7 3],[81.682 18 3],[81.815 60 1],[83.038 60 1],[83.766 50 2],[84.204 22 3],[84.406 100 1],[85.473 50 2],[86.258 60 2],[86.482 60 1],[86.887 60 1],[87.084 40 2],[87.608 50 2],[88.414 200 1],[88.63 1000 1],[89.101 400 1],[89.781 75 2],[91.139 200 1],[91.743 2000 1],[94.544 50 0],[94.654 50 0],[95.106 20 0],[95.34 50 0],[96.337 50 0],[96.497 2000 1],[98.729 50 2],[100.106 100 0],[100.355 100 0],[103.002 100 0],[115.874 30 2],[116.487 200 0],[123.584 650 0],[163.882 6 2],[191.409 6 2],[223.734 3 3],[229.126 6 3],[232.93 3 3],[233.675 4 3],[234.827 4 3],[235.85 3 3],[238.805 3 3],[239.394 40 2],[241.69 4 3],[242.804 3 3],[244.268 5 3],[245.17 4 3],[245.974 6 3],[246.477 100 1],[247.406 5 3],[249.248 60 1],[249.401 40 2],[251.7 4 3],[251.802 5 3],[251.938 6 3],[252.45 5 3],[254.6 5 3],[254.7 6 3],[255.808 4 3],[256.325 30 2],[258.69 3 3],[260.617 5 3],[260.95 10 3],[261.53 8 3],[262.111 7 3],[263.976 60 2],[268.032 30 2],[268.119 40 2],[271.24 80 1],[273.055 3 3],[274.818 8 3],[277.47 6 3],[282.96 3 3],[283.3 100 1],[283.608 3 3],[284.1 30 2],[285.116 30 2],[285.3 5 3],[285.93 3 3],[287.061 50 2],[289.218 100 2],[290.917 30 2],[295.256 50 2],[299.222 60 2],[302.23 50 2],[302.445 80 2],[304.693 50 2],[305.672 30 2],[306.313 60 2],[309.716 40 2],[311.225 60 2],[312.061 30 2],[312.439 100 2],[314.135 60 2],[314.201 3 3],[318.911 100 2],[319.121 80 2],[322.499 6 3],[323.952 40 2],[324.044 40 2],[324.569 300 2],[326.17 3 3],[326.481 150 2],[326.848 100 2],[327.165 30 2],[328.589 30 2],[330.475 30 2],[331.147 50 2],[332.575 200 2],[333.076 60 2],[334.248 50 2],[335.193 100 2],[337.496 40 2],[343.946 100 2],[347.465 70 2],[348.859 100 2],[350.742 200 2],[356.423 100 2],[360.788 100 1],[363.1889 200 1],[364.134 30 2],[365.3928 250 1],[366.5324 80 0],[366.901 150 1],[367.9559 100 0],[368.6182 80 1],[369.065 30 2],[371.802 300 1],[371.8595 200 1],[372.135 150 1],[374.1638 200 1],[374.48 150 1],[375.4245 80 1],[377.8089 500 1],[378.3095 500 1],[380.93 3 3],[386.058 5 3],[386.87 40 2],[387.544 150 1],[390.6177 150 1],[392.0081 200 1],[393.429 5 3],[399.484 100 1],[399.7793 100 1],[405.7037 300 1],[406.5128 300 1],[406.737 50 2],[408.8337 500 1],[409.8729 250 1],[410.9248 100 1],[413.133 40 2],[414.5122 250 1],[415.446 40 2],[425.058 150 1],[427.3969 1000 0],[428.2967 100 0],[429.2923 600 1],[430.049 200 1],[431.781 500 1],[431.8551 400 0],[431.9579 1000 0],[432.298 150 1],[435.1359 100 0],[435.5477 3000 1],[436.2641 500 0],[436.969 200 1],[437.6121 800 0],[438.654 300 1],[439.9965 200 0],[442.5189 100 0],[443.1685 500 1],[443.6812 600 1],[445.3917 600 0],[446.3689 800 0],[447.5014 800 1],[448.988 400 1],[450.2353 600 0],[452.314 400 1],[455.661 200 1],[457.7209 800 1],[458.2978 300 1],[459.28 150 1],[461.5292 500 1],[461.9166 1000 1],[463.3885 800 1],[465.8876 2000 1],[468.0406 500 1],[469.1301 100 1],[469.436 200 1],[473.9002 3000 1],[476.2435 300 1],[476.5744 1000 1],[481.176 300 1],[482.518 300 1],[483.2077 800 1],[484.6612 700 1],[485.72 150 1],[494.559 300 1],[501.645 20 2],[502.24 200 1],[508.652 250 1],[512.573 400 1],[520.832 500 1],[530.866 200 1],[533.341 500 1],[546.817 200 1],[550.143 10 2],[556.2224 500 0],[557.0288 2000 0],[558.0386 80 0],[564.9561 100 0],[568.189 400 1],[569.035 200 1],[583.2855 100 0],[587.0914 3000 0],[599.222 200 1],[599.3849 60 0],[603.717 10 2],[605.6125 60 0],[607.838 10 2],[631.022 10 2],[642.018 300 1],[642.1026 100 0],[645.6288 200 0],[657.007 150 1],[669.9228 60 0],[690.4678 100 0],[721.313 250 1],[722.4104 100 0],[728.7258 80 0],[728.978 400 1],[740.702 400 1],[742.5541 60 0],[743.578 200 1],[748.6862 100 0],[752.446 300 1],[758.7411 1000 0],[760.1544 2000 0],[764.116 150 1],[768.5244 1000 0],[769.4538 1200 0],[773.569 250 1],[774.6827 150 0],[785.4821 800 0],[791.3423 200 0],[792.8597 180 0],[793.322 200 1],[797.362 120 1],[798.2401 100 0],[805.9503 1500 0],[810.4364 4000 0],[811.2899 6000 0],[813.2967 60 0],[819.0054 3000 0],[820.272 200 1],[821.8365 80 0],[826.324 3000 0],[827.2353 100 0],[828.105 1500 0],[829.8107 5000 0],[841.243 100 0],[850.887 3000 0],[876.411 150 0],[877.6748 6000 0],[892.8692 2000 0],[923.848 500 1],[929.382 500 1],[932.099 200 1],[936.195 300 1],[936.2082 100 0],[940.282 200 1],[947.093 200 1],[957.752 500 1],[960.58 500 1],[961.961 400 1],[966.334 200 1],[971.16 200 1],[975.1758 2000 0],[980.314 500 1],[985.6314 500 0],[1022.146 1000 1],[1118.7108 100 0],[1125.7711 200 0],[1125.9126 150 0],[1145.7481 500 0],[1179.2425 150 0],[1181.9377 1500 0],[1199.7105 600 0],[1207.7224 160 0],[1286.1892 100 0],[1317.7412 1100 0],[1362.2415 1000 0],[1363.422 2400 0],[1365.8394 800 0],[1371.1036 200 0],[1373.8851 600 0],[1397.4027 150 0],[1404.5657 550 0],[1410.4298 140 0],[1440.222 180 0],[1442.6793 2000 0],[1451.784 100 0],[1473.4436 1600 0],[1476.2672 550 0],[1476.5472 450 0],[1496.1894 400 0],[1500.5307 120 0],[1520.9526 140 0],[1523.9615 1700 0],[1532.648 130 0],[1533.4958 1500 0],[1537.2037 700 0],[1547.4026 200 0],[1568.102 180 0],[1582.009 120 0],[1672.6514 200 0],[1678.5129 2000 0],[1685.3488 1000 0],[1689.0441 2400 0],[1689.6754 1600 0],[1693.5807 1800 0],[1709.8771 600 0],[1736.7605 700 0],[1740.4443 120 0],[1761.6854 150 0],[1784.2736 650 0],[1800.2229 700 0],[1816.7314 2600 0],[1839.9785 100 0],[1858.0896 150 0],[1869.6295 300 0],[1878.5461 170 0],[1879.7703 200 0],[2020.9879 140 0],[2042.3965 300 0],[2044.6971 140 0],[2116.5471 600 0],[2190.2514 1800 0],[2248.5775 120 0],[2334.0416 180 0],[2426.0506 120 0],[2429.2221 180 0],[2523.382 600 0],[2861.0551 180 0],[2865.5721 1000 0],[2876.9711 150 0],[2882.249 140 0],[2923.6689 300 0],[3066.3539 300 0],[3097.916 300 0],[3930.0602 500 0],[3948.652 1100 0],[3955.725 220 0],[3957.2602 100 0],[3958.8398 1400 0],[3958.9602 1100 0],[3995.4801 500 0],[3996.6602 300 0]}{ALLx6000x6000x3000x300x22x600x0}{UVx2000x650x2000x300x22x600x0}{VISx3000x3000x3000x50x5x0x0}{IVx6000x6000x1000x0x0x0x0}%,[4030.6102 1300 0],[4068.516 250 0] \pgfspectra@elt@search{#1}{Rb}{[46.585 3 2],[47.488 1 1],[48.1118 4 1],[48.243 3.5 2],[48.247 3 2],[48.283 50 2],[48.484 30 2],[48.966 50 2],[48.996 10 2],[49.348 60 2],[49.743 9 1],[49.782 5 2],[50.028 10 2],[50.833 3 2],[50.8434 2 1],[51.3266 15 1],[51.679 40 2],[53.0173 30 1],[53.364 80 2],[53.3801 7.5 1],[53.586 120 2],[54.2887 4 1],[55.5036 20 1],[55.619 120 2],[55.836 50 2],[56.477 70 2],[56.671 150 2],[57.282 100 2],[57.665 150 2],[57.963 250 2],[58.126 150 2],[58.234 50 2],[58.677 80 2],[58.9419 250 1],[59.142 10 2],[59.365 90 2],[59.494 100 2],[59.518 1 3],[59.588 130 2],[59.849 120 2],[60.209 45 2],[60.551 5 2],[60.728 50 2],[61.331 40 2],[61.967 50 2],[62.083 2 2],[62.224 10 2],[63.006 25 2],[64.3878 150 1],[64.567 50 2],[66.376 2.5 3],[67.481 2 2],[69.7049 300 1],[71.1187 600 1],[71.624 2.5 3],[73.341 2 3],[74.085 5 3],[74.1456 1000 1],[74.986 2 3],[75.375 2 3],[76.904 500 2],[77.154 1 3],[77.689 2.5 3],[81.528 250 2],[81.792 0.9 3],[85.018 1.5 3],[98.8 1 3],[160.412 100 1],[164.496 20 1],[170.752 20 1],[171.685 60 1],[176.05 500 1],[180.347 20 1],[180.968 50 1],[186.533 50 1],[188.942 50 1],[195.424 50 1],[195.654 30 1],[197.142 20 1],[198.319 50 1],[204.223 30 1],[205.221 30 1],[205.28 50 1],[206.892 200 1],[207.15 100 1],[207.595 1000 1],[209.029 100 1],[210.806 20 1],[211.65 30 1],[212.525 100 1],[212.982 40 1],[214.31 20 1],[214.383 3000 1],[215.321 10 2],[216.459 25 2],[219.036 20 1],[219.799 60 1],[219.826 60 1],[220.786 30 1],[221.708 1000 1],[222.379 20 1],[223.772 40 1],[225.065 50 1],[225.143 20 1],[225.419 80 1],[225.455 20 1],[226.354 20 1],[226.394 50 1],[226.8 10 2],[228.682 50 1],[229.171 500 1],[229.88 30 1],[230.012 15 2],[230.414 50 2],[230.445 15 2],[231.246 25 2],[233.301 25 1],[233.339 200 1],[233.707 20 2],[234.19 10 2],[234.537 20 2],[234.981 10 2],[235.311 35 1],[235.396 30 1],[235.697 40 1],[235.804 30 1],[236.427 30 1],[236.432 20 1],[236.515 20 1],[236.751 30 1],[237.321 20 1],[238.044 15 2],[238.129 10 2],[238.534 200 1],[240.594 25 1],[241.846 15 2],[243.417 40 1],[245.914 80 1],[247.22 5000 1],[248.456 30 1],[248.47 70 1],[249.638 200 1],[250.267 20 1],[251.418 25 1],[252.424 100 1],[256.186 30 2],[257.371 10 2],[257.707 10 2],[258.683 20 2],[259.456 20 1],[262.376 40 1],[263.175 100 2],[263.683 35 2],[264.558 40 1],[265.668 10 2],[268.41 100 1],[271.176 100 1],[271.386 10 2],[274.101 25 1],[279.886 50 2],[280.027 15 2],[280.758 50 2],[281.215 50 1],[283.851 35 1],[284.544 10 2],[286.977 15 2],[287.388 75 1],[290.369 50 2],[294.962 15 2],[295.101 10 2],[295.607 200 2],[296.745 50 2],[296.813 15 2],[297.074 50 2],[298.74 25 2],[302.361 35 2],[303.962 20 2],[304.148 20 2],[305.136 100 1],[307.07 25 2],[308.202 0.2 0],[308.684 50 2],[308.858 25 1],[309.849 10 2],[311.136 50 2],[311.257 1 0],[311.306 0.3 0],[311.482 25 2],[311.892 12 2],[314.89 500 1],[315.754 2.5 0],[315.826 0.5 0],[316.1 120 1],[316.934 10 2],[322.26 20 2],[322.798 5 0],[322.916 0.6 0],[327.099 200 1],[328.641 50 2],[332.149 150 1],[333.016 10 2],[334.055 120 1],[334.692 20 2],[334.872 6 0],[335.082 7.5 0],[335.389 75 1],[339.303 120 1],[341.558 75 1],[343.418 100 1],[343.926 25 2],[346.15 150 1],[349.268 10 2],[352.139 300 1],[353.155 300 1],[354.115 100 1],[358.705 10 0],[359.157 4 0],[360.06 500 1],[360.064 1000 1],[363.98 60 1],[364.626 40 1],[364.756 35 1],[366.274 100 1],[366.381 90 1],[366.672 35 1],[367.566 30 1],[369.958 250 1],[374.633 35 1],[379.681 350 1],[380.19 250 1],[382.666 100 1],[386.074 45 1],[390.729 25 1],[392.22 50 1],[392.644 250 1],[394.051 2500 1],[397.815 100 1],[402.949 170 1],[408.388 250 1],[410.428 200 1],[413.611 170 1],[419.308 350 1],[420.18 100 0],[421.553 50 0],[424.44 9000 1],[426.658 50 1],[427.025 25 1],[427.314 1500 1],[428.797 250 1],[429.397 150 1],[430.626 50 1],[434.696 100 1],[437.712 250 1],[444.01 30 1],[446.947 100 1],[449.392 40 1],[451.904 70 1],[453.034 300 1],[453.379 50 1],[454.074 40 1],[457.177 2000 1],[462.242 300 1],[463.189 35 1],[464.857 1000 1],[465.928 50 1],[473.045 100 1],[475.53 100 1],[475.782 40 1],[477.595 3000 1],[478.283 500 1],[485.534 30 1],[488.559 150 1],[508.7987 0.2 0],[513.2471 0.2 0],[515.0134 1 0],[515.208 1000 1],[516.458 30 1],[516.5023 0.1 0],[516.5142 0.2 0],[516.965 0.1 0],[519.5278 1.5 0],[523.3968 0.2 0],[526.0034 2 0],[526.0228 0.1 0],[527.051 20 1],[532.238 0.3 0],[536.2601 4 0],[539.0568 0.4 0],[543.1532 7.5 0],[543.183 0.3 0],[551.255 50 1],[552.278 500 1],[557.8788 0.6 0],[563.599 500 1],[564.7774 4 0],[565.375 2 0],[569.915 300 1],[572.4121 6 0],[572.4614 0.3 0],[573.964 20 1],[607.0755 7.5 0],[613.527 20 1],[615.9626 3 0],[619.908 100 1],[620.6309 7.5 0],[626.94 30 1],[629.8325 12 0],[629.9224 0.5 0],[645.833 1000 1],[655.562 100 1],[656.081 500 1],[677.507 300 1],[727.9997 10 0],[731.652 30 1],[740.8173 15 0],[761.8933 20 0],[775.7651 30 0],[775.9436 6 0],[780.027 9000 0],[792.526 0.5 0],[792.554 0.4 0],[794.76 4500 0],[827.141 4 0],[827.171 3 0],[860.396 200 1],[886.8512 4 0],[886.8852 3 0],[897.888 30 1],[902.177 30 1],[922.464 0.3 0],[923.425 0.2 0],[924.641 50 1],[933.887 30 1],[937.35 20 1],[939.136 30 1],[947.932 100 1],[949.372 70 1],[952.265 3 0],[952.305 0.5 0],[954.018 2 0],[961.299 30 1],[967.154 30 1],[968.905 200 1],[977.606 20 1],[993.476 20 1],[1007.5282 3.5 0],[1007.5708 3 0],[1323.517 10 0],[1344.281 2 0],[1344.357 3 0],[1366.501 7.5 0],[1475.241 100 0],[1528.843 80 0],[1528.948 15 0],[2252.965 2 0],[2293.2471 1 0],[2731.4311 0.4 0],[2790.5369 0.2 0]}{ALLx9000x9000x9000x500x5x0x0}{UVx5000x10x5000x500x5x0x0}{VISx9000x100x9000x0x0x0x0}{IVx9000x9000x200x0x0x0x0}% \pgfspectra@elt@search{#1}{Sr}{[28.431 2.4 3],[29.109 2.4 3],[29.119 2.4 3],[29.322 2.4 3],[29.812 3 3],[30.012 3 3],[30.027 2.4 3],[30.167 2.4 3],[30.718 5 2],[31.611 10 2],[32.161 10 2],[33.067 25 2],[35.162 100 2],[35.88 15 2],[36.349 50 2],[37.121 30 2],[37.853 4 3],[39.244 15 3],[39.3 10 3],[39.49 9 3],[39.622 10 3],[39.992 8 3],[40.385 7 3],[40.694 7 3],[41.293 6 3],[41.307 8 3],[41.532 8 3],[41.978 6 3],[43.021 5 3],[43.065 6 3],[43.724 200 2],[44.273 5 3],[47.176 5 3],[48.42 5 3],[49.179 375 2],[50.704 250 2],[50.814 5 3],[51.438 750 2],[51.728 2 4],[53.419 5 3],[54.051 1.2 4],[56.275 500 2],[57.801 5 4],[62.493 6 4],[64.223 5 4],[64.921 10 4],[65.915 4 4],[66.094 5 4],[66.443 40 3],[66.993 1.8 4],[68.623 7 4],[71.035 20 3],[71.579 1.2 4],[74.782 2.4 4],[86.232 1.8 4],[96.837 4 2],[97.578 4 2],[99.298 5 2],[102.523 10 2],[104.491 7 2],[105.774 4 2],[106.02 5 2],[109.877 4 2],[112.549 7 2],[114.024 4 2],[116.827 4 2],[118.209 4 2],[118.921 4 3],[123.623 10 2],[124.414 6 3],[124.475 4 3],[124.487 4 3],[125.778 4 3],[126.862 4 3],[133.113 4 3],[134.79 6 3],[136.115 4 3],[140.867 5 3],[159.274 4 3],[167.703 5 3],[170.516 4 3],[172.423 4 3],[172.953 5 3],[173.212 4 3],[177.725 4 3],[194.058 4 2],[195.844 6 2],[196.692 6 2],[199.461 4 3],[206.863 5 2],[209.959 10 2],[210.438 4 3],[211.431 5 2],[211.79 4 3],[211.848 6 2],[211.952 10 2],[213.312 10 2],[214.28 6 2],[214.574 4 2],[215.284 280 1],[216.596 280 1],[217.891 6 2],[218.014 6 2],[219.088 10 2],[220.386 10 2],[221.799 4 3],[221.95 10 2],[222.005 10 2],[223.041 4 3],[224.049 4 3],[225.338 4 3],[226.703 10 2],[227.371 20 2],[227.787 10 2],[231.033 6 2],[231.495 10 2],[233.479 10 2],[234.013 20 2],[234.697 10 3],[235.734 4 3],[240.417 10 2],[241.052 6 2],[242.81 32 0],[243.893 4 3],[244.141 5 3],[245.403 10 2],[248.279 6 3],[248.357 5 3],[248.652 20 2],[250.057 3.6 3],[250.359 10 2],[250.802 4 3],[253.403 4 3],[254.802 3.6 3],[255.56 8 3],[256.947 24 0],[257.104 8 3],[257.158 5 3],[258.934 3 3],[259.91 6 2],[262.035 5 3],[262.116 4 3],[262.269 7 2],[264.216 4 3],[264.296 6 2],[264.851 6 2],[265.466 7 2],[272.247 8 2],[278.6 10 2],[282.142 10 2],[283.053 3 3],[287.486 6 2],[292.934 6 2],[293.183 40 0],[293.46 1.8 3],[298.3 6 2],[300.261 20 2],[301.232 40 2],[301.929 2 3],[302.173 20 2],[305.983 6 2],[306.143 10 2],[310.425 6 2],[318.261 10 2],[323.539 20 2],[326.652 1.8 3],[330.173 60 0],[330.272 6 2],[332.999 60 0],[335.125 80 0],[336.633 60 0],[338.071 130 1],[343.076 10 2],[346.446 190 1],[347.489 24 1],[356.643 1.8 3],[374.105 1.8 3],[387.426 6 2],[393.64 6 2],[393.672 6 2],[394.08 60 0],[395.875 6 2],[396.926 120 0],[397.004 60 0],[403.038 260 0],[403.238 60 0],[407.771 9200 1],[409.403 6 2],[409.702 6 2],[410.563 6 2],[416.18 40 1],[421.552 6400 1],[429.857 1.8 3],[430.545 68 1],[433.58 7 2],[443.804 70 0],[460.733 13000 0],[468.508 1.8 3],[472.228 640 0],[474.192 440 0],[478.432 280 0],[481.188 960 0],[483.208 720 0],[485.504 100 0],[486.87 120 0],[487.249 600 0],[487.606 120 0],[487.632 400 0],[489.198 200 0],[496.226 1600 0],[496.794 260 0],[507.109 6 2],[513.034 6 2],[515.607 160 0],[515.826 7 2],[522.22 280 0],[522.511 400 0],[522.927 400 0],[523.855 560 0],[525.69 960 0],[525.771 8 2],[526.221 6 2],[528.832 6 2],[532.982 70 0],[539.103 6 2],[544.348 8 2],[545.084 300 0],[546.39 6 2],[548.084 1400 0],[548.612 220 0],[550.417 700 0],[552.183 520 0],[553.481 400 0],[554.005 400 0],[554.336 50 0],[566.466 6 2],[568.972 6 2],[597.01 40 0],[634.575 50 0],[636.394 50 0],[636.996 70 0],[638.075 200 0],[638.65 180 0],[638.824 120 0],[640.847 1800 0],[644.668 50 0],[646.579 50 0],[650.4 1100 0],[654.679 200 0],[655.026 340 0],[661.726 600 0],[664.354 160 0],[679.105 360 0],[687.838 960 0],[689.259 240 0],[707.01 1100 0],[715.309 12 0],[716.724 50 0],[723.227 40 0],[730.941 500 0],[762.15 100 0],[767.306 80 0],[785 10 0],[786.69 6 0],[787.4 4 0],[842.28 40 0],[850.569 24 1],[868.891 40 1],[871.956 6 1],[917 8 0],[920.45 6 0],[928.39 4 0],[929.41 20 0],[930.66 3 0],[931.92 6 0],[938.045 12 0],[941.125 8 0],[944.895 80 0],[959.6 120 0],[962.47 60 0],[963.81 20 0],[964.77 20 1],[1003.666 60 1],[1032.731 200 1],[1087.27 1.4 1],[1091.488 40 1],[1098.4 2 0],[1122.457 2.6 1],[1124.125 140 0],[1201.476 20 1],[1223.62 4 0],[1244.59 12 1],[1247.96 4 0],[1249.5 8 0],[1265.22 3 0],[1297.47 15 1],[1312.38 20 1],[1352.28 3 0],[1714.09 3 0],[1717.05 6 0],[1744.74 10 0],[1762.6 0.8 1],[1774.3 6 0],[1975.96 3 0],[2026.14 46 0],[2070.0699 24 0],[2076.45 8 0],[2077.8699 3 0],[2602.36 6 0]}{ALLx13000x13000x9200x750x40x10x0}{UVx750x80x280x750x40x10x0}{VISx13000x13000x9200x8x1.8x0x0}{IVx200x140x200x0x0x0x0}% \pgfspectra@elt@search{#1}{Y}{[21.18 0.3 3],[21.451 0.3 3],[21.597 0.6 3],[21.739 0.6 3],[22.171 1.2 3],[22.218 0.3 3],[22.298 0.6 3],[22.884 0.2 3],[22.894 2 3],[22.978 0.3 3],[23.517 0.3 3],[23.577 2.5 3],[24.212 0.1 3],[24.23 3 3],[24.414 0.3 3],[26.372 0.3 3],[26.464 15 3],[27.24 3 3],[27.303 15 3],[27.86 1 3],[28.918 0.5 4],[29.999 5 4],[31.289 0.3 4],[31.335 20 4],[32.047 4 4],[32.169 4 4],[32.558 15 4],[32.657 20 4],[32.834 17.5 4],[33.04 5 4],[33.309 90 4],[33.38 50 4],[33.512 10 4],[33.514 40 4],[33.662 50 4],[33.902 50 4],[34.002 20 4],[34.042 0.5 4],[34.459 50 4],[34.965 10 4],[34.975 0.2 4],[35.136 1 4],[35.398 10 4],[35.556 10 4],[35.586 90 3],[37.042 30 3],[37.205 30 4],[37.996 40 4],[38.682 50 3],[39.777 20 4],[40.345 30 4],[40.881 0.1 4],[40.931 20 4],[41.503 20 4],[41.818 10 4],[41.859 15 4],[41.979 5 4],[42.074 30 4],[42.503 60 3],[42.787 0.1 4],[43.075 5 4],[43.766 10 4],[44.162 0.3 4],[44.296 3 4],[45.197 0.2 4],[45.584 1.5 4],[45.784 8.5 4],[47.31 30 3],[58.498 400 4],[63.097 200 4],[64.368 0.1 2],[64.669 0.4 2],[65.387 0.6 2],[65.698 1 2],[66.874 2.5 2],[67.198 4 2],[69.172 10 2],[69.385 0.4 2],[69.52 20 2],[72.791 0.9 2],[72.847 0.4 2],[72.883 0.2 2],[72.973 2 2],[73.049 60 2],[73.27 1.5 2],[73.436 80 2],[77.078 1.5 2],[77.179 1 2],[80.426 2 2],[80.52 500 2],[80.618 7.5 2],[80.897 15 2],[80.992 700 2],[85.564 10 2],[85.782 6 2],[98.423 2.5 2],[98.796 1.5 2],[98.921 1500 2],[99.637 2500 2],[99.919 2 2],[100.056 15 2],[100.335 2.5 2],[100.658 100 2],[100.786 120 2],[107.752 12 2],[108.135 50 2],[108.463 7.5 2],[108.839 35 2],[109.525 25 2],[109.587 2.5 2],[110.321 15 2],[128.974 300 2],[130.696 250 2],[131.451 500 2],[131.61 150 2],[133.404 400 2],[154.908 0.8 2],[155.381 1.5 2],[163.514 3 2],[164.043 7.5 2],[177.98 20 2],[178.605 60 2],[204.193 1 2],[204.207 0.5 2],[206.058 150 2],[206.898 400 2],[212.798 1000 2],[219.116 1600 2],[220.076 800 2],[220.603 800 2],[224.306 35 1],[226.141 15 2],[226.157 8 2],[228.434 1000 2],[231.992 0.3 2],[232.731 1000 2],[235.42 5 0],[236.723 5000 2],[237.383 3 -1],[238.524 5 -1],[241.393 2.5 1],[241.464 4000 2],[242.22 56 1],[246.061 6 1],[249.042 2.5 0],[254.028 1.2 -1],[254.757 1.4 -1],[255.017 1 -1],[268.165 2 0],[269.421 6 0],[269.539 2.6 0],[271.03 10 2],[271.054 9 2],[272.3 9.5 0],[273.008 2.2 0],[273.485 2.2 1],[274.253 7 0],[276.01 14 0],[278.011 0.5 2],[278.521 3 1],[278.559 1.2 1],[279.12 1.2 0],[279.144 7 2],[280.011 3 1],[280.327 2 2],[280.7 10 2],[281.364 2.6 0],[281.704 9000 2],[281.886 1.8 0],[282.256 4.5 0],[282.537 2.2 1],[282.638 4.5 1],[285.443 7 1],[285.63 2.6 1],[285.787 1.1 1],[286.767 600 2],[288.648 9.5 0],[289.769 1.8 1],[289.882 1.4 1],[291.341 600 2],[291.774 150 2],[291.856 160 2],[291.905 16 0],[293.003 1.8 1],[294.053 1.5 2],[294.601 9900 2],[294.84 39 0],[294.848 2 2],[296.496 35 0],[297.042 600 2],[297.391 1.8 1],[297.459 48 0],[298.055 3 1],[298.426 75 0],[299.526 7 0],[299.694 14 0],[300.526 7 0],[301.393 140 2],[301.885 150 2],[301.895 5.5 0],[302.173 13 0],[302.228 9 0],[302.649 2.6 1],[303.659 3 1],[304.484 4.5 0],[304.537 19 0],[304.711 2.2 0],[305.522 6 1],[308.685 6 1],[309.17 5.5 0],[309.376 2.2 1],[309.588 9.5 1],[311.181 4.5 0],[311.204 5.5 1],[311.428 2.2 0],[312.877 6 1],[312.993 8 1],[313.517 9.5 1],[317.306 11 1],[317.941 22 1],[319.131 7 0],[319.562 230 1],[320.027 220 1],[320.332 220 1],[321.669 390 1],[324.228 620 1],[326.71 0.3 2],[327.68 2.5 2],[328.091 31 1],[330.847 1.9 1],[332.789 470 1],[334.038 5.5 0],[336.2 16 1],[338.859 8.5 0],[339.704 4.5 0],[341.247 8.5 0],[344.882 20 1],[345.095 7 0],[346.788 11 1],[348.573 17 0],[349.609 170 1],[352.153 8 0],[354.601 4.5 1],[354.901 390 1],[355.18 13 0],[355.269 54 0],[355.876 17 0],[357.143 19 0],[357.605 26 0],[358.452 330 1],[358.775 30 0],[358.969 10 0],[359.292 280 0],[360.073 1000 1],[360.192 620 1],[361.105 780 1],[362.094 430 0],[362.871 190 1],[363.312 780 1],[366.461 300 1],[366.849 4.5 1],[369.253 17 0],[371.03 1300 1],[371.812 6 0],[373.861 6 0],[374.755 120 1],[374.989 5 0],[377.433 1000 1],[377.656 140 1],[378.23 5 1],[378.87 740 1],[381.835 130 1],[383.288 400 1],[384.787 7 1],[386.696 50 2],[387.682 8 0],[387.828 48 1],[388.777 3 0],[390.074 300 2],[390.459 6 0],[391.458 400 2],[391.825 5 0],[393.011 6 0],[393.066 24 1],[395.036 440 1],[395.16 15 1],[395.509 6 0],[398.26 360 1],[398.75 4 0],[403.96 380 2],[403.983 94 0],[404.011 300 2],[404.764 240 0],[407.738 940 0],[408.122 9 0],[408.371 200 0],[410.238 990 0],[410.639 6 0],[411.081 8 0],[412.161 12 2],[412.492 32 1],[412.831 890 0],[414.285 750 0],[415.763 10 0],[416.752 240 0],[417.414 200 0],[417.754 800 1],[419.928 12 1],[420.47 38 1],[421.302 8 0],[421.354 4 0],[421.78 16 0],[422.063 28 0],[422.425 8 0],[423.573 60 1],[423.594 220 0],[425.12 30 0],[430.23 36 0],[430.963 280 1],[431.63 5 0],[433.078 11 0],[433.729 3 0],[434.465 6 0],[434.879 44 0],[435.233 6 0],[435.27 6 0],[435.773 12 0],[435.873 80 1],[436.603 12 0],[437.494 1200 1],[437.561 15 0],[437.933 8 0],[438.548 3 0],[438.774 10 0],[439.401 3 0],[439.467 3 0],[439.802 180 1],[442.259 89 1],[443.734 8 0],[444.366 10 0],[444.663 13 0],[446.527 2 0],[447.389 4 0],[447.572 17 0],[447.696 18 0],[447.745 16 0],[448.728 11 0],[448.747 30 0],[449.175 3 0],[449.242 2.5 0],[450.595 50 0],[451.358 5 0],[451.401 8 0],[452.205 4 0],[452.725 89 0],[452.78 44 0],[454.432 10 0],[455.937 10 0],[456.439 3 0],[457.356 6 0],[458.132 3.5 0],[458.177 3 0],[459.655 13 0],[460.48 9.5 0],[461.3 4 0],[464.37 200 0],[465.832 20 0],[465.889 7 0],[466.747 8.5 0],[467.082 6 0],[467.484 200 0],[467.835 6 0],[468.232 26 1],[468.977 8.5 0],[469.681 18 0],[470.885 3.5 0],[472.585 6 0],[472.853 17 0],[473.237 6 0],[473.762 200 2],[474.14 8.5 0],[475.279 16 0],[476.098 41 0],[478.018 1.7 0],[478.104 12 0],[478.658 16 1],[478.689 17 0],[479.93 18 0],[480.431 5 0],[480.481 7 0],[481.738 8.5 -1],[481.82 14 -1],[481.964 14 0],[482.213 12 0],[482.331 19 1],[483.915 6 0],[483.987 77 0],[484.568 55 0],[485.269 41 0],[485.425 12 0],[485.487 89 1],[485.67 5 0],[485.984 33 0],[487.965 5 0],[488.369 190 1],[488.628 5 0],[488.665 4 0],[489.344 9.5 0],[490.012 110 1],[490.611 10 0],[490.9 4.5 0],[492.187 15 0],[493.093 3.5 0],[495.066 4.5 0],[497.43 12 0],[498.213 12 1],[500.697 10 0],[507.021 7.5 0],[507.219 7.5 0],[508.742 110 1],[508.818 3 0],[510.288 750 2],[511.911 21 1],[512.04 130 2],[512.321 45 1],[513.52 18 0],[519.643 12 1],[520.041 96 1],[520.572 150 1],[523.81 1000 2],[524.081 18 0],[526.358 300 2],[528.982 6 1],[532.078 4.5 1],[538.062 7.5 0],[538.364 400 2],[540.278 22 1],[541.703 2.4 0],[542.437 9 0],[543.824 19 0],[546.646 71 0],[546.847 10 0],[547.339 9 1],[548.074 9 1],[549.317 6 0],[549.559 3.5 0],[549.741 24 1],[550.345 30 0],[550.99 25 1],[551.364 6 0],[552.163 12 0],[552.676 2.4 0],[552.754 74 0],[554.163 3.5 0],[554.45 12 0],[554.602 9 1],[555.643 7.5 0],[556.281 600 2],[556.727 60 2],[556.775 6 0],[557.224 400 2],[557.742 18 0],[558.108 2.4 0],[558.187 62 0],[559.096 2.1 0],[559.412 2.1 0],[559.548 40 2],[560.208 300 2],[560.633 12 0],[562.391 1.5 0],[563.013 56 0],[563.225 2.4 0],[563.289 2.1 0],[564.469 12 0],[564.847 12 0],[566.294 74 1],[567.527 9 0],[569.363 1.8 0],[570.673 16 0],[572.061 2.4 0],[572.889 7.5 1],[573.012 15 -1],[573.209 2.1 0],[574.385 9 0],[574.693 1.8 -1],[576.422 2.4 -1],[576.564 7.5 0],[577.395 3.5 0],[578.169 10 1],[580 1.5 -1],[581.858 1.5 -1],[582.187 3 0],[583.227 2.1 0],[583.807 0.9 -1],[585.883 1.5 -1],[587.183 1.5 0],[587.614 2.4 -1],[587.996 2.4 0],[589.394 2.4 -1],[590.296 3.5 0],[591.219 2.4 -1],[593.11 2.4 -1],[593.908 9 -1],[594.572 4.5 0],[595.002 2.4 0],[595.641 7.5 -1],[597.204 130 -1],[598.186 5 0],[598.764 100 -1],[600.36 74 -1],[600.465 12 -1],[600.919 12 0],[601.987 62 -1],[602.341 12 0],[603.66 50 -1],[605.381 42 -1],[607.278 13 -1],[608.8 5 0],[608.935 21 -1],[609.678 16 -1],[610.782 13 -1],[611.473 13 -1],[612.738 7.5 -1],[613.206 140 -1],[613.504 12 0],[613.843 15 0],[614.836 110 -1],[615.172 12 -1],[616.508 82 -1],[618.223 56 -1],[619.173 120 0],[619.982 59 -1],[621.796 45 -1],[622.259 30 0],[623.672 27 -1],[625.105 4.5 0],[627.501 12 -1],[629.546 6 -1],[631.62 2.4 -1],[633.81 2.4 -1],[635.948 1.5 -1],[636.987 1.5 -1],[640.201 7.5 0],[643.5 100 0],[643.718 2.4 0],[650.123 1.8 -1],[651.833 1.8 -1],[653.584 1.8 -1],[653.86 9 0],[655.384 1.2 -1],[655.739 7 0],[657.258 1.2 -1],[657.685 3.5 0],[658.487 2.3 0],[661.375 9.5 1],[662.249 1.4 0],[663.649 1.9 0],[665.061 4 0],[666.44 2.1 0],[668.758 15 0],[669.183 1.4 0],[669.475 0.7 0],[669.926 1.6 0],[670.071 7 0],[671.32 3.5 0],[673.599 4 0],[679.371 19 0],[679.541 7 1],[680.315 1.2 0],[681.516 2.1 0],[683.249 1.4 1],[684.524 4.5 0],[685.824 1.4 1],[688.722 2.9 0],[689.6 2.1 1],[690.826 0.9 0],[693.352 1.4 0],[695.031 2.4 0],[695.168 1 1],[695.804 1 0],[697.988 2.4 0],[700.897 1.3 0],[700.993 1 0],[703.518 1.9 0],[705.294 2.9 0],[705.428 1.3 0],[707.513 0.9 0],[712.792 1.1 0],[719.166 3.5 0],[719.593 1 0],[725.458 200 2],[726.417 3.5 1],[729.308 0.9 0],[733.062 0.9 0],[733.296 0.5 1],[734.646 5 0],[739.877 1.1 0],[745.03 2.9 1],[749.488 1.7 0],[753.671 0.7 0],[755.871 900 2],[756.313 3.5 0],[761.772 0.8 0],[762.294 1.9 0],[765.289 0.7 0],[768.949 0.5 0],[769.8 0.8 0],[771.989 1.9 0],[772.408 1.9 0],[778.842 1.3 0],[779.632 1.3 0],[780.252 0.6 0],[781.216 1.7 0],[785.552 2.9 0],[786.453 600 2],[788.19 11 1],[791.671 800 2],[798.941 40 2],[799.143 1000 2],[799.933 1 0],[817.141 800 2],[832.961 0.9 0],[834.443 2.4 0],[836.564 0.8 0],[845.036 1.7 0],[852.894 0.8 0],[864.509 400 2],[879.621 1000 2],[880.062 9.5 0],[883.585 1.9 1],[911.659 800 2]}{ALLx9900x990x1300x9900x90x400x140}{UVx9900x430x1300x9900x90x400x5}{VISx1200x990x1200x1000x0x0x140}{IVx1000x9.5x11x1000x0x0x0}% @@ -80,10 +80,10 @@ \pgfspectra@elt@search{#1}{Ag}{[70.98 40 2],[71.385 40 2],[71.773 20 2],[71.853 40 2],[72.696 60 2],[73.004 70 2],[73.028 30 2],[73.083 5 1],[73.094 30 2],[73.657 40 2],[73.813 20 2],[74.098 40 2],[74.229 40 2],[74.83 40 2],[75.28 6 1],[75.573 30 2],[75.827 20 2],[76.719 40 2],[76.833 50 2],[76.961 30 2],[77.638 70 2],[78.291 40 2],[78.576 30 2],[78.908 40 2],[79.235 50 2],[79.654 40 2],[79.791 50 2],[79.941 80 2],[80.888 60 2],[81.612 30 2],[82.239 36 2],[83.811 40 2],[100.532 3 1],[106.549 2 1],[107.223 2.4 1],[107.422 50 1],[110.703 30 1],[111.246 30 1],[119.583 12 1],[122.333 10 1],[124.08 10 1],[124.687 10 1],[125.681 11 1],[125.755 11 1],[126.663 10 1],[127.367 14 1],[129.751 13 1],[131.12 17 1],[131.381 11 1],[131.461 10 1],[132.384 12 1],[134.209 12 1],[134.257 10 1],[134.662 14 1],[135.354 10 1],[136.45 30 1],[137.322 24 2],[137.476 24 2],[139.6 20 1],[140.493 22 2],[141.093 20 1],[141.39 24 2],[141.429 24 2],[141.972 18 1],[142.861 24 2],[143.26 19 1],[145.274 24 2],[145.641 40 2],[146.472 20 1],[146.623 10 1],[147.144 20 2],[148.901 60 2],[150.737 10 0],[151.508 30 2],[151.563 20 0],[152.423 20 2],[152.704 24 2],[154.114 30 2],[154.858 10 0],[155.089 30 2],[155.304 26 2],[155.516 20 1],[158.741 26 2],[158.928 24 2],[161.379 20 2],[161.914 26 2],[163.446 20 2],[164.45 20 1],[165.152 12 0],[165.21 10 0],[165.224 20 2],[165.36 26 2],[165.443 60 2],[165.618 140 2],[165.71 30 2],[166.154 20 2],[167.075 26 2],[167.614 30 2],[168.107 20 2],[168.282 24 1],[169.351 100 2],[170.506 40 2],[170.811 2 0],[170.886 30 2],[170.927 10 0],[171.768 26 2],[172.227 40 2],[172.676 30 2],[172.814 50 2],[173.644 25 1],[174.734 40 2],[174.964 24 2],[175.089 30 2],[175.103 150 2],[176.057 20 2],[176.262 30 2],[176.614 2 0],[176.87 30 2],[177.181 20 2],[178.385 20 2],[179.037 15 1],[179.17 20 2],[179.269 20 2],[179.39 30 2],[180.224 30 2],[180.226 30 2],[180.277 20 2],[180.823 60 2],[181.683 50 2],[182.245 30 2],[182.883 70 2],[183.233 50 2],[183.25 24 2],[183.431 20 2],[183.61 50 2],[183.864 30 2],[184.014 80 2],[184.696 20 2],[184.771 4 0],[184.993 24 2],[185.633 30 2],[185.891 24 2],[186.039 20 2],[186.064 20 2],[186.712 70 2],[186.81 30 2],[187.255 20 2],[187.345 80 2],[188.036 50 2],[188.957 60 2],[191.692 80 2],[191.708 120 2],[192.53 40 2],[194.632 30 2],[194.844 20 2],[195.762 140 2],[195.927 24 2],[196.086 20 2],[196.689 80 2],[196.738 20 1],[197.592 120 2],[197.703 100 2],[198.187 30 2],[198.702 40 2],[199.516 26 2],[200.024 120 2],[200.73 60 2],[201.149 40 2],[201.365 30 2],[201.596 30 1],[203.398 30 1],[204.133 30 2],[205.317 30 2],[205.383 30 2],[205.699 40 2],[206.117 40 0],[206.985 20 0],[208.104 40 2],[211.382 16 1],[214.56 12 1],[214.647 60 2],[214.919 30 2],[216.189 120 2],[216.621 30 2],[217 3 0],[218.676 10 1],[221.123 30 2],[222.953 12 1],[223.84 20 2],[224.643 20 1],[224.651 100 2],[224.874 15 1],[228.003 15 1],[228.65 20 2],[230.956 6 0],[231.004 140 2],[231.26 2 0],[231.705 14 1],[232.029 16 1],[232.468 14 1],[233.14 16 1],[235.792 14 1],[237.502 10 0],[238.685 20 2],[239.569 60 2],[241.141 15 1],[241.323 18 1],[243.781 20 1],[244.793 16 1],[246.962 20 2],[247.384 16 1],[250.663 12 1],[256.287 20 2],[257.563 10 0],[266.049 12 1],[272.177 12 0],[276.754 15 1],[282.439 20 0],[292.677 2 0],[293.842 4 0],[309.91 4 0],[313.002 6 0],[317.058 2 0],[318.07 18 1],[321.567 3 0],[322.515 2 0],[323.318 3 0],[326.735 20 1],[328.068 11000 0],[330.567 2 0],[338.289 5600 0],[340.378 2 0],[346.916 6 0],[347.582 14 1],[349.528 16 1],[350.192 4 0],[350.803 4 0],[351.338 3 0],[352.112 2 0],[354.261 10 0],[354.716 2 0],[355.701 2 0],[358.667 4 0],[362.349 2 0],[362.468 10 0],[368.246 15 1],[368.25 6 0],[368.334 16 1],[370.92 10 0],[372.742 2 0],[375.314 4 0],[381.094 40 0],[381.178 10 0],[384.074 20 0],[384.785 3 0],[390.741 10 0],[390.931 10 1],[391.44 10 0],[392.01 14 1],[392.801 2 0],[394.043 2 0],[394.297 2 0],[394.943 12 1],[398.158 20 0],[398.519 14 1],[399.215 2 0],[405.548 20 0],[408.343 2 0],[408.591 16 1],[418.548 20 1],[421.096 18 0],[421.282 20 0],[431.107 10 0],[439.623 4 0],[447.604 10 0],[455.6 4 0],[461.569 6 0],[462.004 16 1],[462.046 10 1],[466.848 12 0],[467.76 6 0],[478.84 20 1],[479.62 4 0],[484.782 6 0],[487.41 20 0],[488.821 4 0],[491.75 2 0],[493.575 2 0],[499.289 4 0],[502.735 16 1],[512.35 3 0],[520.908 200 0],[533.362 2 0],[546.55 200 0],[547.155 20 0],[547.538 4 0],[554.567 4 0],[555.958 2 0],[566.734 20 0],[608.378 2 0],[626.85 2 0],[662.108 4 0],[735.996 4 0],[768.778 64 0],[800.54 5 1],[825.47 3 1],[827.352 100 0],[832.44 4 1],[837.95 3 1],[840.38 5 1],[849.25 3 1],[864.57 6 0],[870.485 2 0],[874.76 2.4 1],[900.09 3 1],[1255.1 2 0],[1681.95 12 0],[1741.6699 4 0],[1830.79 3 0],[1838.2301 3 0]}{ALLx11000x11000x50x150x0x0x0}{UVx11000x11000x50x150x0x0x0}{VISx200x200x20x0x0x0x0}{IVx100x100x5x0x0x0x0}% \pgfspectra@elt@search{#1}{Cd}{[42.701 50 3],[43.788 20 3],[44.785 50 3],[48.09 60 3],[48.949 10 3],[49.3 70 3],[49.513 70 3],[49.814 70 3],[49.853 70 3],[50.409 80 3],[50.42 70 3],[50.45 70 3],[50.631 80 3],[50.801 60 3],[50.895 50 3],[50.955 70 3],[50.981 25 3],[51.14 70 3],[51.3 80 3],[51.45 70 3],[51.942 60 3],[52.097 15 3],[52.441 80 3],[52.447 70 3],[52.477 50 3],[52.51 70 3],[52.519 60 3],[52.707 70 3],[53.079 50 3],[53.109 80 3],[53.151 80 3],[53.429 70 3],[53.677 70 3],[53.724 50 3],[54.09 60 3],[54.174 70 3],[54.26 80 3],[54.655 80 3],[54.801 40 3],[54.833 20 3],[54.89 15 3],[55.127 25 3],[55.29 20 3],[55.306 60 3],[55.405 80 3],[56.026 25 3],[56.416 10 3],[56.701 60 3],[67.739 8 2],[68.458 15 2],[72.07 10 2],[106.223 20 3],[111.816 150 3],[112.6 30 3],[113.408 20 3],[113.904 15 3],[115.464 20 3],[115.573 10 3],[116.465 100 3],[116.578 20 3],[116.73 40 3],[117.973 20 3],[118.307 15 3],[118.34 100 3],[119.413 40 3],[119.563 20 3],[119.647 30 3],[119.893 20 3],[121.538 15 3],[122.352 20 3],[124.606 20 3],[124.656 15 3],[124.994 15 3],[125.6 100 1],[126.647 30 3],[127.441 15 3],[128.563 20 3],[128.758 20 3],[129.643 150 1],[129.946 20 3],[130.436 40 3],[130.607 30 3],[131.689 15 3],[132.185 15 3],[132.555 20 3],[132.65 100 1],[134.097 30 3],[134.615 15 3],[135.478 30 3],[135.811 20 3],[136.255 30 3],[137.048 60 3],[137.091 150 1],[138.098 30 3],[138.36 5 2],[139.21 15 2],[139.678 10 2],[139.765 20 3],[140.368 30 3],[140.658 15 3],[141.628 25 2],[141.889 60 3],[142.029 5 2],[142.054 8 2],[142.983 15 3],[143.286 5 2],[144.608 20 2],[144.754 20 3],[144.755 25 2],[145.263 20 3],[145.574 30 2],[146.597 15 3],[146.614 8 2],[146.667 15 3],[147.197 5 2],[148.295 15 3],[149.179 20 3],[149.181 15 2],[151.101 5 2],[151.165 10 2],[151.313 5 2],[151.426 200 1],[152.355 10 2],[152.84 15 2],[152.93 30 2],[153.21 5 2],[154.517 50 2],[154.757 25 2],[155.007 10 2],[155.045 20 2],[155.089 15 2],[155.218 5 2],[155.648 5 2],[156.066 15 2],[156.603 5 2],[156.898 15 2],[157.02 20 3],[157.158 200 1],[158.239 10 2],[159.873 20 3],[160.042 20 3],[160.159 40 2],[160.487 20 2],[160.664 20 2],[160.728 10 2],[160.891 15 2],[160.961 10 2],[161.251 15 2],[162.287 15 3],[162.527 15 2],[162.854 25 2],[165.187 20 2],[165.563 25 2],[166.86 100 1],[167.815 30 2],[169.97 10 2],[170.247 50 1],[170.716 40 2],[172.193 10 2],[172.295 40 2],[172.441 50 1],[172.566 30 2],[173.9 25 2],[174.569 5 2],[174.767 40 2],[174.815 15 2],[176.882 30 2],[177.306 40 2],[178.584 100 1],[178.919 30 2],[179.34 75 2],[179.61 15 2],[180.057 5 2],[182.341 40 2],[182.77 100 1],[184.466 50 2],[185.113 40 2],[185.137 20 2],[185.585 40 2],[185.667 200 2],[187.408 150 2],[188.649 15 2],[190.348 15 2],[190.998 25 2],[191.057 15 2],[192.223 300 1],[193.959 10 2],[194.354 100 1],[196.554 40 1],[198.689 30 1],[198.881 15 2],[199.543 200 1],[200.06 20 2],[200.407 15 2],[200.749 100 1],[201.612 15 2],[203.245 50 1],[203.623 75 1],[203.983 40 2],[204.561 50 2],[206.125 10 2],[208.791 75 2],[209.6 150 1],[209.745 10 2],[210.047 5 2],[211.16 50 2],[214.441 1000 1],[215.506 50 1],[218.779 100 1],[218.813 5 2],[219.456 1000 1],[221.843 5 2],[222.443 5 2],[226.502 1000 1],[228.8022 1500 0],[231.277 1000 1],[232.107 200 1],[237.682 40 1],[241.824 7 2],[241.869 50 1],[242.636 10 2],[246.973 50 1],[248.793 40 1],[249.1 3 0],[249.558 40 1],[249.981 25 2],[250.891 10 0],[250.911 50 1],[251.622 30 1],[251.859 15 0],[252.5196 25 0],[254.4613 50 0],[255.198 50 1],[255.3465 25 0],[256.5789 3 0],[257.293 500 1],[258.0106 50 0],[258.487 3 0],[259.2026 30 0],[260.2048 25 0],[261.881 15 2],[262.8979 50 0],[263.056 5 2],[263.219 40 0],[263.942 75 0],[265.923 40 1],[266.0325 50 0],[266.82 25 1],[267.262 50 1],[267.754 100 0],[267.7748 25 0],[270.7 50 1],[271.2505 75 0],[273.382 50 0],[274.854 1000 1],[276.3894 100 0],[276.423 50 0],[276.699 20 2],[277.4958 50 0],[280.559 30 2],[282.319 30 1],[283.69 200 0],[285.646 25 1],[286.818 100 0],[288.0767 200 0],[288.1224 50 0],[291.467 200 1],[292.787 50 1],[292.927 200 1],[298.062 1000 0],[298.1362 200 0],[298.1845 50 0],[303.06 50 1],[303.572 10 2],[308.0822 150 0],[308.148 25 1],[308.2593 30 0],[309.234 100 1],[313.3167 200 0],[314.679 50 1],[325.033 150 1],[325.2524 300 0],[326.1055 300 0],[334.321 50 1],[338.549 50 1],[338.888 30 1],[340.3652 800 0],[341.749 50 1],[344.242 50 1],[346.443 100 1],[346.62 1000 0],[346.7655 800 0],[348.308 25 1],[349.544 150 1],[349.9952 25 0],[352.411 100 1],[353.569 100 1],[361.0508 1000 0],[361.2873 800 0],[361.4453 60 0],[364.9558 20 0],[398.1926 10 0],[402.912 100 1],[413.477 200 1],[414.149 50 1],[428.508 100 1],[430.6672 8 0],[441.241 100 1],[441.2989 3 0],[441.563 1000 1],[444.045 30 1],[466.2352 8 0],[467.8149 200 0],[474.469 30 1],[479.9912 300 0],[488.172 50 1],[502.55 50 1],[508.5822 1000 0],[515.466 6 0],[526.801 100 1],[527.16 100 1],[533.748 1000 1],[537.813 1000 1],[538.189 200 1],[584.33 40 1],[588.022 50 1],[609.9142 300 0],[611.149 100 0],[632.5166 100 0],[633.0013 30 0],[635.472 400 1],[635.998 500 1],[643.847 2000 0],[646.494 400 1],[656.765 25 1],[672.578 500 1],[675.919 100 1],[677.8116 30 0],[723.701 50 1],[728.438 100 1],[734.567 1000 0],[806.699 50 1],[820.0309 5 0],[929.2 20 0],[1165.5 15 0],[1449.1 35 0],[1571.2 80 0],[1912.5 55 0],[2437.8 25 0],[2545.5 35 0]}{ALLx2000x2000x1000x200x150x0x0}{UVx1500x1500x1000x200x150x0x0}{VISx2000x2000x1000x0x0x0x0}{IVx80x80x50x0x0x0x0}% \pgfspectra@elt@search{#1}{In}{[36.867 3 4],[37.01 3 4],[37.282 5 4],[37.294 5 4],[37.495 1 4],[37.584 3 4],[37.607 3 4],[37.679 5 4],[37.861 8.5 4],[37.924 1.5 4],[38.027 4.5 4],[38.156 5.5 4],[38.214 4.5 4],[38.276 5.5 4],[38.305 5 4],[38.621 8.5 4],[38.67 5 4],[38.866 1.5 4],[38.891 7 4],[39.003 5.5 4],[39.092 5.5 4],[39.229 4.5 4],[39.246 4.5 4],[39.36 0.5 4],[39.389 12.5 4],[39.574 5.5 4],[39.773 1.5 4],[39.979 5 4],[40.005 4.5 4],[40.057 12.5 4],[40.239 12.5 4],[40.533 1.5 4],[40.728 4.5 4],[40.736 1.5 4],[40.795 4.5 4],[41.743 4.5 4],[41.845 1 4],[42.316 1 4],[67.733 4 3],[68.453 7.5 3],[68.531 3.5 2],[69.162 2.5 2],[72.064 4 3],[78.217 0.5 2],[88.224 5 2],[89.084 5 2],[91.587 5 2],[91.745 1 2],[92.683 2.5 2],[140.308 15 2],[143.485 15 2],[147.034 2 3],[148.77 10 2],[149.414 10 2],[151.262 2.5 3],[152.35 2.5 3],[152.478 5 2],[153.021 10 2],[153.203 3.5 3],[153.295 15 2],[156.892 4 3],[156.933 1.5 3],[160.15 6 3],[160.508 0.5 3],[160.659 3.5 3],[162.542 50 2],[162.848 5 3],[164.228 10 2],[164.8 1 0],[165.18 4 3],[165.562 5 3],[166.738 0.5 3],[167.064 2.5 3],[167.616 0.5 0],[167.807 6 3],[170.202 2 3],[170.253 10 2],[170.711 7.5 3],[171.154 2.5 0],[172.189 3.5 3],[174.123 1 0],[174.765 6 3],[174.81 5 3],[174.883 50 2],[175.849 0.5 0],[176.788 1 2],[176.877 5 3],[177.301 6 3],[178.915 4 3],[179.338 6 3],[181.071 0.5 2],[184.241 15 2],[184.467 6 3],[185.03 20 2],[185.11 4.5 3],[185.584 4.5 3],[185.664 7.5 3],[186.298 7.5 2],[187.408 7.5 3],[190.352 2.5 3],[193.958 2.5 3],[194.331 1.5 3],[200.473 3 3],[210.117 0.5 3],[210.389 5 1],[211.231 4 3],[215.408 15 2],[215.442 1 2],[216.688 5 1],[217.99 1 0],[218.24 1 0],[218.74 1 0],[219.084 1 0],[219.567 7.5 1],[219.741 1 0],[219.952 5 2],[220.224 1 0],[220.528 25 1],[221.114 1.5 0],[222.513 2 3],[223.07 2.5 0],[223.218 2.5 2],[224.166 1.5 0],[225.579 15 1],[225.999 5 0],[226.126 10 2],[226.626 2.5 2],[227.241 2.5 2],[227.284 2.5 2],[227.82 2.5 0],[228.164 20 1],[228.375 1 0],[229.833 1 0],[229.87 1 0],[230.09 5 2],[230.249 1 0],[230.605 50 1],[230.686 12.5 0],[230.932 1.5 0],[230.975 1 0],[231.321 45 1],[231.509 1 0],[232.34 15 1],[232.441 2.5 0],[232.492 1.5 0],[232.795 35 1],[233.276 1.5 0],[233.457 40 1],[234.019 5 0],[234.59 4 0],[234.656 2.5 0],[235.075 25 1],[235.87 2.5 0],[237.814 7.5 0],[237.9 5 0],[238.263 55 1],[238.954 20 0],[239.318 20 1],[239.918 5 0],[240.647 25 1],[240.876 25 1],[241.906 25 1],[241.92 25 1],[242.72 35 1],[242.986 10 0],[243.099 5 0],[243.273 25 1],[244.263 30 1],[244.79 50 1],[245.323 30 1],[246.008 30 0],[246.802 15 0],[248.615 35 1],[248.862 55 1],[248.895 45 1],[249.859 40 1],[249.96 50 1],[250.099 45 1],[250.816 30 1],[251.231 55 1],[252.137 50 0],[252.298 5 0],[252.741 50 2],[255.356 35 1],[255.444 80 1],[256.015 550 0],[256.513 35 1],[259.875 35 1],[260.176 100 0],[260.404 25 1],[265.47 45 1],[266.263 50 1],[266.865 70 1],[267.456 70 1],[268.312 40 1],[271.026 800 0],[271.394 150 0],[272.552 25 2],[272.615 40 2],[274.975 65 1],[275.388 350 0],[277.537 20 0],[279.876 30 1],[281.897 45 1],[283.692 90 0],[285.814 15 0],[286.568 40 1],[289.018 60 1],[293.263 550 0],[294.105 50 1],[295.701 10 0],[296.617 30 1],[298.28 50 2],[299.94 55 1],[300.808 50 2],[300.882 15 2],[303.936 4000 0],[305.115 4 0],[309.98 55 1],[310.18 90 1],[313.86 65 1],[314.275 40 1],[314.67 65 1],[315.577 75 1],[315.84 50 1],[317.63 45 1],[319.811 45 1],[325.609 6500 0],[325.856 1500 0],[329.355 15 2],[333.85 45 1],[335.091 4 2],[337.659 37.5 1],[340.428 50 1],[343.84 55 1],[356.232 2.5 2],[369.391 90 1],[370.813 47.5 1],[371.614 190 1],[371.83 60 1],[371.872 80 1],[372.34 80 1],[379.521 85 1],[379.921 115 1],[383.465 125 1],[384.218 100 1],[385.282 50 2],[388.978 50 1],[390.207 50 1],[392.212 30 1],[393.44 32.5 1],[396.235 125 1],[400.466 60 1],[401.392 70 1],[402.377 50 2],[403.232 75 2],[405.694 205 1],[406.23 25 2],[407.157 50 2],[407.293 50 2],[410.176 8500 0],[420.514 70 1],[421.304 50 1],[421.966 55 1],[425.268 50 2],[437.287 75 1],[450.078 75 1],[450.958 20 2],[451.131 9000 0],[454.901 55 1],[457.085 70 1],[457.802 90 1],[457.84 90 1],[461.608 70 1],[461.717 85 1],[462.014 125 1],[462.07 75 1],[462.73 85 1],[463.704 70 1],[463.816 190 1],[464.458 110 1],[465.562 180 1],[465.674 160 1],[468.111 95 1],[468.48 225 1],[487.837 1.5 0],[490.706 45 1],[492.493 35 1],[497.377 75 1],[510.936 40 1],[511.514 50 1],[511.74 70 1],[512.08 135 1],[512.175 100 1],[512.985 40 1],[517.542 120 1],[518.444 70 1],[524.877 100 2],[525.432 15 0],[526.274 6 0],[530.945 75 1],[541.141 40 1],[541.845 70 1],[543.67 110 1],[549.75 65 1],[550.708 70 1],[551.3 160 1],[552.328 125 1],[553.65 65 1],[555.545 95 1],[557.69 120 1],[563.67 100 1],[564.515 50 2],[570.85 80 1],[570.991 25 0],[572.18 50 1],[572.317 20 2],[572.768 25 0],[581.95 50 2],[585.315 105 1],[590.34 245 1],[591.54 130 1],[591.878 60 1],[606.29 65 1],[609.595 125 1],[610.866 105 1],[611.59 90 1],[612.87 115 1],[612.94 120 1],[613.21 160 1],[614 75 1],[614.323 45 1],[614.81 70 1],[614.95 95 1],[616.115 40 1],[616.245 90 1],[619.772 100 2],[622.428 50 1],[622.83 140 1],[623.11 70 1],[630.48 135 1],[636.23 145 1],[646.9 150 1],[654.12 105 1],[675.188 95 1],[676.59 90 1],[678.372 50 1],[684.744 4 0],[689.15 160 1],[690.013 2 0],[718.29 190 1],[725.5 90 1],[727.65 105 1],[730.34 90 1],[735.06 160 1],[763.27 50 1],[768.29 50 1],[774.07 105 1],[777.696 50 1],[778.9 90 1],[780.68 35 1],[781.45 35 1],[784.09 45 1],[805.078 10 0],[822.7 120 1],[823.866 15 0],[831.492 7.5 0],[843.455 25 1],[867.895 15 0],[868.263 10 0],[870.025 25 0],[881.35 50 1],[883.26 40 1],[889.447 20 0],[917.008 5 0],[919.77 60 1],[920.2 60 1],[921.3 110 1],[924.11 80 1],[934.983 20 0],[937.027 30 0],[942.799 10 0],[997.786 50 0],[1025.703 100 0],[1071.742 30 0],[1074.431 50 0],[1133.472 10 0],[1173.148 10 0],[1291.259 5 0],[1342.996 4.5 0],[1382.448 2.5 0],[1431.625 3 0],[1441.92 1.5 0],[1466.866 3 0],[1471.908 3.5 0],[1650.4311 1 0],[2229.1061 3 0],[2387.9131 3.5 0]}{ALLx9000x9000x245x100x7.5x12.5x0}{UVx6500x6500x190x50x7.5x12.5x0}{VISx9000x9000x245x100x0x0x0}{IVx120x100x120x0x0x0x0}% -\pgfspectra@elt@search{#1}{Sn}{[1.6 7 1],[35.514 120 4],[36.101 150 4],[37.255 100 4],[60.523 50 3],[61.904 50 3],[62.873 50 3],[75.301 100 2],[76.062 50 2],[77.579 75 2],[78.468 50 2],[89.992 1 1],[90.822 50 3],[91.092 200 2],[91.74 2 1],[93.563 1 1],[94.583 3 1],[95.45 4 1],[95.625 500 3],[98.513 7 1],[99.721 4 1],[101.092 50 2],[101.626 2 1],[101.972 500 3],[104.078 4 1],[104.132 1 1],[104.449 1000 3],[104.884 50 2],[105.837 100 3],[105.859 50 3],[106.21 3 1],[107.341 1000 3],[108.75 200 3],[108.935 200 4],[109.692 300 3],[110.324 50 3],[110.819 8 1],[111.934 0 3],[112.068 200 3],[113.279 100 4],[113.929 1000 2],[115.833 1000 2],[115.905 4 1],[116.074 200 4],[116.109 200 2],[116.143 10 1],[116.158 100 2],[116.294 3 1],[117.626 100 4],[118.051 4 1],[118.062 100 2],[118.425 1000 2],[118.992 100 4],[118.999 200 2],[120.406 200 2],[120.572 100 4],[121.052 2000 2],[121.51 100 2],[121.814 100 2],[121.907 9 1],[122.37 13 1],[123.017 100 2],[123.138 100 2],[124.3 11 1],[124.363 500 2],[125.138 2000 4],[125.992 1000 2],[127.631 40 2],[128.381 100 4],[129.086 20 1],[129.436 200 4],[130.22 100 4],[130.597 1000 2],[131.455 1000 3],[131.659 20 1],[132.734 1000 2],[133.47 200 2],[134.605 200 2],[134.765 1000 2],[136.971 200 2],[138.674 1000 2],[140.052 25 1],[141.061 500 2],[143.752 1000 3],[144.977 200 2],[147.515 20 1],[148.922 9 1],[153.29 100 3],[157.036 1000 2],[167.429 50 2],[173.721 10 0],[175.146 15 0],[175.33 10 0],[175.8 7 1],[176.498 20 0],[177.34 20 0],[179.075 30 0],[180.46 80 0],[181.134 15 1],[181.171 500 2],[181.304 30 0],[181.574 40 0],[181.931 25 0],[182.3 120 0],[183.189 9 1],[184.875 50 0],[185.2 30 0],[186.032 200 0],[186.142 20 0],[186.552 20 0],[186.596 30 0],[187.329 15 0],[188.264 30 0],[188.605 80 0],[189.14 100 0],[189.729 20 0],[189.991 12 1],[190.93 50 0],[191.161 40 0],[191.352 20 0],[192.531 80 0],[192.677 20 0],[192.795 15 0],[192.89 40 0],[193.317 25 0],[194.186 500 2],[194.269 20 0],[195.215 150 0],[195.552 50 2],[196.021 15 0],[197.146 30 0],[197.76 50 0],[198.42 80 0],[199.188 15 0],[199.498 20 0],[200.805 25 0],[201.576 30 0],[202.698 30 0],[204.066 50 0],[204.09 20 0],[205.403 50 0],[205.831 70 0],[206.4 20 0],[206.858 80 0],[207.289 100 0],[207.308 100 0],[208.062 25 0],[209.158 30 0],[209.435 40 0],[209.639 200 0],[210.093 100 0],[211.393 100 0],[212.126 50 0],[214.073 25 0],[214.143 20 0],[214.846 15 0],[214.863 1 1],[214.873 40 0],[215.143 20 0],[215.154 30 1],[217.132 80 0],[219.449 150 0],[219.934 300 0],[220.965 400 0],[220.967 4 1],[221.105 40 0],[223.172 80 0],[224.605 400 0],[224.607 6 1],[225.117 60 0],[226.719 30 0],[226.891 400 0],[228.226 20 0],[228.668 200 0],[231.723 600 0],[233.48 300 0],[235.484 1000 0],[235.79 20 0],[236.034 3 1],[236.833 22 1],[238.072 60 0],[238.454 4 1],[240.815 100 0],[242.17 800 0],[242.949 1000 0],[243.352 1 1],[244.898 15 1],[245.524 60 0],[247.64 20 0],[248.339 300 0],[248.348 13 1],[248.699 10 1],[249.57 200 0],[252.261 5 1],[252.392 90 0],[253.117 80 0],[254.655 400 0],[255.801 40 0],[257.158 500 0],[259.442 200 0],[263.694 50 0],[266.124 200 0],[266.493 2 1],[270.651 700 0],[272.782 2 1],[276.178 20 0],[277.981 150 0],[278.503 80 0],[278.796 60 0],[281.259 60 0],[281.358 80 0],[282.552 2 1],[283.999 1400 0],[284.642 1 1],[285.062 200 0],[286.332 1000 0],[291.28 1 1],[291.354 200 0],[291.982 6 1],[299.1 3 1],[299.444 7 1],[300.914 700 0],[301.218 1 1],[302.394 8 1],[303.28 200 0],[303.412 850 0],[304.75 12 1],[309.469 6 1],[314.184 60 0],[317.505 550 0],[321.871 40 0],[326.234 550 0],[328.321 50 1],[333.062 110 0],[335.197 60 1],[340.748 2 1],[347.246 10 1],[353.757 7 1],[357.545 11 1],[358.239 3 1],[362.008 2 1],[362.054 6 1],[365.578 40 0],[371.523 6 1],[380.102 280 0],[384.144 4 1],[429.465 1 1],[452.474 40 0],[457.913 1 1],[458.029 1 1],[487.722 2 1],[494.431 3 1],[497.973 20 0],[507.114 2 1],[507.267 2 1],[517.454 20 0],[533.236 10 1],[556.195 20 1],[558.892 25 1],[559.62 2 1],[563.171 500 0],[575.359 15 0],[579.72 1 1],[579.918 15 1],[592.544 50 0],[597.03 100 0],[603.77 150 0],[605.486 200 -1],[606.9 250 0],[607.346 100 0],[607.748 6 1],[607.97 5 1],[614.971 400 0],[615.46 200 0],[617.15 150 0],[631.078 100 0],[635.435 40 0],[645.35 70 1],[676.145 8 1],[684.405 25 1],[719.14 20 1],[738.779 10 1],[739.86 20 0],[740.862 1 1],[768.53 30 0],[774.18 13 1],[775.497 100 0],[790.4 3 1],[803.05 100 0],[803.93 30 0],[811.409 200 0],[812.1 30 0],[834.935 30 0],[835.704 80 0],[842.272 300 0],[855.26 400 0],[868.17 50 0],[901.895 30 0],[941.086 50 0],[941.537 80 0],[961.64 150 0],[974.11 50 0],[974.28 100 0],[980.538 300 0],[985.052 500 0],[1045.647 25 0],[1080.758 11 0],[1089.4 54 0],[1119.185 70 0],[1127.766 56 0],[1133.697 17 0],[1145.459 200 0],[1161.626 200 0],[1167.077 76 0],[1169.445 25 0],[1173.978 258 0],[1182.518 96 0],[1183.582 106 0],[1193.299 254 0],[1200.95 48 0],[1231.324 111 0],[1233.56 33 0],[1253.087 42 0],[1253.65 42 0],[1278.82 37 0],[1288.85 89 0],[1298.17 187 0],[1300.03 20 0],[1301.85 187 0],[1308.15 68 0],[1346.02 378 0],[1360.82 144 0],[1501.82 13 0],[1546.42 30 0],[1700.05 20 0],[1780.75 10 0],[2062.2199 20 0],[2086.1699 40 0],[2168.6199 8 0],[2213.1699 4 0],[2299.7199 3 0],[2432.7199 4 0],[2473.8199 4 0]}{ALLx2000x1400x70x2000x1000x2000x200}{UVx2000x1400x60x2000x1000x2000x0}{VISx500x500x70x0x0x0x200}{IVx500x500x3x0x0x0x0}% +\pgfspectra@elt@search{#1}{Sn}{[35.514 120 4],[36.101 150 4],[37.255 100 4],[60.523 50 3],[61.904 50 3],[62.873 50 3],[75.301 100 2],[76.062 50 2],[77.579 75 2],[78.468 50 2],[89.992 1 1],[90.822 50 3],[91.092 200 2],[91.74 2 1],[93.563 1 1],[94.583 3 1],[95.45 4 1],[95.625 500 3],[98.513 7 1],[99.721 4 1],[101.092 50 2],[101.626 2 1],[101.972 500 3],[104.078 4 1],[104.132 1 1],[104.449 1000 3],[104.884 50 2],[105.837 100 3],[105.859 50 3],[106.21 3 1],[107.341 1000 3],[108.75 200 3],[108.935 200 4],[109.692 300 3],[110.324 50 3],[110.819 8 1],[111.934 0 3],[112.068 200 3],[113.279 100 4],[113.929 1000 2],[115.833 1000 2],[115.905 4 1],[116.074 200 4],[116.109 200 2],[116.143 10 1],[116.158 100 2],[116.294 3 1],[117.626 100 4],[118.051 4 1],[118.062 100 2],[118.425 1000 2],[118.992 100 4],[118.999 200 2],[120.406 200 2],[120.572 100 4],[121.052 2000 2],[121.51 100 2],[121.814 100 2],[121.907 9 1],[122.37 13 1],[123.017 100 2],[123.138 100 2],[124.3 11 1],[124.363 500 2],[125.138 2000 4],[125.992 1000 2],[127.631 40 2],[128.381 100 4],[129.086 20 1],[129.436 200 4],[130.22 100 4],[130.597 1000 2],[131.455 1000 3],[131.659 20 1],[132.734 1000 2],[133.47 200 2],[134.605 200 2],[134.765 1000 2],[136.971 200 2],[138.674 1000 2],[140.052 25 1],[141.061 500 2],[143.752 1000 3],[144.977 200 2],[147.515 20 1],[148.922 9 1],[153.29 100 3],[157.036 1000 2],[167.429 50 2],[173.721 10 0],[175.146 15 0],[175.33 10 0],[175.8 7 1],[176.498 20 0],[177.34 20 0],[179.075 30 0],[180.46 80 0],[181.134 15 1],[181.171 500 2],[181.304 30 0],[181.574 40 0],[181.931 25 0],[182.3 120 0],[183.189 9 1],[184.875 50 0],[185.2 30 0],[186.032 200 0],[186.142 20 0],[186.552 20 0],[186.596 30 0],[187.329 15 0],[188.264 30 0],[188.605 80 0],[189.14 100 0],[189.729 20 0],[189.991 12 1],[190.93 50 0],[191.161 40 0],[191.352 20 0],[192.531 80 0],[192.677 20 0],[192.795 15 0],[192.89 40 0],[193.317 25 0],[194.186 500 2],[194.269 20 0],[195.215 150 0],[195.552 50 2],[196.021 15 0],[197.146 30 0],[197.76 50 0],[198.42 80 0],[199.188 15 0],[199.498 20 0],[200.805 25 0],[201.576 30 0],[202.698 30 0],[204.066 50 0],[204.09 20 0],[205.403 50 0],[205.831 70 0],[206.4 20 0],[206.858 80 0],[207.289 100 0],[207.308 100 0],[208.062 25 0],[209.158 30 0],[209.435 40 0],[209.639 200 0],[210.093 100 0],[211.393 100 0],[212.126 50 0],[214.073 25 0],[214.143 20 0],[214.846 15 0],[214.863 1 1],[214.873 40 0],[215.143 20 0],[215.154 30 1],[217.132 80 0],[219.449 150 0],[219.934 300 0],[220.965 400 0],[220.967 4 1],[221.105 40 0],[223.172 80 0],[224.605 400 0],[224.607 6 1],[225.117 60 0],[226.719 30 0],[226.891 400 0],[228.226 20 0],[228.668 200 0],[231.723 600 0],[233.48 300 0],[235.484 1000 0],[235.79 20 0],[236.034 3 1],[236.833 22 1],[238.072 60 0],[238.454 4 1],[240.815 100 0],[242.17 800 0],[242.949 1000 0],[243.352 1 1],[244.898 15 1],[245.524 60 0],[247.64 20 0],[248.339 300 0],[248.348 13 1],[248.699 10 1],[249.57 200 0],[252.261 5 1],[252.392 90 0],[253.117 80 0],[254.655 400 0],[255.801 40 0],[257.158 500 0],[259.442 200 0],[263.694 50 0],[266.124 200 0],[266.493 2 1],[270.651 700 0],[272.782 2 1],[276.178 20 0],[277.981 150 0],[278.503 80 0],[278.796 60 0],[281.259 60 0],[281.358 80 0],[282.552 2 1],[283.999 1400 0],[284.642 1 1],[285.062 200 0],[286.332 1000 0],[291.28 1 1],[291.354 200 0],[291.982 6 1],[299.1 3 1],[299.444 7 1],[300.914 700 0],[301.218 1 1],[302.394 8 1],[303.28 200 0],[303.412 850 0],[304.75 12 1],[309.469 6 1],[314.184 60 0],[317.505 550 0],[321.871 40 0],[326.234 550 0],[328.321 50 1],[333.062 110 0],[335.197 60 1],[340.748 2 1],[347.246 10 1],[353.757 7 1],[357.545 11 1],[358.239 3 1],[362.008 2 1],[362.054 6 1],[365.578 40 0],[371.523 6 1],[380.102 280 0],[384.144 4 1],[429.465 1 1],[452.474 40 0],[457.913 1 1],[458.029 1 1],[487.722 2 1],[494.431 3 1],[497.973 20 0],[507.114 2 1],[507.267 2 1],[517.454 20 0],[533.236 10 1],[556.195 20 1],[558.892 25 1],[559.62 2 1],[563.171 500 0],[575.359 15 0],[579.72 1 1],[579.918 15 1],[592.544 50 0],[597.03 100 0],[603.77 150 0],[605.486 200 -1],[606.9 250 0],[607.346 100 0],[607.748 6 1],[607.97 5 1],[614.971 400 0],[615.46 200 0],[617.15 150 0],[631.078 100 0],[635.435 40 0],[645.35 70 1],[676.145 8 1],[684.405 25 1],[719.14 20 1],[738.779 10 1],[739.86 20 0],[740.862 1 1],[768.53 30 0],[774.18 13 1],[775.497 100 0],[790.4 3 1],[803.05 100 0],[803.93 30 0],[811.409 200 0],[812.1 30 0],[834.935 30 0],[835.704 80 0],[842.272 300 0],[855.26 400 0],[868.17 50 0],[901.895 30 0],[941.086 50 0],[941.537 80 0],[961.64 150 0],[974.11 50 0],[974.28 100 0],[980.538 300 0],[985.052 500 0],[1045.647 25 0],[1080.758 11 0],[1089.4 54 0],[1119.185 70 0],[1127.766 56 0],[1133.697 17 0],[1145.459 200 0],[1161.626 200 0],[1167.077 76 0],[1169.445 25 0],[1173.978 258 0],[1182.518 96 0],[1183.582 106 0],[1193.299 254 0],[1200.95 48 0],[1231.324 111 0],[1233.56 33 0],[1253.087 42 0],[1253.65 42 0],[1278.82 37 0],[1288.85 89 0],[1298.17 187 0],[1300.03 20 0],[1301.85 187 0],[1308.15 68 0],[1346.02 378 0],[1360.82 144 0],[1501.82 13 0],[1546.42 30 0],[1700.05 20 0],[1780.75 10 0],[2062.2199 20 0],[2086.1699 40 0],[2168.6199 8 0],[2213.1699 4 0],[2299.7199 3 0],[2432.7199 4 0],[2473.8199 4 0]}{ALLx2000x1400x70x2000x1000x2000x200}{UVx2000x1400x60x2000x1000x2000x0}{VISx500x500x70x0x0x0x200}{IVx500x500x3x0x0x0x0}%[1.6 7 1], \pgfspectra@elt@search{#1}{Sb}{[69.118 10 2],[69.12 1 1],[69.869 10 2],[69.922 3 4],[72.286 15 2],[72.481 8 2],[73.233 15 2],[74.606 1 4],[76.443 1 1],[81.485 1 1],[83.1 6 4],[84.939 1 1],[85.508 2 1],[87.684 4 1],[89.802 1 4],[92.107 4 1],[98.357 6 1],[99.962 15 2],[100.113 6 1],[100.943 6 1],[101.194 40 2],[105.221 6 1],[105.627 8 1],[105.658 10 2],[105.732 8 1],[106.59 40 2],[106.993 20 2],[107.043 20 2],[107.376 5 2],[107.381 6 1],[107.582 30 2],[107.81 5 2],[108.406 20 2],[109.834 10 2],[110.432 8 4],[113.543 10 2],[115.149 30 2],[115.774 40 2],[116.696 12 2],[120.52 50 2],[121.064 50 2],[122.6 12 4],[123.03 6 1],[127.498 8 1],[130.669 20 2],[132.74 8 1],[135.804 6 1],[137.958 8 2],[138.47 8 1],[140.418 20 2],[140.783 6 1],[142.957 10 2],[143.076 10 0],[143.649 8 1],[146.419 10 0],[148.657 20 0],[149.136 40 0],[150.57 12 4],[151.257 50 0],[152.447 12 4],[153.274 120 0],[153.506 80 0],[156.551 6 1],[157.611 8 1],[158.136 7 1],[159.996 80 0],[160.698 10 1],[161.28 200 0],[162.33 100 0],[165.12 50 0],[165.704 20 1],[166.26 100 0],[167.389 15 2],[169.885 50 0],[171.023 3 2],[171.184 15 2],[171.693 80 0],[171.745 150 0],[172.343 150 0],[172.533 15 2],[173.619 100 0],[173.643 8 1],[175.779 50 0],[176.23 12 2],[176.576 100 0],[178.087 100 0],[178.824 100 0],[180.018 150 0],[181.05 50 0],[181.42 80 0],[182.95 100 0],[183.932 12 2],[185.889 60 0],[186.817 50 0],[187.115 300 0],[188.256 150 0],[189.128 70 0],[189.939 70 0],[192.708 100 0],[194.613 10 2],[195.039 200 0],[196.43 80 0],[198.605 60 0],[199.06 6 1],[202.4 50 0],[202.949 60 0],[203.977 70 0],[204.957 150 0],[205.41 3 2],[206.343 50 0],[206.833 1000 0],[207.956 100 0],[209.185 2 2],[209.841 50 0],[211.848 80 0],[212.7 5 2],[212.739 100 0],[213.705 50 0],[213.969 100 0],[214.18 10 1],[214.183 50 0],[214.486 100 0],[215.891 50 0],[217.581 1500 0],[217.919 250 0],[217.925 6 1],[220.132 200 0],[220.845 300 0],[220.85 6 1],[222.073 150 0],[222.198 100 0],[222.493 120 0],[222.515 6 1],[226.251 300 0],[228.898 120 0],[229.344 150 0],[230.646 300 0],[231.147 2500 0],[231.589 150 0],[237.367 400 0],[238.364 300 0],[239.522 100 0],[242.213 150 0],[242.635 250 0],[244.551 400 0],[247.832 400 0],[248.044 150 0],[248.046 8 1],[250.771 5 2],[251.054 100 0],[252.852 2000 0],[252.854 15 1],[256.775 10 1],[257.406 150 0],[259.013 15 2],[259.805 1500 0],[259.809 500 0],[261.231 300 0],[261.42 1 2],[261.717 12 2],[261.763 1 2],[265.26 200 0],[265.655 12 1],[266.939 20 2],[267.064 300 0],[268.276 200 0],[269.225 120 0],[271.89 150 0],[276.995 400 0],[278.587 5 2],[279.027 20 2],[285.109 12 1],[285.111 100 0],[287.792 1000 0],[296.61 12 1],[298.096 15 1],[302.983 500 0],[303.401 12 1],[304.067 12 1],[323.252 600 0],[324.128 20 1],[326.751 700 0],[333.661 20 2],[338.309 12 1],[338.315 100 0],[349.846 15 1],[350.407 50 2],[351.906 15 2],[352.047 12 1],[353.345 15 2],[355.918 40 2],[356.625 40 2],[363.78 25 1],[363.783 250 0],[372.278 20 1],[372.279 200 0],[373.89 30 2],[385.022 20 1],[403.355 200 0],[403.356 20 1],[413.363 20 1],[414.054 15 1],[419.517 15 1],[421.907 20 1],[426.509 40 2],[431.432 20 1],[434.483 12 1],[435.216 50 2],[441.142 12 1],[444.648 12 1],[450.692 12 1],[451.45 15 1],[459.189 30 2],[459.69 30 1],[459.909 20 1],[460.477 15 1],[464.732 30 1],[467.574 20 1],[469.291 30 2],[471.126 40 1],[473.544 12 1],[475.781 20 1],[476.536 20 1],[476.691 12 1],[478.403 30 1],[480.201 20 1],[483.282 20 1],[487.724 20 1],[494.74 15 1],[504.456 15 1],[516.632 12 1],[517.655 15 1],[523.894 20 1],[524.771 1 2],[535.424 20 1],[546.408 15 1],[549.032 30 0],[555.61 40 0],[556.813 15 1],[560.219 30 0],[563.202 100 0],[563.975 30 1],[569.08 1 2],[571.73 1 2],[583.034 60 0],[584.55 3 2],[589.509 15 1],[600.521 100 1],[605.341 20 1],[607.98 30 1],[613.004 50 1],[615.494 20 1],[624.67 5 2],[628.76 3 2],[630.276 12 1],[661.149 20 0],[664.744 30 1],[668.801 15 1],[680.667 6 1],[764.828 30 0],[784.444 80 0],[792.465 200 0],[796.955 40 0],[841.169 60 0],[857.264 150 0],[861.955 100 0],[868.27 30 0],[913.221 30 0],[951.868 400 0],[986.678 30 0],[994.914 400 0],[1007.849 200 0],[1026.101 300 0],[1036.433 50 0],[1048.83 50 0],[1058.56 200 0],[1067.741 1000 0],[1074.194 800 0],[1079.411 80 0],[1083.973 600 0],[1086.858 200 0],[1087.955 400 0],[1101.279 300 0],[1107.995 40 0],[1108.498 30 0],[1110.484 50 0],[1110.852 50 0],[1118.961 30 0],[1126.623 150 0],[1186.337 30 0],[1195.77 1 0],[1211.606 5 0],[1227.66 2 0],[1246.675 2 0]}{ALLx2500x2500x100x50x0x12x0}{UVx2500x2500x25x50x0x12x0}{VISx200x200x100x50x0x0x0}{IVx1000x1000x0x0x0x0x0}% \pgfspectra@elt@search{#1}{Te}{[79.96 3 1],[80.228 4 1],[94.262 3 1],[100.373 3 1],[100.78 3 1],[101.427 2.5 1],[102.279 2.5 1],[105.7 3 1],[105.951 4 1],[106.886 3 1],[107.766 4 1],[109.011 3 1],[114.404 3 1],[115.31 2.5 1],[116.142 5 1],[117.434 5 1],[117.579 6 1],[120.854 4.5 1],[121.3 2.5 1],[122.098 4.5 1],[125.362 4.5 1],[127.052 4.5 1],[127.476 3.5 1],[130.653 4 1],[132.492 5 1],[133.642 3.5 1],[134.52 3.5 1],[136.324 4.5 1],[136.673 4 1],[137.48 5 1],[139.522 3 1],[143.952 3 1],[146.525 3 1],[148.956 3.5 1],[160.799 4 1],[160.841 5 1],[161.315 5 1],[163.891 3 1],[165.54 2.5 0],[168.85 2.5 0],[170 3 0],[170.158 3 1],[170.8 2.5 0],[175.1 3 0],[175.94 2.5 0],[177.5 2.5 0],[179.57 3 0],[179.63 3 0],[182.24 5 0],[182.55 3 0],[185.06 3 0],[185.21 3 0],[185.38 3 0],[185.72 4 0],[186.04 3 0],[196.288 1.5 1],[199.483 3.5 0],[200.02 3 0],[200.202 13000 0],[207.09 4 0],[208.116 3250 0],[214.281 9000 0],[214.725 1600 0],[215.985 180 0],[220.874 4.5 0],[225.549 5 0],[225.902 250 0],[226.552 5 0],[237.306 10 1],[238.326 600 0],[238.578 750 0],[238.782 10 1],[240.163 5 1],[243.647 5 1],[243.869 25 1],[253.072 60 0],[256.782 10 1],[257.496 5 1],[257.61 2.5 1],[257.924 3.5 1],[259.112 5 1],[259.285 5 1],[260.572 5 1],[262.192 2.5 1],[262.486 5 1],[262.796 10 1],[264.189 10 1],[264.848 10 1],[264.966 50 1],[265.77 20 1],[266.11 40 1],[267.713 55 0],[271.158 10 1],[276.965 3 0],[284.117 5 1],[284.615 5 1],[285.829 50 1],[286.1 10 1],[286.882 20 1],[289.541 75 1],[291.989 15 1],[294.211 25 1],[294.668 25 1],[296.729 35 1],[297.367 10 1],[297.59 25 1],[299.704 7.5 1],[301.202 7.5 1],[301.758 25 1],[302.331 10 1],[304.7 35 1],[305.246 10 1],[306.316 5 1],[307.356 7.5 1],[310.444 4 1],[313.258 5 1],[316.066 10 1],[317.514 50 0],[318.983 5 1],[321.121 2.5 1],[325.68 30 1],[326.877 15 1],[328.263 15 1],[332.192 20 1],[332.311 20 1],[332.922 30 1],[335.21 30 1],[336.279 30 1],[337.41 12.5 1],[340.679 75 1],[341.963 10 1],[344.225 25 1],[345.512 20 1],[345.688 10 1],[348.032 10 1],[348.367 20 1],[348.611 10 1],[352.111 25 1],[355.219 25 1],[361.178 50 1],[361.757 25 1],[364.446 20 1],[367.926 10 1],[372.566 15 1],[379.722 20 1],[380.092 10 1],[390.567 10 1],[391.854 10 1],[393.149 15 1],[394.798 10 1],[396.922 20 1],[397.594 12.5 1],[398.177 10 1],[400.652 25 1],[401.169 10 1],[402.973 15 1],[404.717 20 1],[404.888 15 1],[407.348 7.5 1],[410.104 15 1],[412.732 35 1],[416.355 15 1],[416.977 50 1],[417.929 15 1],[421.131 12.5 1],[422.573 40 1],[424.647 15 1],[425.115 10 1],[426.111 50 1],[426.436 15 1],[427.343 30 1],[428.585 40 1],[432.09 20 1],[436.128 15 1],[436.4 75 1],[437.712 15 1],[438.51 37.5 1],[439.6 30 1],[447.863 85 1],[453.707 40 1],[455.778 50 1],[463.062 35 1],[464.112 50 1],[465.437 90 1],[468.691 100 1],[469.638 50 1],[470.653 50 1],[476.605 50 1],[477.156 35 1],[478.487 50 1],[482.714 50 1],[483.128 75 1],[484.29 75 1],[486.512 65 1],[486.624 100 1],[488.522 40 1],[490.444 40 1],[496.188 30 1],[500.082 30 1],[508.3 4 0],[514.87 3.5 0],[544.984 25 1],[548.795 25 1],[557.635 75 1],[564.926 75 1],[566.62 50 1],[570.812 100 1],[573.35 3.5 0],[575.585 75 1],[578.91 4 0],[593.615 25 1],[597.468 50 1],[627.35 4 0],[634.97 4 0],[636.713 25 1],[640.59 4 0],[645.67 3.5 0],[661.34 4 0],[664.858 5 1],[666.02 4 0],[669 4 0],[679 5 0],[683.76 10 0],[685.47 10 0],[701.606 5 1],[703.913 5 1],[719.11 7.5 0],[723.662 5 1],[726.35 10 0],[728.09 4 0],[728.926 5 1],[744.539 5 1],[746.098 6 1],[746.875 7.5 1],[748.126 5 1],[755.68 5 0],[768.861 3 1],[775.91 7.5 0],[781.879 4 1],[786.161 4 1],[792.169 7.5 1],[794.314 7.5 1],[795.034 5 1],[797.29 10 0],[805.615 3 1],[806.14 15 0],[808.25 5 0],[812.244 5 1],[813.039 4 1],[815.447 4 1],[818.644 10 1],[819.094 3 1],[825.15 5 0],[827.353 7.5 1],[827.66 5 0],[829.11 5 0],[835.58 7.5 0],[837.212 5 1],[846.98 3.5 0],[849.22 4 0],[850.08 4 0],[852.14 6 0],[853.568 5 1],[857.578 6 1],[860.463 5 1],[862.168 4 1],[863.21 3.5 0],[867.295 7.5 1],[870.109 6 0],[873.381 5 1],[875.818 102.5 0],[883.152 6 0],[885.115 9 0],[889.792 3 1],[900.437 40.5 0],[904.339 9 0],[919.68 6 0],[920.678 7.5 0],[920.764 8.5 0],[946.9 6 0],[972.274 2830 0],[978.554 92.5 0],[984.23 54.5 0],[986.892 266 0],[990.261 59 0],[995.63 344.5 0],[995.993 18.5 0],[997.713 162.5 0],[997.931 68 0],[998.585 22.5 0],[1005.141 2975 0],[1009.101 2048.5 0],[1009.957 52 0],[1010.605 139.5 0],[1011.808 190.5 0],[1015.106 148 0],[1030.056 198.5 0],[1032.305 102.5 0],[1049.357 372.5 0],[1050.986 98.5 0],[1091.834 940 0],[1100.78 149 0],[1108.956 5100 0],[1116.374 254 0],[1148.723 3310 0],[1197.896 140 0],[1256.624 94 0],[1258.919 194.5 0],[1280.55 80.5 0],[1310.418 200 0],[1324.775 790 0],[1331.663 241.5 0],[1403.709 108.5 0],[1407.253 72 0],[1433.574 217 0],[1441.746 110 0],[1451.351 525 0],[1455.468 64.5 0],[1545.245 740 0],[1554.623 1215 0],[1640.39 1880 0],[1730.3539 980 0],[1829.159 1390 0],[1877.7301 197 0],[1962.352 134.5 0],[2014.7539 119.5 0],[2104.373 510 0],[2160.25 232 0],[2179.9641 18.5 0],[2255.5289 37 0],[2275.566 24 0],[2329.4939 13.5 0],[2397.8699 8.5 0],[2405.9039 12.5 0],[2642.8619 6.5 0],[2653.917 19 0],[2655.374 7.5 0],[2717.926 3.5 0]}{ALLx13000x13000x100x0x0x0x0}{UVx13000x13000x75x0x0x0x0}{VISx100x10x100x0x0x0x0}{IVx5100x5100x10x0x0x0x0}% -\pgfspectra@elt@search{#1}{I}{[36.378 3 4],[38.074 3.6 4],[56.553 4.5 4],[60.186 0.5 3],[60.757 5 4],[61.246 0.6 3],[61.517 0.4 3],[65.422 0.4 3],[65.456 0.4 3],[65.58 0.2 1],[65.9 0.6 1],[66.398 0.8 1],[66.452 0.8 1],[66.506 0.8 1],[66.57 15 1],[66.681 0.6 2],[70.511 0.8 2],[71.955 100 1],[72.298 100 1],[78.464 0.7 2],[78.48 0.7 2],[79.552 0.8 2],[79.816 100 1],[83.41 120 1],[84.78 60 1],[86.597 0.5 2],[87.349 150 1],[87.594 100 1],[87.984 200 1],[88.188 150 1],[89.1 100 1],[89.317 100 1],[91.928 0.7 3],[92.038 0.5 2],[96.117 0.6 2],[100.057 120 1],[100.335 100 1],[101.858 400 1],[103.466 1000 1],[105.474 150 1],[106.634 200 1],[107.521 300 1],[107.858 0.6 2],[109.42 0.8 2],[110.5 500 1],[111.116 250 1],[111.722 150 1],[112.525 350 1],[113.15 200 1],[113.975 120 1],[113.98 1000 1],[115.467 150 1],[115.987 100 1],[116.056 1000 1],[116.648 2000 1],[116.705 150 1],[117.584 500 1],[117.865 1000 1],[118.734 1500 1],[119.085 1000 1],[119.529 1.5 0],[119.888 500 1],[120.022 700 1],[121.841 20 0],[122.089 2000 1],[122.405 60 0],[122.408 60 0],[122.889 50 0],[123.406 2000 1],[124.466 0.4 2],[125.134 60 0],[125.235 0.8 2],[125.915 250 0],[125.951 300 0],[126.127 80 0],[126.757 60 0],[126.76 60 0],[127.526 150 0],[128.94 300 0],[130.034 1000 0],[130.298 300 0],[130.693 0.5 2],[131.395 300 0],[131.754 300 0],[133.019 200 0],[133.652 2000 1],[135.51 500 0],[135.797 300 0],[136.097 500 0],[136.111 300 0],[136.771 250 0],[136.822 250 0],[138.323 400 0],[139.075 300 0],[139.29 200 0],[140.001 200 0],[142.549 800 0],[144.626 500 0],[145.318 500 0],[145.739 500 0],[145.747 500 0],[145.798 1000 0],[145.879 250 0],[145.915 400 0],[146.583 250 0],[148.592 100 0],[149.289 500 0],[150.704 500 0],[151.468 500 0],[151.805 1500 0],[152.645 250 0],[159.358 500 0],[161.76 500 0],[164.078 250 0],[170.207 1500 0],[178.276 1200 0],[179.909 500 0],[183.038 7500 0],[184.445 1500 0],[206.163 200 0],[222.443 0.1 2],[223.812 0.1 2],[224.93 0.5 3],[224.931 0.3 2],[230.938 0.2 2],[234.084 0.4 3],[234.085 0.3 2],[235.043 0.3 2],[235.346 0.2 2],[236.113 0.7 3],[236.774 0.4 2],[236.775 0.5 3],[237.145 0.2 2],[237.245 0.3 2],[237.245 0.6 3],[237.646 0.7 3],[237.647 0.4 2],[238.528 0.4 3],[238.711 0.8 3],[238.712 0.4 2],[239.2 0.6 3],[239.201 0.3 2],[240.305 0.4 3],[240.306 0.2 2],[240.363 0.2 2],[240.801 10 1],[241.485 0.2 2],[241.845 0.2 3],[241.849 0.2 2],[241.885 0.2 2],[241.918 10 1],[242.389 0.3 3],[242.391 0.2 2],[242.61 0.9 3],[242.612 0.5 2],[243.485 0.6 3],[243.488 0.3 2],[246.25 0.2 2],[246.668 0.3 3],[246.669 0.3 2],[246.696 0.3 3],[246.699 0.3 2],[247.535 0.8 3],[247.536 0.6 2],[248.551 0.4 3],[248.924 0.5 3],[248.927 0.4 2],[249.32 0.4 3],[249.321 0.2 2],[249.427 0.2 2],[249.474 10 1],[249.516 0.3 2],[249.607 0.2 2],[250.138 0.2 3],[250.141 0.3 2],[251.374 0.3 3],[251.682 0.2 2],[251.974 0.8 3],[251.975 0.6 2],[252.172 0.4 2],[252.172 0.6 3],[253.198 0.4 3],[253.199 0.3 2],[253.36 10 1],[253.427 20 1],[253.754 0.5 3],[253.756 0.2 2],[254.567 0.8 3],[254.571 0.7 2],[256.624 100 1],[258.279 200 1],[259.346 30 1],[264.077 0.4 2],[264.077 0.4 3],[264.211 0.4 2],[264.211 0.5 3],[265.223 0.8 3],[265.225 0.6 2],[268.898 20 1],[273.012 50 1],[276.515 2 1],[280.859 20 1],[281.845 0.3 3],[281.848 0.2 2],[283.944 0.2 2],[286.467 0.4 2],[286.468 0.6 3],[287.863 150 1],[288.515 0.4 2],[291.097 0.4 3],[291.098 0.3 2],[291.733 0.5 3],[291.735 0.3 2],[293.111 0.2 2],[299.387 100 1],[300.568 0.2 2],[306.917 0.4 3],[306.923 0.3 2],[307.875 500 1],[315.388 0.3 2],[316.103 20 1],[317.011 0.4 3],[317.014 0.3 2],[317.507 100 1],[318.164 0.4 3],[318.166 0.3 2],[321.012 0.4 3],[321.014 0.3 2],[321.348 0.6 3],[321.349 0.4 2],[322.49 0.6 3],[322.493 0.4 2],[330.047 0.2 2],[335.553 30 1],[342.499 25 1],[347.953 0.2 2],[349.741 30 1],[352.69 50 1],[354.69 0.4 3],[354.692 0.3 2],[361.381 0.3 2],[374.214 20 1],[375.44 0.2 2],[375.455 0.2 2],[396.316 0.3 2],[407.714 0.3 2],[410.223 20 0],[412.921 20 0],[413.415 10 0],[432.184 50 0],[445.286 30 1],[459.977 20 1],[463.245 30 1],[466.648 50 1],[467.553 100 1],[476.331 25 0],[486.232 100 0],[491.694 20 0],[498.692 100 1],[506.537 40 1],[511.929 1000 0],[514.973 20 1],[516.12 300 1],[517.619 30 1],[521.627 60 1],[522.897 50 1],[523.457 100 0],[524.571 300 1],[526.936 50 1],[529.978 40 1],[532.28 40 1],[533.822 1000 1],[534.515 500 1],[536.986 100 1],[540.542 80 1],[540.736 80 1],[542.706 60 0],[543.583 300 1],[543.8 100 1],[546.462 200 1],[549.15 80 1],[549.694 100 1],[550.472 100 1],[552.206 60 1],[559.852 60 1],[560.032 100 1],[561.289 150 1],[562.569 1000 1],[567.808 100 1],[569.091 200 1],[570.205 50 1],[571.053 400 1],[573.827 100 1],[576.072 100 1],[576.433 100 0],[577.483 50 1],[578.702 50 1],[589.403 200 0],[595.025 500 1],[598.486 30 0],[602.408 200 0],[606.893 50 1],[607.498 200 1],[608.243 100 0],[612.749 200 1],[619.188 80 0],[620.486 100 1],[621.31 50 0],[624.448 80 0],[625.749 90 1],[629.398 100 0],[631.313 50 0],[633.037 80 0],[633.35 40 0],[633.785 200 0],[633.944 100 0],[635.916 50 0],[656.649 100 0],[658.375 200 0],[658.527 100 0],[661.966 500 0],[666.111 50 0],[666.596 60 1],[669.729 50 0],[671.883 30 1],[673.203 40 0],[681.257 400 1],[695.878 100 1],[698.978 50 0],[708.521 20 1],[712.005 50 0],[712.205 120 0],[714.206 200 0],[716.479 100 0],[719.166 40 0],[722.73 70 0],[723.678 100 0],[723.784 50 0],[735.135 50 1],[740.206 500 0],[741.05 100 0],[741.648 50 0],[746.899 500 0],[749.052 50 0],[755.418 200 0],[755.665 50 0],[770.02 200 0],[779.898 50 1],[789.798 60 0],[796.948 50 0],[800.363 100 0],[804.374 9900 0],[806.57 30 0],[809.076 100 0],[816.938 80 0],[822.257 50 0],[824.005 400 0],[839.33 1000 0],[841.46 15 1],[848.611 100 0],[866.495 150 0],[870.08 50 0],[874.822 25 0],[885.324 100 0],[885.38 200 0],[885.75 300 0],[889.85 100 0],[896.469 40 0],[899.313 40 0],[902.24 500 0],[905.833 1500 0],[909.886 100 0],[911.391 1200 0],[912.803 60 0],[919.53 3 1],[922.774 60 0],[933.505 100 0],[942.671 400 0],[942.715 300 0],[948.033 1 1],[959.822 200 0],[964.961 200 0],[965.306 300 0],[973.173 500 0],[1000.305 50 0],[1013.116 75 0],[1023.882 100 0],[1037.52 40 0],[1039.174 40 0],[1040.549 0.6 1],[1046.654 500 0],[1108.468 0.1 1],[1123.656 40 0],[1155.846 35 0],[1177.834 32 0],[1199.686 45 0],[1203.369 30 0],[1230.458 15 0],[1314.916 6 0],[1395.827 14 0],[1428.702 20 0],[1446 10 0],[1503.257 22.5 0],[1552.865 10.5 0],[1603.733 15 0],[1827.5711 1.5 0],[1834.852 2 0],[1898.241 1.5 0],[1907.017 3.5 0],[1910.5119 11 0],[1937.002 5 0],[2064.8689 1 0],[2218.3029 22 0],[2222.6529 15 0],[2230.9211 3 0],[2442.082 3.2 0],[2736.542 1.2 0],[2757.3051 0.9 0],[3036.193 1 0],[3038.3881 0.8 0],[3429.573 1 0],[3451.3109 0.9 0],[4022.8539 0.3 0],[4163.3801 0.2 0]}{ALLx9900x9900x2000x0.8x0.9x5x0}{UVx7500x7500x2000x0.8x0.9x5x0}{VISx1000x1000x1000x0.3x0x0x0}{IVx9900x9900x15x0x0x0x0}% +\pgfspectra@elt@search{#1}{I}{[36.378 3 4],[38.074 3.6 4],[56.553 4.5 4],[60.186 0.5 3],[60.757 5 4],[61.246 0.6 3],[61.517 0.4 3],[65.422 0.4 3],[65.456 0.4 3],[65.58 0.2 1],[65.9 0.6 1],[66.398 0.8 1],[66.452 0.8 1],[66.506 0.8 1],[66.57 15 1],[66.681 0.6 2],[70.511 0.8 2],[71.955 100 1],[72.298 100 1],[78.464 0.7 2],[78.48 0.7 2],[79.552 0.8 2],[79.816 100 1],[83.41 120 1],[84.78 60 1],[86.597 0.5 2],[87.349 150 1],[87.594 100 1],[87.984 200 1],[88.188 150 1],[89.1 100 1],[89.317 100 1],[91.928 0.7 3],[92.038 0.5 2],[96.117 0.6 2],[100.057 120 1],[100.335 100 1],[101.858 400 1],[103.466 1000 1],[105.474 150 1],[106.634 200 1],[107.521 300 1],[107.858 0.6 2],[109.42 0.8 2],[110.5 500 1],[111.116 250 1],[111.722 150 1],[112.525 350 1],[113.15 200 1],[113.975 120 1],[113.98 1000 1],[115.467 150 1],[115.987 100 1],[116.056 1000 1],[116.648 2000 1],[116.705 150 1],[117.584 500 1],[117.865 1000 1],[118.734 1500 1],[119.085 1000 1],[119.529 1.5 0],[119.888 500 1],[120.022 700 1],[121.841 20 0],[122.089 2000 1],[122.405 60 0],[122.408 60 0],[122.889 50 0],[123.406 2000 1],[124.466 0.4 2],[125.134 60 0],[125.235 0.8 2],[125.915 250 0],[125.951 300 0],[126.127 80 0],[126.757 60 0],[126.76 60 0],[127.526 150 0],[128.94 300 0],[130.034 1000 0],[130.298 300 0],[130.693 0.5 2],[131.395 300 0],[131.754 300 0],[133.019 200 0],[133.652 2000 1],[135.51 500 0],[135.797 300 0],[136.097 500 0],[136.111 300 0],[136.771 250 0],[136.822 250 0],[138.323 400 0],[139.075 300 0],[139.29 200 0],[140.001 200 0],[142.549 800 0],[144.626 500 0],[145.318 500 0],[145.739 500 0],[145.747 500 0],[145.798 1000 0],[145.879 250 0],[145.915 400 0],[146.583 250 0],[148.592 100 0],[149.289 500 0],[150.704 500 0],[151.468 500 0],[151.805 1500 0],[152.645 250 0],[159.358 500 0],[161.76 500 0],[164.078 250 0],[170.207 1500 0],[178.276 1200 0],[179.909 500 0],[183.038 7500 0],[184.445 1500 0],[206.163 200 0],[222.443 0.1 2],[223.812 0.1 2],[224.93 0.5 3],[224.931 0.3 2],[230.938 0.2 2],[234.084 0.4 3],[234.085 0.3 2],[235.043 0.3 2],[235.346 0.2 2],[236.113 0.7 3],[236.774 0.4 2],[236.775 0.5 3],[237.145 0.2 2],[237.245 0.3 2],[237.245 0.6 3],[237.646 0.7 3],[237.647 0.4 2],[238.528 0.4 3],[238.711 0.8 3],[238.712 0.4 2],[239.2 0.6 3],[239.201 0.3 2],[240.305 0.4 3],[240.306 0.2 2],[240.363 0.2 2],[240.801 10 1],[241.485 0.2 2],[241.845 0.2 3],[241.849 0.2 2],[241.885 0.2 2],[241.918 10 1],[242.389 0.3 3],[242.391 0.2 2],[242.61 0.9 3],[242.612 0.5 2],[243.485 0.6 3],[243.488 0.3 2],[246.25 0.2 2],[246.668 0.3 3],[246.669 0.3 2],[246.696 0.3 3],[246.699 0.3 2],[247.535 0.8 3],[247.536 0.6 2],[248.551 0.4 3],[248.924 0.5 3],[248.927 0.4 2],[249.32 0.4 3],[249.321 0.2 2],[249.427 0.2 2],[249.474 10 1],[249.516 0.3 2],[249.607 0.2 2],[250.138 0.2 3],[250.141 0.3 2],[251.374 0.3 3],[251.682 0.2 2],[251.974 0.8 3],[251.975 0.6 2],[252.172 0.4 2],[252.172 0.6 3],[253.198 0.4 3],[253.199 0.3 2],[253.36 10 1],[253.427 20 1],[253.754 0.5 3],[253.756 0.2 2],[254.567 0.8 3],[254.571 0.7 2],[256.624 100 1],[258.279 200 1],[259.346 30 1],[264.077 0.4 2],[264.077 0.4 3],[264.211 0.4 2],[264.211 0.5 3],[265.223 0.8 3],[265.225 0.6 2],[268.898 20 1],[273.012 50 1],[276.515 2 1],[280.859 20 1],[281.845 0.3 3],[281.848 0.2 2],[283.944 0.2 2],[286.467 0.4 2],[286.468 0.6 3],[287.863 150 1],[288.515 0.4 2],[291.097 0.4 3],[291.098 0.3 2],[291.733 0.5 3],[291.735 0.3 2],[293.111 0.2 2],[299.387 100 1],[300.568 0.2 2],[306.917 0.4 3],[306.923 0.3 2],[307.875 500 1],[315.388 0.3 2],[316.103 20 1],[317.011 0.4 3],[317.014 0.3 2],[317.507 100 1],[318.164 0.4 3],[318.166 0.3 2],[321.012 0.4 3],[321.014 0.3 2],[321.348 0.6 3],[321.349 0.4 2],[322.49 0.6 3],[322.493 0.4 2],[330.047 0.2 2],[335.553 30 1],[342.499 25 1],[347.953 0.2 2],[349.741 30 1],[352.69 50 1],[354.69 0.4 3],[354.692 0.3 2],[361.381 0.3 2],[374.214 20 1],[375.44 0.2 2],[375.455 0.2 2],[396.316 0.3 2],[407.714 0.3 2],[410.223 20 0],[412.921 20 0],[413.415 10 0],[432.184 50 0],[445.286 30 1],[459.977 20 1],[463.245 30 1],[466.648 50 1],[467.553 100 1],[476.331 25 0],[486.232 100 0],[491.694 20 0],[498.692 100 1],[506.537 40 1],[511.929 1000 0],[514.973 20 1],[516.12 300 1],[517.619 30 1],[521.627 60 1],[522.897 50 1],[523.457 100 0],[524.571 300 1],[526.936 50 1],[529.978 40 1],[532.28 40 1],[533.822 1000 1],[534.515 500 1],[536.986 100 1],[540.542 80 1],[540.736 80 1],[542.706 60 0],[543.583 300 1],[543.8 100 1],[546.462 200 1],[549.15 80 1],[549.694 100 1],[550.472 100 1],[552.206 60 1],[559.852 60 1],[560.032 100 1],[561.289 150 1],[562.569 1000 1],[567.808 100 1],[569.091 200 1],[570.205 50 1],[571.053 400 1],[573.827 100 1],[576.072 100 1],[576.433 100 0],[577.483 50 1],[578.702 50 1],[589.403 200 0],[595.025 500 1],[598.486 30 0],[602.408 200 0],[606.893 50 1],[607.498 200 1],[608.243 100 0],[612.749 200 1],[619.188 80 0],[620.486 100 1],[621.31 50 0],[624.448 80 0],[625.749 90 1],[629.398 100 0],[631.313 50 0],[633.037 80 0],[633.35 40 0],[633.785 200 0],[633.944 100 0],[635.916 50 0],[656.649 100 0],[658.375 200 0],[658.527 100 0],[661.966 500 0],[666.111 50 0],[666.596 60 1],[669.729 50 0],[671.883 30 1],[673.203 40 0],[681.257 400 1],[695.878 100 1],[698.978 50 0],[708.521 20 1],[712.005 50 0],[712.205 120 0],[714.206 200 0],[716.479 100 0],[719.166 40 0],[722.73 70 0],[723.678 100 0],[723.784 50 0],[735.135 50 1],[740.206 500 0],[741.05 100 0],[741.648 50 0],[746.899 500 0],[749.052 50 0],[755.418 200 0],[755.665 50 0],[770.02 200 0],[779.898 50 1],[789.798 60 0],[796.948 50 0],[800.363 100 0],[804.374 9900 0],[806.57 30 0],[809.076 100 0],[816.938 80 0],[822.257 50 0],[824.005 400 0],[839.33 1000 0],[841.46 15 1],[848.611 100 0],[866.495 150 0],[870.08 50 0],[874.822 25 0],[885.324 100 0],[885.38 200 0],[885.75 300 0],[889.85 100 0],[896.469 40 0],[899.313 40 0],[902.24 500 0],[905.833 1500 0],[909.886 100 0],[911.391 1200 0],[912.803 60 0],[919.53 3 1],[922.774 60 0],[933.505 100 0],[942.671 400 0],[942.715 300 0],[948.033 1 1],[959.822 200 0],[964.961 200 0],[965.306 300 0],[973.173 500 0],[1000.305 50 0],[1013.116 75 0],[1023.882 100 0],[1037.52 40 0],[1039.174 40 0],[1040.549 0.6 1],[1046.654 500 0],[1108.468 0.1 1],[1123.656 40 0],[1155.846 35 0],[1177.834 32 0],[1199.686 45 0],[1203.369 30 0],[1230.458 15 0],[1314.916 6 0],[1395.827 14 0],[1428.702 20 0],[1446 10 0],[1503.257 22.5 0],[1552.865 10.5 0],[1603.733 15 0],[1827.5711 1.5 0],[1834.852 2 0],[1898.241 1.5 0],[1907.017 3.5 0],[1910.5119 11 0],[1937.002 5 0],[2064.8689 1 0],[2218.3029 22 0],[2222.6529 15 0],[2230.9211 3 0],[2442.082 3.2 0],[2736.542 1.2 0],[2757.3051 0.9 0],[3036.193 1 0],[3038.3881 0.8 0],[3429.573 1 0],[3451.3109 0.9 0]}{ALLx9900x9900x2000x0.8x0.9x5x0}{UVx7500x7500x2000x0.8x0.9x5x0}{VISx1000x1000x1000x0.3x0x0x0}{IVx9900x9900x15x0x0x0x0}%,[4022.8539 0.3 0],[4163.3801 0.2 0] \pgfspectra@elt@search{#1}{Xe}{[65.78 8 2],[66.01 8 2],[67.38 9 2],[67.4 9 2],[67.66 9 2],[69.4 10 2],[69.85 20 2],[70.51 12 2],[72.12 10 2],[73.1 15 2],[73.33 10 2],[74.041 350 1],[74.26 15 2],[75.6 10 2],[76.15 10 2],[76.91 10 2],[77.91 25 2],[79.29 15 2],[79.61 12 2],[80.2 15 2],[80.307 350 1],[82.32 25 2],[82.49 30 2],[85.3 25 2],[88.08 600 1],[88.554 350 1],[88.93 15 2],[89.4 20 2],[89.6 20 2],[92.587 600 1],[93.54 250 1],[96.55 10 2],[97.277 800 1],[97.668 700 1],[100.34 35 2],[101.77 35 2],[103.244 500 1],[103.768 700 1],[104.131 1100 1],[104.78 10 2],[104.827 1000 1],[105.192 1200 1],[106.64 12 2],[107.448 2000 1],[108.386 600 1],[110.043 1200 1],[113.03 30 2],[115.847 600 1],[116.963 250 1],[118.305 800 1],[119.204 250 0],[123.21 25 2],[124.476 600 1],[125.02 250 0],[129.559 1000 0],[146.961 600 0],[266.898 80 2],[271.733 100 2],[281.445 30 2],[281.591 40 2],[282.745 30 2],[284.765 40 2],[286.24 30 2],[286.473 200 1],[287.11 80 2],[287.124 60 2],[287.17 30 2],[289.522 150 1],[289.662 30 2],[290.66 50 2],[291.189 40 2],[291.236 80 2],[294.02 40 2],[294.52 60 2],[294.75 40 2],[294.81 40 2],[297.047 80 2],[297.932 400 1],[299.287 40 2],[300.425 30 2],[301.743 100 1],[302.381 100 2],[308.35 40 2],[309.11 50 2],[310.646 30 2],[312.887 300 1],[313.83 100 2],[315.082 80 2],[318.52 40 2],[324.286 100 2],[326.898 80 2],[328.782 30 2],[330.155 80 2],[333.16 40 2],[335.8 30 2],[336.672 200 1],[338.412 80 2],[340.007 2 0],[341.837 2 0],[342 2 0],[344.266 3 0],[344.42 60 2],[345.42 70 2],[345.87 100 2],[346.126 100 1],[346.822 40 2],[346.981 4 0],[347.236 4 0],[350.674 5 0],[352.283 80 2],[354.23 50 2],[354.986 10 0],[355.21 50 2],[355.404 10 0],[356.14 40 2],[357.97 100 2],[358.36 80 2],[359.54 100 2],[360.606 100 2],[360.7 40 2],[361.032 15 0],[361.306 8 0],[361.59 100 2],[362.31 40 2],[362.408 600 2],[363.306 6 0],[366.991 10 0],[367.667 50 2],[368.59 40 0],[369.349 40 0],[377.63 40 2],[378.102 300 2],[384.15 100 2],[387.78 200 2],[388.05 60 2],[390.791 100 1],[392.255 500 2],[395.059 300 2],[403.759 100 1],[405.007 200 2],[405.746 200 1],[406.04 60 2],[409.889 100 1],[410.91 100 2],[414.57 100 2],[415.804 200 1],[418.01 1000 1],[419.315 500 1],[420.848 300 1],[420.947 100 1],[421.372 300 1],[421.56 100 1],[422.3 300 1],[423.825 400 1],[424.538 500 1],[425.157 100 1],[428.59 30 2],[429.64 500 1],[431.051 500 1],[433.052 1000 1],[436.92 200 1],[437.378 100 1],[439.32 500 1],[439.577 500 1],[440.688 200 1],[441.607 150 1],[443.42 50 2],[444.813 500 1],[446.21 100 2],[446.219 1000 1],[448.086 500 1],[452.186 100 1],[456.91 100 2],[457.01 100 2],[464.14 100 2],[467.37 30 2],[468.357 60 2],[472.36 30 2],[473.4152 600 0],[475.73 100 2],[479.2619 150 0],[480.702 500 0],[482.971 400 0],[484.329 300 0],[486.95 40 2],[491.651 500 0],[492.3152 500 0],[497.171 200 1],[497.271 400 1],[498.877 300 1],[499.117 100 1],[502.828 200 0],[504.492 200 1],[508.062 1000 1],[512.242 300 1],[512.57 100 1],[517.882 100 1],[518.804 300 1],[519.137 400 1],[519.21 100 1],[523.9 60 2],[526.044 500 1],[526.195 500 1],[529.222 2000 1],[530.927 300 1],[531.387 1000 1],[533.933 2000 1],[536.32 200 1],[536.71 30 2],[536.807 200 1],[537.239 500 1],[539.28 100 0],[540.1 50 2],[541.915 3000 1],[543.896 800 1],[544.545 300 1],[545.045 200 1],[546.039 400 1],[547.261 1000 1],[549.486 100 1],[552.44 40 2],[552.553 200 1],[553.107 600 1],[556.662 100 0],[561.667 300 1],[565.938 300 1],[566.756 600 1],[567.091 150 1],[569.575 100 0],[569.961 200 1],[571.61 200 1],[572.691 500 1],[575.103 500 1],[575.865 300 1],[577.639 300 1],[581.596 100 1],[582.389 300 0],[582.48 150 0],[587.502 100 0],[589.329 300 1],[589.499 100 0],[590.513 200 1],[593.417 100 0],[594.553 500 1],[597.113 300 1],[597.646 2000 1],[600.892 200 1],[603.62 1000 1],[605.115 2000 1],[609.35 600 1],[609.759 1500 1],[610.143 400 1],[611.508 100 1],[614.645 100 1],[617.83 150 0],[617.966 120 0],[618.242 300 0],[619.407 500 1],[619.826 100 0],[620.597 60 2],[622.002 100 1],[622.17 25 2],[623.82 60 2],[625.905 60 2],[627.082 500 1],[627.754 400 1],[628.441 100 1],[628.601 100 0],[630.086 250 1],[631.806 500 0],[634.396 400 1],[635.635 600 1],[637.528 200 1],[639.799 100 1],[646.97 300 0],[647.284 150 0],[648.776 120 0],[649.872 100 0],[650.418 200 0],[651.283 300 1],[652.865 200 1],[653.316 100 0],[659.501 1000 1],[659.556 100 0],[659.725 400 1],[659.884 100 1],[666.892 150 0],[669.432 300 1],[672.801 200 0],[678.871 150 1],[679.037 100 1],[680.574 1000 1],[682.732 200 0],[687.211 100 0],[688.216 300 0],[691.022 80 1],[692.553 100 0],[694.211 800 1],[697.618 100 0],[699.088 2000 1],[708.215 150 1],[711.96 500 0],[714.75 50 1],[714.903 200 1],[716.483 500 1],[728.434 100 1],[730.18 200 1],[733.93 200 1],[738.6 100 0],[739.379 150 0],[754.845 300 1],[758.468 200 0],[761.857 80 1],[764.202 500 0],[764.391 100 0],[767.066 200 1],[778.704 60 1],[780.265 100 0],[788.132 100 0],[788.74 300 0],[796.734 500 0],[802.967 100 0],[805.726 200 0],[806.134 150 0],[810.198 100 0],[815.18 150 1],[817.102 100 0],[820.634 700 0],[823.1635 10000 0],[826.652 500 0],[828.0116 7000 0],[834.682 2000 0],[834.724 100 1],[840.919 2000 0],[851.519 50 1],[857.601 200 0],[860.423 50 1],[864.854 250 0],[869.22 100 0],[869.686 200 0],[871.619 50 1],[873.939 300 0],[875.82 100 0],[881.941 5000 0],[886.232 300 0],[890.873 200 0],[893.083 200 0],[895.225 1000 0],[898.105 100 0],[898.757 200 0],[904.545 400 0],[916.265 500 0],[916.752 100 0],[937.476 100 0],[951.338 200 0],[959.135 50 1],[968.532 150 0],[969.868 50 1],[971.816 100 0],[979.97 2000 0],[992.319 3000 0],[1083.837 100 0],[1174.201 90 0],[1223.524 375 0],[1225.776 100 0],[1259.02 300 0],[1262.3391 2500 0],[1354.415 250 0],[1365.7055 2000 0],[1414.2444 1250 0],[1424.096 800 0],[1436.499 375 0],[1466.081 140 0],[1473.2806 3000 0],[1509.972 100 0],[1541.8394 2500 0],[1555.713 150 0],[1597.954 250 0],[1603.99 100 0],[1605.328 1000 0],[1655.449 125 0],[1672.815 1500 0],[1732.577 1500 0],[1878.8131 350 0],[2018.7189 150 0],[2026.2242 3000 0],[2147.009 250 0],[2319.333 1250 0],[2327.9539 110 0],[2482.4711 1800 0],[2514.584 175 0],[2626.908 2000 0],[2651.0859 2500 0],[2838.1539 250 0],[2858.225 750 0],[2938.441 300 0],[2944.8061 150 0],[2964.958 100 0],[2981.3619 100 0],[3025.3141 600 0],[3047.5461 1500 0],[3050.4119 100 0],[3079.418 500 0],[3106.923 6000 0],[3133.601 125 0],[3160.791 550 0],[3229.308 100 0],[3273.926 1800 0],[3366.6691 3500 0],[3401.4672 150 0],[3433.527 450 0],[3474.4 170 0],[3507.025 5000 0],[3524.6922 110 0],[3620.9211 250 0],[3623.1738 150 0],[3650.8359 450 0],[3678.8828 850 0],[3868.598 140 0],[3873.782 175 0],[3893.9602 270 0],[3995.5141 120 0]}{ALLx10000x10000x3000x600x0x0x0}{UVx2000x1000x2000x600x0x0x0}{VISx3000x600x3000x500x0x0x0}{IVx10000x10000x150x0x0x0x0}% \pgfspectra@elt@search{#1}{Cs}{[55.691 15 2],[58.415 50 2],[58.44 10 2],[59.1044 5 1],[60.301 240 2],[60.7291 1 1],[60.785 120 2],[60.794 160 2],[61.2786 0.8 1],[61.401 2000 2],[62.115 300 2],[63.586 120 2],[63.767 60 2],[63.817 400 2],[63.9356 40 1],[65.7112 2 1],[65.794 5 2],[66.382 90 2],[66.46 90 2],[66.625 500 2],[66.8386 10 1],[67.306 360 2],[67.96 80 2],[68.755 160 2],[69.16 1000 2],[69.943 160 2],[70.34 30 3],[70.389 700 2],[71.025 200 2],[71.8138 300 1],[72.179 4000 2],[72.22 4000 2],[73.156 1000 2],[73.195 60 2],[73.666 200 2],[74.029 2400 2],[74.223 30 2],[74.994 200 2],[75.038 300 2],[75.518 300 2],[75.882 240 2],[75.99 1.2 2],[77.361 1.4 3],[78.773 60 2],[80.195 15 2],[80.8761 300 1],[81.3837 300 1],[81.402 40 2],[81.735 3 2],[82.034 160 2],[82.364 0.8 3],[82.48 30 3],[82.599 40 2],[83.039 1500 2],[83.739 20 2],[84.337 0.8 2],[84.792 50 2],[86.183 3 3],[87.484 40 3],[89.692 30 3],[90.127 700 1],[92.035 3000 2],[92.166 100 2],[92.302 20 3],[92.6657 800 1],[93.267 5 2],[98.614 40 3],[99.514 10 3],[105.479 5000 2],[106.891 30 3],[117.865 26 1],[119.155 16 1],[202.505 5 1],[203.515 12 1],[207.743 16 1],[208.005 16 1],[208.871 16 1],[209.197 16 1],[209.95 3 1],[211.265 5 1],[214.675 20 1],[217.96 26 1],[218.214 5 1],[218.947 26 1],[221.315 5 1],[222.051 20 1],[222.888 26 1],[225.458 50 1],[225.782 40 1],[225.835 5 1],[226.761 70 1],[227.383 70 1],[228.668 5 1],[230.771 5 1],[231.568 8 1],[232.107 26 1],[234.313 16 1],[235.444 26 1],[235.785 5 1],[236.481 26 1],[239.286 50 1],[241.489 16 1],[243.271 5 1],[244.324 5 1],[247.607 26 1],[248.041 8 1],[251.572 26 1],[252.366 3 1],[253.908 26 1],[253.917 5 1],[255.065 12 1],[255.117 26 1],[256.817 26 1],[256.869 50 1],[257.303 200 1],[257.454 26 1],[257.674 26 1],[259.009 26 1],[260.944 50 1],[261.627 26 1],[262.795 5 1],[263.714 16 1],[264.469 5 1],[264.807 26 1],[265.171 40 1],[266.024 5 1],[266.979 26 1],[267.117 3 1],[267.324 8 1],[268.66 26 1],[268.941 5 1],[270.119 3 1],[272.421 26 1],[273.007 5 1],[273.388 5 1],[274.823 50 1],[274.984 16 1],[275.781 12 1],[276.197 16 1],[276.61 5 1],[277.699 50 1],[278.824 26 1],[278.98 26 1],[279.332 5 1],[279.45 26 1],[279.941 26 1],[281.694 100 1],[282.027 5 1],[282.904 5 1],[282.942 5 1],[284.619 26 1],[285.242 16 1],[286.637 16 1],[288.119 50 1],[288.374 5 1],[289.975 16 1],[291.465 16 1],[293.109 100 1],[294.095 100 1],[294.225 16 1],[294.98 6 1],[296.838 4 1],[297.085 5 1],[300.127 20 1],[301.204 16 1],[302.037 3 1],[306.098 3 1],[306.66 20 1],[308.087 5 1],[309.231 20 1],[318.094 16 1],[326.592 160 1],[326.713 160 1],[327.163 100 1],[332.943 20 1],[336.856 160 1],[355.98 20 1],[356.511 20 1],[365.107 3 1],[368.01 3 1],[368.764 3 1],[369.948 20 1],[373.254 3 1],[373.434 20 1],[375.14 3 1],[378.542 70 1],[380.51 100 1],[387.016 3 1],[387.6143 30 0],[388.8608 16 0],[389.698 200 1],[390.693 70 1],[392.558 100 1],[395.95 70 1],[396.519 100 1],[397.8 30 1],[404.718 70 1],[405.396 40 1],[406.796 100 1],[406.877 100 1],[407.336 14 1],[411.929 12 1],[412.121 100 1],[413.2 20 1],[415.127 70 1],[415.861 70 1],[419.32 12 1],[421.313 100 1],[422.112 40 1],[423.219 100 1],[423.441 70 1],[424.197 20 1],[427.174 20 1],[427.71 400 1],[428.835 200 1],[429.2 40 1],[430.064 100 1],[430.794 10 1],[432.758 10 1],[433.024 70 1],[436.328 400 1],[437.302 100 1],[438.443 80 1],[438.876 20 1],[439.691 40 1],[439.95 70 1],[440.385 70 1],[440.525 200 1],[441.021 70 1],[442.405 20 1],[443.571 70 1],[444.4 20 1],[445.344 40 1],[445.768 40 1],[445.918 40 1],[449.366 20 1],[450.152 200 1],[450.671 40 1],[450.683 20 1],[451.55 20 1],[452.285 30 1],[452.672 200 1],[453.894 160 1],[455.5276 80 0],[456.698 30 1],[457.179 30 1],[459.3169 40 0],[460.376 500 1],[460.999 20 1],[461.613 30 1],[462.309 70 1],[464.651 100 1],[465.654 30 1],[467.028 70 1],[469.561 20 1],[470.179 100 1],[473.298 70 1],[473.966 70 1],[474.913 20 1],[476.362 100 1],[478.636 40 1],[483.016 160 1],[487.002 160 1],[495.284 160 1],[497.259 100 1],[504.38 160 1],[505.27 100 1],[505.987 100 1],[508.177 20 1],[509.66 80 1],[522.7 300 1],[524.937 160 1],[527.404 80 1],[530.661 70 1],[534.916 70 1],[537.097 160 1],[541.969 100 1],[546.5944 1 0],[550.2884 1 0],[556.302 200 1],[563.5212 2.2 0],[566.4018 6 0],[574.5724 1.6 0],[581.418 70 1],[583.116 100 1],[583.8835 1 0],[584.5141 6 0],[592.565 100 1],[601.049 16 0],[603.4089 6 0],[612.862 80 1],[621.31 24 0],[621.7599 3 0],[635.4555 10 0],[641.954 20 1],[643.1969 3 0],[647.2623 3 0],[649.553 40 1],[653.644 40 1],[658.602 6 0],[658.651 40 0],[662.866 7 0],[672.3284 40 0],[682.4652 20 0],[687.0455 20 0],[695.552 80 1],[697.3297 40 0],[698.3491 7 0],[722.8536 40 0],[727.99 12 0],[727.9957 40 0],[760.8903 30 0],[794.3882 60 0],[799.068 12 0],[801.5724 20 0],[805.335 12 0],[807.892 12 0],[807.9033 70 0],[852.1122 200 0],[876.1415 40 0],[894.346 120 0],[917.2322 70 0],[920.8538 20 0],[1002.4359 70 0],[1012.3414 20 0],[1012.3602 80 0],[1358.831 28 0],[1360.257 3 0],[1375.883 3 0],[1469.493 70 0],[1792.3619 2.4 0],[1792.4211 1.8 0],[1916.2529 5 0],[1916.3199 4 0],[2131.1461 10 0],[2131.2289 9 0],[2576.349 20 0],[2576.4699 18 0],[3942.1219 40 0],[3942.4078 36 0]}{ALLx5000x200x800x5000x40x0x0}{UVx5000x0x800x5000x40x0x0}{VISx500x80x500x0x0x0x0}{IVx200x200x0x0x0x0x0}% \pgfspectra@elt@search{#1}{Ba}{[40.382 1 2],[40.712 0.4 2],[42.012 1.4 2],[42.384 0.8 2],[44.895 1.8 2],[45.696 1.6 2],[55.548 2.8 2],[58.757 2.8 2],[64.727 3.6 2],[65.336 1.8 2],[74.312 3 2],[79.489 8000 3],[92.374 10000 3],[109.741 2.4 2],[111.367 3 2],[111.601 2.2 2],[113.305 2.8 2],[115.176 2.4 2],[117.062 2.4 2],[120.729 2.6 2],[121.892 2.2 2],[122.455 2.4 2],[128.853 2.4 2],[129.918 2.2 2],[130.74 2.2 2],[130.887 2.4 2],[131.572 2.4 2],[133.401 2.4 2],[135.471 2.2 2],[136.953 2.2 2],[141.661 2.2 2],[147.885 2.4 2],[148.672 40 1],[150.401 80 1],[151.068 2.4 2],[151.422 2.4 2],[155.438 60 1],[156.561 2.4 2],[156.612 2.4 2],[157.273 40 1],[157.455 2.4 2],[159.68 2.4 2],[161.095 2.4 2],[161.578 2.4 2],[167.451 20 1],[169.437 80 1],[171.153 2.4 2],[186.174 2.4 2],[188.392 2.4 2],[190.415 20 1],[192.47 100 1],[197.476 2.2 2],[199.954 60 1],[200.13 2 2],[200.84 3 2],[202.245 2.6 2],[202.395 80 1],[203.884 2 2],[207.043 2.4 2],[207.168 2.4 2],[207.6 2 2],[208.135 2.4 2],[213.487 2 2],[215.637 3.2 2],[216.076 2 2],[221.47 100 1],[223.033 4 2],[224.561 160 1],[225.473 200 1],[228.068 6 2],[230.424 280 1],[232.351 7 2],[233.11 12 2],[233.527 400 1],[234.758 38 1],[247.673 5 2],[250.507 5 2],[251.228 8 2],[252.383 8 2],[252.851 12 1],[253.092 5 2],[255.954 10 2],[257.048 5 2],[259.664 1.6 0],[263.478 20 1],[268.189 8 2],[270.263 1.6 0],[274.578 6 2],[277.136 3.6 1],[278.528 3 0],[293.895 5 2],[296.005 5 2],[296.248 6 2],[301.422 4 2],[304.342 6 2],[307.158 20 0],[307.914 8 2],[310.392 6 2],[310.821 2 0],[311.922 6 2],[313.26 1.6 0],[313.572 1.6 0],[313.77 2 0],[315.27 6 2],[315.534 2 0],[315.567 2 0],[315.805 2.4 0],[315.854 2.4 0],[316.56 5 0],[317.369 3 0],[318.316 6 0],[318.396 3 0],[319.391 2 0],[319.517 5 2],[320.37 5 0],[322.163 6 0],[322.219 8 0],[323.504 5 2],[326.196 10 0],[326.234 12 0],[328.15 8 0],[328.165 5 2],[328.177 3 0],[328.679 4 2],[332.28 10 0],[335.68 16 0],[336.818 10 2],[336.968 6 2],[337.708 12 0],[337.739 4 0],[342.032 14 0],[342.101 5 0],[342.148 6 0],[346.374 8 0],[350.111 40 0],[352.497 16 0],[353.135 6 0],[354.466 16 0],[354.768 4 0],[355.245 20 1],[356.773 40 1],[357.628 20 1],[357.762 6 0],[357.967 16 0],[359.657 40 1],[363.064 8 0],[363.683 8 0],[364.918 5 2],[368.847 4 0],[373.575 80 1],[381.669 40 1],[384.28 40 1],[385.476 20 1],[388.933 4 0],[389.178 280 1],[389.265 4 0],[390.991 8 0],[391.473 100 1],[392.685 5 2],[393.572 10 0],[393.787 4 0],[393.967 40 1],[394.951 100 1],[399.306 5 2],[399.34 16 0],[399.566 6 0],[403.626 60 1],[405.371 3.6 2],[408.377 40 1],[408.486 6 0],[413.066 300 1],[413.243 4 0],[416.6 40 1],[421.604 100 1],[426.795 160 1],[428.31 20 0],[428.78 60 1],[429.76 40 1],[430.932 160 1],[432.3 4 0],[432.573 120 1],[432.674 40 1],[432.962 60 1],[435.033 16 0],[440.254 12 0],[440.523 80 1],[443.189 8 0],[448.898 12 0],[449.364 10 0],[450.592 8 0],[450.963 40 1],[452.317 12 0],[452.493 26 1],[455.403 13000 1],[457.385 8 0],[457.964 16 0],[459.975 6 0],[461.992 4 0],[462.833 5 0],[464.41 60 1],[467.362 6 0],[469.162 7 0],[469.744 3 2],[470.043 4 0],[470.894 160 1],[472.644 8 0],[484.346 160 1],[484.714 60 1],[485.084 40 1],[487.765 6 0],[489.997 80 1],[490.29 3 0],[493.409 4000 1],[494.735 1.6 0],[495.715 200 1],[499.781 60 1],[501.3 200 1],[504.955 2 2],[509.754 2 2],[510.225 2.4 2],[513.454 2 2],[515.994 4 0],[526.703 4 0],[536.135 160 1],[539.16 200 1],[542.105 40 1],[542.455 20 0],[542.879 40 1],[548.03 60 1],[551.905 40 0],[553.548 200 0],[562.04 4 0],[568.018 2 0],[577.762 80 0],[578.418 160 1],[580.023 20 0],[580.569 4 0],[582.628 30 0],[585.368 560 1],[590.764 3 0],[597.17 20 0],[598.125 160 1],[599.709 20 0],[599.8 2 2],[599.985 60 1],[601.947 20 0],[606.312 40 0],[610.199 2.6 2],[611.078 60 0],[613.583 80 1],[614.172 4000 1],[634.168 30 0],[637.711 2 2],[637.891 100 1],[638.376 2 2],[645.085 18 0],[648.291 30 0],[649.69 2400 1],[649.876 60 0],[652.617 1.6 2],[652.731 30 0],[659.533 600 0],[665.41 30 0],[667.527 300 0],[669.384 360 0],[676.962 200 1],[686.569 120 0],[686.785 60 0],[687.409 200 1],[705.994 1200 0],[709.549 1.6 2],[712.033 480 0],[719.524 120 0],[722.884 120 0],[728.03 600 0],[739.241 240 0],[741.753 60 0],[745.978 180 0],[748.808 120 0],[763.69 90 0],[764.291 120 0],[767.209 360 0],[778.048 240 0],[783.957 36 0],[790.575 300 0],[791.134 120 0],[821.024 180 0],[830.869 1.6 2],[855.997 360 0],[871.074 20 1],[873.771 20 1],[879.976 60 0],[886.098 60 0],[891.499 90 0],[921.969 60 0],[930.808 60 0],[932.458 60 0],[937.006 300 0],[945.592 60 0],[952.176 1.6 2],[958.937 90 0],[960.888 180 0],[964.572 60 0],[983.037 300 0],[1000.108 180 0],[1003.21 120 0],[1023.323 240 0],[1047.126 60 0],[1079.125 24 0],[1101.269 36 0],[1111.442 30 0],[1130.304 48 0],[1169.745 24 0],[1320.73 24 0],[1381.05 24 0],[1407.79 24 0],[1500.04 24 0],[2071.2 24 0],[2551.5699 30 0],[2922.39 30 0]}{ALLx13000x1200x13000x12x10000x0x0}{UVx10000x40x400x12x10000x0x0}{VISx13000x1200x13000x5x0x0x0}{IVx360x360x20x1.6x0x0x0}% @@ -115,7 +115,7 @@ \pgfspectra@elt@search{#1}{Pb}{[36.74 0.2 4],[37.253 0.2 4],[38.787 0.2 4],[39.438 0.2 4],[42.464 0.5 4],[43.103 0.3 4],[43.66 0.3 4],[43.847 0.2 4],[43.891 0.6 4],[45.345 0.4 4],[46.17 0.3 4],[47.536 0.8 3],[47.835 0.7 3],[49.62 0.3 4],[49.638 1 3],[49.994 1.2 3],[51.507 0.9 3],[52.978 1.4 3],[57.016 2 3],[57.39 0.8 3],[58.452 0.8 3],[64.85 1 3],[65.61 0.9 3],[69.442 0.4 4],[69.62 0.8 4],[70.373 2 4],[70.629 0.4 4],[70.766 0.6 4],[73.085 0.5 4],[74.946 1.2 4],[75.252 1 4],[75.58 1 4],[76.109 1 3],[76.276 0.6 4],[76.587 1 4],[76.745 1.8 4],[76.949 1.8 4],[77.142 1.4 4],[78.279 1.4 4],[78.705 1 4],[79.702 1.5 4],[79.98 0.5 4],[80.207 1.8 3],[80.282 1.2 3],[80.963 1.8 4],[81.232 0.5 4],[81.259 1 3],[81.41 0.8 4],[82.009 0.8 4],[82.207 0.8 3],[82.552 0.5 4],[82.741 1 3],[82.932 0.8 4],[83.26 1.2 3],[84.099 0.8 3],[84.288 0.8 3],[84.594 1.2 3],[84.604 0.2 1],[84.988 0.2 1],[85.198 0.5 4],[85.557 0.3 1],[85.764 1.8 3],[85.902 0.8 3],[86.233 1.6 3],[86.3 0.3 1],[86.397 2 4],[86.71 1 4],[87.044 1.4 3],[87.371 0.6 1],[87.796 0.2 1],[87.996 1.2 3],[88.035 0.7 3],[88.05 0.6 4],[88.39 1.8 4],[88.496 1.4 3],[88.499 1.4 3],[88.837 1.4 4],[88.968 0.8 1],[89.072 1.6 3],[89.44 1.4 4],[89.608 1.2 4],[89.63 0.3 1],[90.851 1.2 3],[91.509 0.8 4],[91.571 1.4 4],[91.79 1.2 3],[91.809 1.2 4],[92.028 1.2 4],[92.066 1.2 4],[92.212 1 3],[92.249 1.2 3],[92.452 0.7 3],[92.644 0.5 1],[92.764 1 3],[93.22 1.4 3],[93.7 0.8 3],[94.074 0.6 4],[94.62 0.8 4],[95.093 0.6 4],[95.285 0.7 3],[95.435 1.2 4],[95.495 0.4 4],[95.528 1 4],[95.876 0.2 1],[96.021 0.2 1],[96.101 0.1 2],[96.438 0.4 4],[96.536 0.3 1],[96.723 1 1],[97.256 0.9 1],[98.217 0.8 1],[98.671 1 1],[98.914 0.6 4],[99.589 1 1],[100.181 0.6 1],[100.542 0.8 4],[101.244 0.8 3],[101.661 1 1],[102.861 1.4 3],[103.05 0.3 2],[103.205 2 3],[104.124 1.6 3],[104.414 1.8 3],[104.89 1.2 2],[104.982 1 1],[105.077 1 1],[105.126 1 4],[105.653 1.5 3],[105.926 0.4 4],[106.066 1 1],[106.558 0.9 1],[106.92 0.4 2],[107.209 1.2 3],[107.47 0.3 2],[107.988 0.7 3],[108.081 1.8 3],[108.417 2 3],[108.886 1 4],[108.994 0.6 3],[109.652 0.9 4],[109.947 0.7 3],[110.394 1 1],[110.479 0.6 4],[110.843 1 1],[110.984 1 1],[111.53 0.6 3],[111.608 2 3],[111.867 0.4 2],[111.957 1 1],[112.133 0.4 4],[112.136 1 1],[113.314 1 1],[113.75 1 4],[113.784 1.8 3],[114.277 0.8 3],[114.493 1.4 3],[114.591 0.4 1],[115.236 0.4 4],[115.788 1.2 4],[116.7 0.4 2],[118.543 1.4 4],[118.995 2 3],[120.363 1 1],[123.12 1 1],[123.35 1.1 4],[124.847 1 4],[125.06 0.4 2],[126.69 0.1 2],[126.755 0.8 3],[129.082 0.8 3],[129.11 1 3],[131.305 2 3],[132.392 0.8 3],[133.165 1 1],[133.52 1 1],[134.306 1.2 3],[134.837 1 1],[138.894 1.6 3],[139.702 0.6 3],[140.026 1.8 3],[140.434 1 3],[143.396 1 1],[144.935 0.3 1],[151.076 0.7 3],[151.242 1 1],[153.571 1.4 3],[155.31 2 2],[161.01 0.1 2],[163.575 0.8 4],[167.153 1 1],[168.215 1 1],[171.123 0.4 2],[172.675 2 1],[174 0.2 0],[176.664 0.2 0],[179.467 0.2 0],[179.667 1 1],[179.839 0.8 3],[180.287 0.2 4],[181.297 0.5 0],[182.205 1 1],[184.3 0.2 4],[186.876 0.4 0],[188.867 0.2 4],[189.319 0.8 3],[189.702 0.2 4],[190.477 1 0],[191.433 0.2 4],[191.974 0.4 4],[192.1471 0.7 1],[195.796 0.5 4],[195.934 1.2 3],[197.244 0.4 0],[197.316 1.6 3],[197.788 0.2 0],[199.16 0.2 0],[199.231 0.2 0],[199.858 0.2 4],[199.883 1 4],[202.202 0.5 0],[204.258 1 3],[204.934 1.2 3],[205.088 0.5 0],[205.328 0.8 0],[207.845 0.8 4],[207.922 1.2 3],[211.1758 0.6 0],[211.5066 1 0],[214.255 1 4],[215.196 0.8 3],[215.401 1.5 3],[216.797 1 4],[217 50 0],[217.558 0.7 0],[217.746 1.2 3],[218.7888 0.7 0],[218.9603 0.8 0],[220.3534 1 1],[223.7425 2 0],[224.686 2 0],[224.689 2.5 0],[225.901 2 4],[227.666 1 4],[230.149 0.8 4],[233.2418 15 0],[235.953 1.6 3],[238.8797 18 0],[239.3792 55 0],[239.9597 14 0],[240.194 32 0],[241.1734 32 0],[241.761 1.6 3],[242.481 1.5 4],[244.3829 15 0],[244.6181 16 0],[247.6378 13 0],[252.669 0.8 1],[257.66 0.8 1],[257.726 8 0],[260.838 0.2 1],[261.3655 50 0],[261.4175 90 0],[262.8262 16 0],[263.4256 0.4 1],[265.7094 1 0],[266.3154 70 0],[269.7541 1 0],[280.1995 2500 0],[282.258 10 0],[282.3189 1400 0],[283.3053 3500 0],[284.0557 0.6 1],[286.424 0.4 3],[286.45 0.4 3],[287.3311 1400 0],[288.73 0.3 1],[291.4442 0.3 1],[294.743 0.2 1],[294.853 0.3 1],[296.646 1.5 0],[297.2991 1.5 0],[297.814 0.4 3],[298.0157 1.5 0],[298.6876 0.4 1],[301.639 1 1],[304.385 1 2],[305.256 0.4 3],[308.908 0.4 2],[310.274 0.4 2],[311.8894 15 0],[313.781 1 2],[317.65 1 2],[322.0528 60 0],[322.117 0.4 3],[322.9613 10 0],[324.0186 40 0],[324.284 0.5 2],[326.2355 20 0],[353.017 0.1 2],[357.2729 3500 0],[358.987 0.7 2],[363.9568 5000 0],[367.1491 2000 0],[368.3462 7000 0],[368.931 0.7 2],[370.602 0.3 2],[371.3982 1 1],[372.869 0.5 2],[373.9935 2500 0],[385.408 1.2 2],[395.192 0.8 2],[396.248 0.4 3],[401.9632 1500 0],[403.116 0.3 2],[404.98 0.4 3],[405.7807 9500 0],[406.2136 1400 0],[409.454 0.3 2],[411.076 0.5 1],[411.335 0.4 1],[412.811 0.2 2],[415.282 1 1],[415.7814 1 0],[416.8033 1000 0],[424.214 0.9 1],[424.492 2 1],[427.266 0.8 2],[429.382 0.7 1],[429.665 0.6 1],[434.0413 20 0],[435.274 1 1],[438.646 2 1],[449.615 1 3],[449.934 0.6 2],[453.46 1.6 3],[457.121 0.7 2],[457.9051 1 1],[458.227 1 1],[459.645 0.1 2],[460.54 0.8 3],[476.112 0.6 2],[479.859 0.4 2],[480.936 0.4 4],[482.686 0.1 2],[485.506 0.2 2],[500.5416 100 0],[500.6572 10 0],[504.258 5 1],[506.512 0.3 2],[507.058 1 1],[507.453 1 1],[507.635 1 0],[508.9484 5 0],[509.001 2 0],[510.7242 1 0],[511.164 1 1],[519.156 0.4 2],[520.1437 200 0],[536.764 1 1],[537.2099 1 1],[552.397 0.5 2],[554.425 1 1],[560.885 2 1],[569.2346 4 0],[577.941 0.3 2],[585.796 0.6 2],[589.5624 20 0],[591.454 0.2 3],[600.1862 200 0],[600.958 0.9 1],[601.1667 50 0],[604.117 0.8 1],[605.9356 50 0],[607.574 4 1],[608.1409 4 1],[611.052 5 0],[615.989 1 1],[623.5266 10 0],[665.099 0.5 4],[666.02 5 1],[675.32 0.4 4],[689.211 1 0],[712.894 0.5 0],[719.36 2 1],[722.8965 2000 0],[730.468 0.5 0],[733.015 0.8 0],[734.6676 1 0],[755.897 1 1],[763.256 1 1],[773.296 0.4 1],[780.9259 2 0],[781.797 0.5 0],[782.901 0.6 0],[789.6737 0.5 0],[815.691 0.2 1],[816.8001 1 0],[819.1886 0.6 0],[821.7711 0.5 0],[825.561 0.8 0],[827.269 4 0],[833.554 0.6 1],[839.568 1 1],[840.9384 2 0],[847.8492 1 0],[853.217 0.8 0],[854.495 0.7 1],[870.99 0.7 1],[871.939 0.5 1],[872.281 0.5 0],[885.7457 1 0],[905.082 1 1],[906.343 1 1],[924.528 0.2 1],[929.3476 0.8 0],[938.435 0.5 0],[938.589 0.5 0],[943.805 1.5 0],[960.4297 1.5 0],[960.873 0.6 0],[967.4351 1.5 0],[1029.0458 20 0],[1043.432 0.5 0],[1049.8965 10 0],[1064.9249 5 0],[1075.941 0.5 0],[1075.974 0.7 0],[1088.6688 1.5 0],[1096.953 4 0],[1105.922 0.6 0],[1133.308 0.3 0],[1147.949 0.2 1],[1148.876 0.2 0],[1162.791 0.5 1],[1256.137 0.1 0]}{ALLx9500x9500x5x2x2x2x0}{UVx7000x7000x2x2x2x2x0}{VISx9500x9500x5x1.2x1.6x0.5x0}{IVx20x20x1x0x0x0x0}% \pgfspectra@elt@search{#1}{Bi}{[35.577 1 4],[36.952 1 4],[42.07 6 3],[42.978 1 4],[43.12 6 3],[43.563 1 4],[48.839 2 4],[49.272 1 4],[56.362 3 4],[59.073 1 2],[67.076 5 2],[67.887 2 4],[68.688 6 4],[70.654 1 4],[73.071 5 4],[73.817 10 4],[77.516 4 2],[79.05 6 3],[79.06 6 3],[79.25 8 3],[80.365 6 2],[82.03 10 3],[82.29 9 3],[82.49 12 3],[84.986 6 4],[85.568 5 4],[86.445 15 4],[87.26 15 3],[87.68 8 3],[88.017 6 4],[91.67 9 3],[92.093 7 2],[92.39 12 3],[92.548 6 2],[92.981 6 4],[94.33 15 3],[96.76 9 3],[96.88 8 3],[98.98 8 3],[103.999 25 2],[104.576 50 2],[105.181 30 2],[105.888 15 1],[108.547 20 1],[109.92 10 1],[110.34 24 3],[112.88 7 3],[113.86 6 3],[113.901 20 2],[113.946 15 4],[113.98 6 3],[114.591 15 2],[114.97 7 3],[116.319 8 1],[116.706 8 1],[122.464 50 2],[122.543 10 1],[123.278 15 1],[124.105 10 1],[126.535 10 1],[128.373 15 1],[130.618 10 1],[131.7 60 3],[132.546 20 1],[132.684 40 2],[132.947 20 1],[134.612 60 2],[135.007 20 1],[137.261 25 1],[137.602 15 1],[139.392 20 1],[142.333 35 2],[142.352 35 2],[143.683 45 1],[144.794 25 1],[145.511 50 1],[146.1 60 2],[146.214 25 1],[148.693 35 1],[150.25 20 1],[152.057 40 1],[153.317 40 1],[153.677 30 1],[153.806 35 1],[156.367 20 1],[157.37 40 1],[159.179 60 1],[160.158 25 1],[160.64 60 2],[160.97 40 1],[161.138 40 1],[165.281 20 1],[169.15 20 2],[174.929 20 1],[177.711 80 1],[178.747 60 1],[179.193 70 1],[182.38 70 1],[183.432 20 2],[186.39 10 2],[190.241 100 1],[191 30 3],[191.212 10 2],[195.453 9000 0],[196.013 7000 0],[198.826 10 2],[198.935 25 1],[202.075 20 2],[202.115 20 2],[202.121 7000 0],[206.17 9000 0],[206.89 45 1],[207.322 10 2],[207.337 14 2],[209.3 30 3],[210.342 15 2],[211.026 4600 0],[213.363 2500 0],[214.34 15 1],[214.346 15 1],[218.69 60 1],[221.355 30 2],[221.4 40 1],[222.825 360 0],[223.061 1700 0],[227.658 340 0],[231.1 100 3],[232.6 100 3],[236.812 16 1],[236.825 12 1],[237.6 100 3],[240.088 190 0],[241.46 75 2],[243.76 10 2],[250.1 10 1],[251.569 25 0],[252.449 70 0],[254.45 20 1],[262.791 700 0],[262.9 100 3],[267.7 100 3],[269.3 12 1],[269.676 280 0],[271.33 20 1],[273.05 140 0],[276.7 100 3],[277.2 100 3],[278.052 360 0],[278.6 100 3],[280.342 15 1],[280.37 11 1],[280.53 12 1],[280.962 140 0],[284.2 100 3],[284.74 30 2],[285.56 80 2],[289.798 4000 0],[292.4 100 3],[293.3 100 3],[293.6 100 3],[293.67 15 1],[293.83 3200 0],[295.04 20 1],[296.34 12 1],[298.903 2800 0],[299.334 700 0],[301.2 100 3],[302.464 2400 0],[303.487 60 0],[304.2 100 3],[306.772 9000 0],[307.666 140 0],[311.5 35 2],[323.9 100 3],[339.721 550 0],[343.083 10 1],[343.123 12 1],[345.1 40 2],[347.38 40 2],[348.55 35 2],[351.085 500 0],[354.08 15 2],[359.611 380 0],[361.34 45 2],[364.3 100 3],[365.42 12 1],[368.2 100 3],[369.532 50 2],[369.568 50 2],[373.4 100 3],[379.25 70 1],[381.11 12 1],[381.58 20 1],[384.58 10 1],[386.39 30 1],[386.8 100 3],[407.91 40 1],[409.72 10 1],[412.153 140 0],[412.186 140 0],[422.46 12 2],[425.94 75 1],[427.2 25 1],[430.17 70 1],[432.78 25 2],[433.98 12 1],[434.05 25 1],[434.2 30 3],[437.94 12 1],[447.68 25 1],[456.084 30 2],[456.154 30 2],[470.53 60 1],[472.252 600 0],[473.03 30 1],[474.97 20 1],[479.74 40 2],[490.82 12 1],[491.66 10 1],[496.97 12 1],[499.36 20 1],[507.93 45 2],[509.16 10 1],[512.43 50 1],[514.43 60 1],[520.15 20 1],[520.92 75 1],[527.03 40 1],[534.7 30 3],[539.78 10 1],[555.235 10 0],[559.941 3 0],[565.52 20 1],[571.92 40 1],[574.255 6 0],[581.83 12 1],[586.02 20 1],[597.3 20 1],[605.91 15 1],[612.8 15 1],[613.482 6 0],[647.573 3 0],[647.624 3 0],[649.77 15 1],[657.72 10 1],[660.02 40 1],[662.34 12 2],[680.86 50 1],[699.112 4 0],[703.3 12 1],[703.615 2 0],[738.1 10 1],[738.1 10 2],[750.233 2 0],[755.1 12 2],[759.8 25 2],[763.7 10 1],[763.7 10 2],[775 10 1],[783.87 3 0],[784.033 2 0],[796.5 20 1],[800.8 40 2],[805 12 1],[807 50 2],[810 20 2],[832.8 15 1],[838.8 15 1],[853.2 30 1],[854.454 2 0],[857.974 1 0],[865.3 25 1],[867.1 15 2],[875.488 2 0],[876.154 3 0],[886.3 25 1],[890.781 2 0],[893.4 20 2],[965.704 2000 0],[982.778 40 0],[1010.45 20 0],[1013.88 15 0],[1030.06 20 0],[1053.619 20 0],[1107.244 50 0],[1155.16 15 0],[1171.037 1500 0],[1199.949 40 0],[1216.508 200 0],[1237.464 10 0],[1269.004 200 0],[1281.78 100 0],[1433.05 200 0],[1600.15 50 0],[2255.16 60 0]}{ALLx9000x9000x100x80x100x15x0}{UVx9000x9000x100x80x100x15x0}{VISx600x600x75x45x100x0x0}{IVx2000x2000x30x50x0x0x0}% \pgfspectra@elt@search{#1}{Po}{[213.902 250 0],[220.38 300 -1],[222.067 300 0],[222.213 200 0],[228.422 200 -1],[234.461 250 0],[242.172 250 0],[242.609 300 0],[245.008 1500 0],[248.394 700 0],[249.053 700 0],[250.218 200 -1],[253.495 300 0],[255.733 300 0],[255.801 1500 0],[256.231 400 -1],[257.88 300 -1],[258.764 400 0],[263.701 200 -1],[264.536 300 0],[266.333 700 -1],[267.167 200 0],[276.192 600 0],[280.026 400 0],[282.411 250 0],[286.601 300 0],[291.931 400 0],[295.892 600 0],[300.321 2500 0],[306.931 450 0],[311.595 200 -1],[318.902 400 0],[324.024 600 0],[328.638 250 0],[332.86 600 0],[348.979 300 -1],[349.365 200 -1],[358.833 400 -1],[367.136 200 -1],[386.193 500 0],[405.198 200 -1],[417.052 1200 0],[423.613 250 -1],[441.558 200 -1],[449.321 800 0],[461.144 350 0],[486.712 200 -1],[487.624 400 0],[494.681 450 -1],[532.323 350 0],[574.485 300 0],[796.262 600 0],[843.387 300 0],[861.826 500 0],[922.787 250 -1]}{ALLx2500x2500x0x0x0x0x700}{UVx2500x2500x0x0x0x0x700}{VISx1200x1200x0x0x0x0x450}{IVx600x600x0x0x0x0x250}% -\pgfspectra@elt@search{#1}{At}{[216.225 8 0],[224.401 10 0]}{ALLx10x10x0x0x0x0x0x0}{UVx10x10x0x0x0x0x0x0}{VISx0x0x0x0x0x0x0}{IVx0x0x0x0x0x0x0} +\pgfspectra@elt@search{#1}{At}{[216.225 8 0],[224.401 10 0]}{ALLx10x10x0x0x0x0x0x0}{UVx10x10x0x0x0x0x0x0}{VISx0x0x0x0x0x0x0}{IVx0x0x0x0x0x0x0}% \pgfspectra@elt@search{#1}{Rn}{[351.46 5 0],[373.989 10 0],[375.365 20 0],[391.72 10 0],[394.172 10 0],[395.236 10 0],[422.606 10 0],[430.776 80 0],[433.578 7 0],[434.96 100 0],[443.505 40 0],[445.925 50 0],[450.848 50 0],[457.772 50 0],[460.938 50 0],[472.176 30 0],[572.258 6 0],[606.192 10 0],[620.075 6 0],[638.045 6 0],[655.749 10 0],[660.643 10 0],[662.723 15 0],[666.96 6 0],[670.428 8 0],[675.181 20 0],[680.679 6 0],[683.695 8 0],[683.757 8 0],[689.116 10 0],[699.89 10 0],[705.542 200 0],[726.811 100 0],[729.1 20 0],[732.098 6 0],[741.904 10 0],[745 300 0],[747.089 8 0],[748.313 8 0],[751.413 8 0],[751.692 8 0],[752.393 6 0],[759.755 6 0],[760.128 8 0],[765.748 10 0],[773.843 10 0],[774.664 20 0],[780.982 100 0],[804.9 20 0],[809.951 100 0],[817.384 6 0],[827.096 100 0],[831.451 8 0],[834.974 6 0],[838.105 10 0],[848.748 10 0],[849.489 10 0],[852.095 20 0],[860.007 100 0],[863.976 10 0],[867.583 15 0],[880.775 10 0],[932.702 50 0],[994.857 6 0],[1010.613 5 0]}{ALLx300x300x0x0x0x0x0}{UVx20x20x0x0x0x0x0}{VISx300x300x0x0x0x0x0}{IVx100x100x0x0x0x0x0}% \pgfspectra@elt@search{#1}{Ra}{[236.973 8 1],[246.055 8 1],[247.55 10 1],[258.661 8 1],[264.373 10 1],[270.896 20 1],[279.521 10 1],[281.376 30 1],[303.344 10 1],[310.18 5 0],[364.955 100 1],[381.442 200 1],[419.409 8 1],[424.472 8 1],[434.064 100 1],[443.627 20 1],[453.311 30 1],[464.129 8 0],[468.228 100 1],[469.928 8 0],[482.591 100 0],[485.607 10 0],[485.941 10 1],[492.753 10 1],[509.756 10 0],[520.593 10 0],[528.328 10 0],[532.029 10 0],[539.98 10 0],[540.023 20 0],[540.681 20 0],[548.213 8 0],[550.198 10 0],[555.357 10 0],[555.585 20 0],[561.666 10 0],[566.081 50 0],[581.363 20 1],[620.03 30 0],[633.69 10 0],[644.62 20 0],[648.732 20 0],[659.334 10 1],[671.932 10 1],[698.022 20 0],[711.85 20 0],[714.121 50 0],[722.516 20 0],[731.027 10 0],[783.812 20 0],[801.97 50 1],[817.731 6 0],[833.507 5 0],[993.221 5 0]}{ALLx200x100x200x0x0x0x0}{UVx100x5x100x0x0x0x0}{VISx200x100x200x0x0x0x0}{IVx50x20x50x0x0x0x0}% \pgfspectra@elt@search{#1}{Ac}{[206.2 20 3],[210 8 1],[250.212 30 3],[255.808 100 3],[262.644 1000 2],[268.29 50 2],[271.25 20 1],[272.623 10 1],[276.018 10 1],[278.156 10 1],[279.083 5 3],[279.39 50 3],[279.759 20 1],[280.676 20 1],[283.347 8 1],[284.716 150 1],[289.52 8 1],[289.682 30 1],[292.302 30 1],[295.255 2000 2],[299.417 200 1],[304.33 500 1],[306.936 200 1],[307.807 100 1],[308.604 100 1],[308.737 100 1],[311.283 200 1],[312.016 100 1],[315.309 500 1],[315.441 600 1],[316.481 200 1],[322.47 20 3],[323.059 300 1],[323.77 150 1],[326.091 500 1],[331.801 100 1],[338.353 200 1],[339.278 2000 2],[341.384 200 1],[341.777 500 1],[348.116 500 1],[348.759 3000 2],[348.953 200 1],[352.924 100 1],[353.463 100 1],[355.499 200 1],[356.559 1000 1],[369.488 100 1],[375.667 300 1],[379.982 200 1],[386.312 2000 1],[391.447 100 1],[406.16 400 1],[408.844 3000 1],[416.84 3000 1],[417.998 100 0],[418.312 20 0],[419.44 20 0],[420.969 300 1],[435.913 300 1],[438.453 20 0],[438.641 1000 1],[439.671 20 0],[441.309 2000 2],[446.273 20 0],[450.72 1000 1],[456.987 3000 2],[460.545 500 1],[471.658 10 0],[472.016 400 1],[481.222 300 1],[494.518 100 1],[495.823 100 1],[496.087 100 1],[519.321 8 2],[544.638 150 1],[573.205 300 1],[575.897 400 1],[591.085 1000 1],[616.475 600 1],[616.783 200 1],[624.283 400 1],[635.986 20 0],[669.127 20 0],[729.04 6 0],[786.61 6 0]}{ALLx3000x100x3000x3000x100x0x0}{UVx3000x0x1000x3000x100x0x0}{VISx3000x100x3000x3000x0x0x0}{IVx6x6x0x0x0x0x0}% diff --git a/graphics/pgf/contrib/pgf-spectra/pgf-spectra.sty b/graphics/pgf/contrib/pgf-spectra/pgf-spectra.sty index 308c9bcc78..2135d34667 100644 --- a/graphics/pgf/contrib/pgf-spectra/pgf-spectra.sty +++ b/graphics/pgf/contrib/pgf-spectra/pgf-spectra.sty @@ -7,9 +7,10 @@ % Hugo Gomes @ 21/02/2023 (v2.2.0) % Hugo Gomes @ 25/04/2023 (v3.0.0) % Hugo Gomes @ 27/04/2023 (v3.0.1) +% Hugo Gomes @ 07/07/2024 (v3.0.1a) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \NeedsTeXFormat{LaTeX2e}% -\ProvidesPackage{pgf-spectra}[27/04/2023 pgf-spectra v3.0.1]% +\ProvidesPackage{pgf-spectra}[07/07/2024 pgf-spectra v3.0.1a]% \RequirePackage{tikz}% \DeclareOption{LSE}{\input{pgf-spectra.data.LSE.tex}\xdef\pgfspectra@DATASET{1}}% \DeclareOption{NIST}{\input{pgf-spectra.data.NIST.tex}\xdef\pgfspectra@DATASET{0}}% @@ -640,15 +641,15 @@ precision=1,unit={}% NEW v3.0.0 (for data library) \fi% }% \def\pgfspectra@utils@put@label{\ignorespaces% - \ifx\pgfspectra@elt@chemsym\undefined\def\pgfspectra@elt@chemsym{}\fi% + \ifx\pgfspectra@elt@chemsym\undefined\def\pgfspectra@elt@chemsym{}\else\fi% \pgfspectra@get@label@position% \ifnum\pgfspectra@begin>\pgfspectra@end% \ifcase\pgfspectra@label@position% %west \ifpgfspectra@drawaxis%\ifpgfspectra@axislabel% - \node[\pgfspectra@labelfontcolor,font=\pgfspectra@labelfont,left,minimum width=2em,align=right] at (-2.5*\@pgfspectra@axis@height-\pgfspectra@width,0.5*\pgfspectra@height-1.25*\@pgfspectra@axis@height) {\pgfspectra@labelbtext\pgfspectra@elt@chemsym\pgfspectra@labelatext};% + \node[\pgfspectra@labelfontcolor,font=\pgfspectra@labelfont,left,minimum width=2.1em,align=right] at (-2.5*\@pgfspectra@axis@height-\pgfspectra@width,0.5*\pgfspectra@height-1.25*\@pgfspectra@axis@height) {\pgfspectra@labelbtext\pgfspectra@elt@chemsym\pgfspectra@labelatext};% \else% - \node[\pgfspectra@labelfontcolor,font=\pgfspectra@labelfont,left,minimum width=2em,align=right] at (-\pgfspectra@width,0.5*\pgfspectra@height) {\pgfspectra@labelbtext\pgfspectra@elt@chemsym\pgfspectra@labelatext};% + \node[\pgfspectra@labelfontcolor,font=\pgfspectra@labelfont,left,minimum width=2.1em,align=right] at (-\pgfspectra@width,0.5*\pgfspectra@height) {\pgfspectra@labelbtext\pgfspectra@elt@chemsym\pgfspectra@labelatext};% \fi% \or%north west \ifpgfspectra@drawaxis% @@ -693,9 +694,9 @@ precision=1,unit={}% NEW v3.0.0 (for data library) \ifcase\pgfspectra@label@position% %west \ifpgfspectra@drawaxis% - \node[\pgfspectra@labelfontcolor,font=\pgfspectra@labelfont,left,minimum width=2em,align=right] at (-2.5*\@pgfspectra@axis@height,0.5*\pgfspectra@height-1.25*\@pgfspectra@axis@height) {\pgfspectra@labelbtext\pgfspectra@elt@chemsym\pgfspectra@labelatext};% + \node[\pgfspectra@labelfontcolor,font=\pgfspectra@labelfont,left,minimum width=2.1em,align=right] at (-2.5*\@pgfspectra@axis@height,0.5*\pgfspectra@height-1.25*\@pgfspectra@axis@height) {\pgfspectra@labelbtext\pgfspectra@elt@chemsym\pgfspectra@labelatext};% \else% - \node[\pgfspectra@labelfontcolor,font=\pgfspectra@labelfont,left,minimum width=2em,align=right] at (0,0.5*\pgfspectra@height) {\pgfspectra@labelbtext\pgfspectra@elt@chemsym\pgfspectra@labelatext};% + \node[\pgfspectra@labelfontcolor,font=\pgfspectra@labelfont,left,minimum width=2.1em,align=right] at (0,0.5*\pgfspectra@height) {\pgfspectra@labelbtext\pgfspectra@elt@chemsym\pgfspectra@labelatext};% \fi% \or%north west \ifpgfspectra@drawaxis% diff --git a/graphics/pgf/contrib/pgf-spectra/pgf-spectraManual.pdf b/graphics/pgf/contrib/pgf-spectra/pgf-spectraManual.pdf Binary files differindex e003e00f80..a627994bbf 100644 --- a/graphics/pgf/contrib/pgf-spectra/pgf-spectraManual.pdf +++ b/graphics/pgf/contrib/pgf-spectra/pgf-spectraManual.pdf diff --git a/graphics/pgf/contrib/pgf-spectra/pgf-spectraManual.tex b/graphics/pgf/contrib/pgf-spectra/pgf-spectraManual.tex index 1661670404..4ffb5d4c87 100644 --- a/graphics/pgf/contrib/pgf-spectra/pgf-spectraManual.tex +++ b/graphics/pgf/contrib/pgf-spectra/pgf-spectraManual.tex @@ -20,12 +20,12 @@ \setlength{\parindent}{0pt} \setlength{\oddsidemargin}{0pt} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\def\version{3.0.1}% +\def\version{3.0.1a}% \def\inversion#1{#1}% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \usepackage[pdfstartview={ },colorlinks=true, linkcolor=black!50!green, citecolor=gray, urlcolor=teal, hyperindex, plainpages=false,bookmarksopenlevel=1,bookmarksopen=true]{hyperref}% \hypersetup{%Start options on pdf -pdftitle = {Manual for pgf-spectra (v\inversion{3.0.1})},% +pdftitle = {Manual for pgf-spectra (v\inversion{3.0.1a})},% pdfsubject = {Emission and absorption lines of the elements},% pdfkeywords = {Draw the spectrum of elements in a simple way via pgf/TikZ environment. It's possible to draw a desired spectrum, continuous or discrete.},% pdfauthor = {\textcopyright Hugo Gomes},% @@ -80,7 +80,7 @@ pdfproducer = {pdfeTeX-1.\the\pdftexversion\pdftexrevision}, \end{titlepage} \newpage% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\pagestyle{empty}% +\pagestyle{empty}\enlargethispage{\baselineskip}% \pdfbookmark[1]{Table of contents}{pdfContents}% \tableofcontents% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -97,6 +97,18 @@ pdfproducer = {pdfeTeX-1.\the\pdftexversion\pdftexrevision}, \vfill\vfill\vfill\newpage %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{What's new} +\vspace{-32pt}\ \subsection*{}{\normalfont\large\bfseries\raisebox{1.25pt}{$\mathbf{\blacktriangleright}$}\ In version 3.0.1a}% +\addcontentsline{toc}{subsection}{In version 3.0.1a}% +\begin{itemize} +\item Removed lines data outside the range $10\,nm$ -- $4000\,nm$ (H, He, Be, C, Si, Kr, Sn, I) in LSE data file, which generate a package warning, e.g. +\texttt{Package pgf-spectra Warning: invalid wavelength (4051.1602nm). The wavelength must be lesser or\\ equal to 4000nm (NIR)... on input line 27}. +\item Fixed chemical symbol label width producing incorrect alignment on consecutive lines for the spectrum of some elements, e.g. +\\ \makebox[\linewidth][s]{\hrulefill} +\\ \txtspecstyle[axis,begin=400,end=700,axis step=20,axis ticks=9,\\ axis color=lightgray,axis font color=black,label,width=.88\string\textwidth,height=0.7cm] +\\ \bs{noindent}\bs{pgfspectra}\lp\red{element=Cl}\rp +\\ \bs{noindent}\bs{pgfspectra}\lp\red{element=Rn}\rp +\\ \makebox[\linewidth][s]{\hrulefill} +\end{itemize} \vspace{-32pt}\ \subsection*{}{\normalfont\large\bfseries\raisebox{1.25pt}{$\mathbf{\blacktriangleright}$}\ In version 3.0.1}% \addcontentsline{toc}{subsection}{In version 3.0.1}% \begin{itemize} @@ -242,7 +254,7 @@ with the following specific keys% \pgfspectraplotshade[options]{name} \\ [10pt]According to the information on the page the listed lines are based on "Line Spectra of the Ele\-ments", Joseph Reader and Charles H. Corliss CRC Handbook of Chemistry and Physics. This book refers that The table contains the outstanding spectral lines of neutral ($I$) and singly ionized ($II$) atoms of the elements from hydrogen through plutonium ($Z=1-94$); selected strong lines from doubly ionized ($III$), triply ionized ($IV$), and quadruply ionized ($V$) atoms are also included. \\ [6pt]\makebox[66pt][s]{}\begin{minipage}{\linewidth-66pt}\color{black!70}\small Note: pst-spectra documentation refers "\textit{Line Spectra of the Elements from the Astronomical Data Center of NASA}" as the source material, but I'm assuming the original source is "\textit{Line Spectra of the Ele\-ments}"\textit{, Joseph Reader and Charles H. Corliss CRC Handbook of Chemistry and Physics}, obtained from \href{http://cdsarc.u-strasbg.fr/viz-bin/Cat?VI/16}{http://cdsarc.u-strasbg.fr/viz-bin/Cat?VI/16}.\end{minipage} \\ [12pt]\tikz{\node[text width=\linewidth-4mm,draw=purple,rounded corners=2pt,fill=black!10!purple!10,inner sep=2mm,text justified] {To use this data set load the package \pack{} with the option \verb|LSE| (acronym to Line Spectra of the Elements):% - \\ [6pt]\large\color{purple}\verb|\usepackage[LSE]{pgf-spectra}|\\ [6pt]\small\color{orange}\hfill Number of lines provided: 46065 (see file pgf-spectraDataLSE.pdf)};} + \\ [6pt]\large\color{purple}\verb|\usepackage[LSE]{pgf-spectra}|\\ [6pt]\small\color{orange}\hfill Number of lines provided: 46031 (see file pgf-spectraDataLSE.pdf)};} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{Data based on NIST} \tikz{\node[text width=\linewidth-4mm,draw=teal,rounded corners=2pt,fill=black!10,inner sep=2mm,text centered] {This set was obtained from \href{https://physics.nist.gov/PhysRefData/Handbook/Tables/findinglist.htm}{https://physics.nist.gov/PhysRefData/Handbook/Tables/findinglist.htm}};} @@ -2318,7 +2330,7 @@ colorbar horizontal,colormap access=map] \\ \header \\ [-1pt]\linhaimpar{\hyperlink{optionlib:backcolor}{back color}}{background color of the table header, of the \textit{element(s)} column, of the table border lines and of the lines between rows}{color}{black!10}{any named color or user defined color}% \\ [-1pt]\linhapar{\hyperlink{optionlib:databackcolor}{data back color}}{the background color of each data row}{color}{white}{any named color or user defined color}% -\\ [-1pt]\linhaimpar{\hyperlink{optionlib:elementscolumnwidth}{elements column width}}{the width of the \textit{element(s)} column}{length}{2.5em}{up to maximum \TeX\ dimension (16384pt)}% +\\ [-1pt]\linhaimpar{\hyperlink{optionlib:elementscolumnwidth}{elements column\vskip0pt width}}{the width of the \textit{element(s)} column}{length}{2.5em}{up to maximum \TeX\ dimension (16384pt)}% \\ [-1pt]\linhapar{\hyperlink{optionlib:textcolor}{text color}}{the color of all text in the table}{color}{black}{any named color or user defined color}% \\ [-1pt]\linhaimpar{\hyperlink{optionlib:title}{title}}{the title in the table header}{text}{<REDSHIFTED>\\ SPECTRAL LINES OF ELEMENT(S) \ldots}{}% \\ [-1pt]\linhapar{\hyperlink{optionlib:width}{width}}{the total width of the table}{length}{\textbackslash linewidth}{up to maximum \TeX\ dimension (16384pt)}% diff --git a/graphics/pgf/contrib/pgfgantt/README b/graphics/pgf/contrib/pgfgantt/README index b46f25054c..017c065fc6 100644 --- a/graphics/pgf/contrib/pgfgantt/README +++ b/graphics/pgf/contrib/pgfgantt/README @@ -1,19 +1,22 @@ -The pgfgantt package v5.0 +The pgfgantt package v5.0a ------------------------------------------------------------------------------ This package is released under the LaTeX Project Public License v1.3c or later -(see http://www.latex-project.org/lppl.txt). +(see https://www.latex-project.org/lppl.txt). The pgfgantt package provides the ganttchart environment, which draws a Gantt chart within a TikZ picture. The user may add various -elements to the chart, for example, titles, bars, groups, milestones and different -links between these elements. The appearance of the chart elements +elements to the chart, for example, titles, bars, groups, milestones and +different links between these elements. The appearance of the chart elements is highly customizable, and even new chart elements may be defined. -The package makes use of pgf/TikZ (http://tug.ctan.org/pkg/pgf). +The package requires pgf/TikZ (https://ctan.org/pkg/pgf). Installation: Run pgfgantt.ins through LaTeX and follow the instructions. +This package is unmaintained. If you want to volunteer to take over +the maintenance, contact me at https://wolfgang.esser-skala.at/contact/ . + -- -Wolfgang Skala -10th January 2018 +Wolfgang Esser-Skala +2024-06-19 diff --git a/graphics/pgf/contrib/pgfgantt/pgfgantt-doc.pdf b/graphics/pgf/contrib/pgfgantt/pgfgantt-doc.pdf Binary files differnew file mode 100644 index 0000000000..62c09d84c7 --- /dev/null +++ b/graphics/pgf/contrib/pgfgantt/pgfgantt-doc.pdf diff --git a/graphics/pgf/contrib/pgfgantt/pgfgantt.dtx b/graphics/pgf/contrib/pgfgantt/pgfgantt.dtx index 7bb4d52138..e734668f59 100644 --- a/graphics/pgf/contrib/pgfgantt/pgfgantt.dtx +++ b/graphics/pgf/contrib/pgfgantt/pgfgantt.dtx @@ -1,19 +1,19 @@ % \iffalse meta-comment % -% Copyright (C) 2018 by Wolfgang Skala +% Copyright (C) 2024 by Wolfgang Esser-Skala % % This work may be distributed and/or modified under the % conditions of the LaTeX Project Public License, either version 1.3c % 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 +% https://www.latex-project.org/lppl.txt % and version 1.3c or later is part of all distributions of LaTeX % version 2008/05/04 or later. % % \fi % % \iffalse -%<pgfgantt>\ProvidesPackage{pgfgantt}[2018/01/10 v5.0 Draw Gantt diagrams with TikZ] +%<pgfgantt>\ProvidesPackage{pgfgantt}[2024/06/19 v5.0a Draw Gantt diagrams with TikZ] %<pgfgantt>\NeedsTeXFormat{LaTeX2e}[1999/12/01] % %<*driver> @@ -181,30 +181,10 @@ \ignorespaces} \let\endoption\endmacro \let\endintmacro\endmacro -\renewenvironment{theglossary}{\glossary@prologue\GlossaryParms\let\item\@idxitem\ignorespaces}{} \makeatother \AtBeginDocument{\lstMakeShortInline|} -\begingroup - \makeatletter - \def\x\begingroup#1\@nil{% - \endgroup - \def\DoNotIndex{% - \begingroup - \@makeother\#% - \@makeother\$% - \@makeother\%% - \@makeother\^% - \@makeother\_% - \@makeother\~% - \@makeother\ % - \@makeother\&% - #1% - }% - }% -\expandafter\x\DoNotIndex\@nil - \usepackage[ hyperfootnotes=false, bookmarksnumbered,% @@ -237,27 +217,13 @@ \def\TikZ{Ti\textit{k}Z} \DeclareRobustCommand\cs[1]{\texttt{\char`\\#1}} -\def\GlossaryParms{% - \def\pfill##1{} - \parindent 0pt - \parskip 0pt plus 1pt - \small\raggedright - \def\@idxitem{\par\hangindent 30pt}% - \def\subitem{\@idxitem\hspace*{15pt}}% - \def\subsubitem{\@idxitem\hspace*{25pt}}% - \def\indexspace{\par\vspace{10pt plus 2pt minus 3pt}}% -} - \usepackage{pgfgantt} \usetikzlibrary{shadows,shadings,decorations.pathmorphing,shapes.misc} \EnableCrossrefs \CodelineIndex -\RecordChanges \IndexPrologue{\clearpage\section{Index}\markboth{Index}{Index}Bold numbers refer to the page where the corresponding entry is described; italic numbers refer to the code line of the definition; upright numbers refer to the code lines where the entry is used.} -\GlossaryPrologue{\clearpage\section{Change History}\markboth{Change history}{Change history}} - \setkomafont{title}{\rmfamily\bfseries} \addtokomafont{sectioning}{\rmfamily} @@ -270,34 +236,15 @@ %</driver> % \fi % -% \CheckSum{2245} -% -% \CharacterTable -% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z -% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z -% Digits \0\1\2\3\4\5\6\7\8\9 -% Exclamation \! Double quote \" Hash (number) \# -% Dollar \$ Percent \% Ampersand \& -% Acute accent \' Left paren \( Right paren \) -% Asterisk \* Plus \+ Comma \, -% Minus \- Point \. Solidus \/ -% Colon \: Semicolon \; Less than \< -% Equals \= Greater than \> Question mark \? -% Commercial at \@ Left bracket \[ Backslash \\ -% Right bracket \] Circumflex \^ Underscore \_ -% Grave accent \` Left brace \{ Vertical bar \| -% Right brace \} Tilde \~} -% -% % \GetFileInfo{pgfgantt.sty} % % \DoNotIndex{\@auxout,\@empty,\@firstoftwo,\@ifundefined,\@namedef,\@nameuse,\@tempa,\@tempb,\@tempc,\@tempcnta,\@tempcntb,\@tempdima,\advance,\anchor,\backgroundpath,\begin,\begingroup,\bfseries,\breakforeach,\clip,\csname,\def,\divide,\draw,\edef,\else,\end,\endcsname,\endgroup,\expandafter,\fi,\foreach,\global,\i,\ifcase,\ifdate,\ifdim,\ifnum,\ifx,\inheritanchor,\inheritanchorborder,\inheritbackgroundpath,\inheritsavedanchors,\itshape,\kernel@ifnextchar,\let,\multiply,\newcommand,\newcount,\newenvironment,\newif,\node,\normalcolor,\normalfont,\normalsize,\northeast,\outernortheast,\PackageError,\PackageWarning,\path,\pgf@process,\pgf@x,\pgf@y,\pgf@xa,\pgf@xb,\pgf@xc,\pgf@ya,\pgf@yb,\pgf@yc,\pgfcalendar,\pgfcalendarbeginjulian,\pgfcalendarcurrentday,\pgfcalendarcurrentjulian,\pgfcalendarcurrentmonth,\pgfcalendarcurrentweekday,\pgfcalendarcurrentyear,\pgfcalendardatetojulian,\pgfcalendarendiso,\pgfcalendarifdateday,\pgfcalendarifdatemonth,\pgfcalendarifdateyear,\pgfcalendarjuliantodate,\pgfcalendarmatchestrue,\pgfdeclareshape,\pgfextractx,\pgfkeys,\pgfkeyscurrentname,\pgfkeyssetvalue,\pgfkeysvalueof,\pgfmathparse,\pgfmathprintnumber,\pgfmathresult,\pgfmathsetlength,\pgfmathsetmacro,\pgfpathclose,\pgfpathlineto,\pgfpathmoveto,\pgfpoint,\pgfpointadd,\pgfpointanchor,\pgfpointdiff,\pgfpointscale,\pgfqkeys,\protected@write,\relax,\RequirePackage,\savedanchor,\scriptsize,\setcounter,\small,\southwest,\stepcounter,\string,\strut,\t,\the,\tikz@align@newline,\usetikzlibrary,\value,\x,\xdef} % -% +% % \title{Drawing Gantt Charts in \LaTeX\\with \TikZ} % \subtitle{The \texttt{pgfgantt} Package} -% \author{Wolfgang Skala\thanks{Department of Biosciences, University of Salzburg, Austria; \texttt{Wolfgang.Skala@sbg.ac.at}}} -% \date{\fileversion\\\filedate} +% \author{\texorpdfstring{Wolfgang Esser-Skala\thanks{Computational Systems Biology Group, Department of Biosciences and Medical Biology, University of Salzburg, Austria; \texttt{Wolfgang.Esser-Skala@plus.ac.at}}}{Wolfgang Esser-Skala}} +% \date{\fileversion\\\filedate} % \maketitle % % \begin{abstract} @@ -305,72 +252,13 @@ % \end{abstract} % % \clearpage\tableofcontents -% \changes{v5.0}{2018/01/10}{\cs{gantttitlecalendar} now recognizes the \texttt{decade} key.} -% \changes{v5.0}{2018/01/10}{Key \texttt{compress calendar} has been replaced by \texttt{time slot unit} to allow an additional level of compression (year).} -% \changes{v5.0}{2018/01/10}{The command \cs{ganttvrule} allows to draw general vertical rules (similar to the today rule). The keys \texttt{vrule}, \texttt{vrule offset}, \texttt{vrule label font} and \texttt{vrule label text} configure those rules.} -% \changes{v5.0}{2018/01/10}{The key \texttt{expand chart} was added, which specifies that a chart should expand horizontally to a given dimension.} -% \changes{v5.0}{2018/01/10}{The key \texttt{title label text} was added to allow fine-tuning of title label formatting.} -% \changes{v5.0}{2018/01/10}{Made \pack{pgfgantt} robust to \pack{amsgen}'s redefinition of \cs{@ifstar}.} -% \changes{v4.0}{2013/06/01}{The key \texttt{link label anchor} was renamed to \texttt{link label node}.} -% \changes{v4.0}{2013/06/01}{\cs{newganttchartelement} defines completely new chart elements.} -% \changes{v4.0}{2013/06/01}{The key \texttt{progress label anchor} was replaced by \texttt{bar}/\texttt{group}/\texttt{milestone progress label node}.} -% \changes{v4.0}{2013/06/01}{The keys \texttt{bar}/\texttt{group}/\texttt{milestone progress label anchor} were added.} -% \changes{v4.0}{2013/06/01}{The key \texttt{progress label font} was replaced by the keys \texttt{bar}/\texttt{group}/\texttt{milestone progress label font}.} -% \changes{v4.0}{2013/06/01}{The key \texttt{incomplete} was removed.} -% \changes{v4.0}{2013/06/01}{The keys \texttt{group right}/\texttt{left peak} and \texttt{group peaks} were replaced by \texttt{group right}/\texttt{left peak tip position}, \texttt{group peaks tip position}, \texttt{group right}/\texttt{left peak width}, \texttt{group peaks width}, \texttt{group right}/\texttt{left peak height} and \texttt{group peaks height}.} -% \changes{v4.0}{2013/06/01}{Chart elements are now nodes, so the corresponding styles must specify a node shape.} -% \changes{v4.0}{2013/06/01}{The key \texttt{time slot modifier} was renamed to \texttt{chart element start border}.} -% \changes{v4.0}{2013/06/01}{The keys \texttt{bar}/\texttt{group}/\texttt{milestone label inline anchor} were renamed to \texttt{bar}/\texttt{group}/\texttt{milestone inline label node}.} -% \changes{v4.0}{2013/06/01}{The keys \texttt{bar}/\texttt{group}/\texttt{milestone label shape anchor} were renamed to \texttt{bar}/\texttt{group}/\texttt{milestone inline label anchor}.} -% \changes{v4.0}{2013/06/01}{The keys \texttt{bar}/\texttt{group}/\texttt{milestone label anchor} were renamed to \texttt{bar}/\texttt{group}/\texttt{milestone label node}.} -% \changes{v4.0}{2013/06/01}{The key \texttt{title label anchor} was renamed to \texttt{title label node}.} -% \changes{v4.0}{2013/06/01}{\cs{gantttitlecalendar} prints a title calendar.} -% \changes{v4.0}{2013/06/01}{The keys \texttt{calendar week text} and \texttt{compress calendar} were added.} -% \changes{v4.0}{2013/06/01}{The key \texttt{newline shortcut} determines whether the shortcut for line breaks is defined in the chart. In this case, \cs{ganttalignnewline} allows line breaks in the node text.} -% \changes{v4.0}{2013/06/01}{The keys \texttt{today offset}, \texttt{today label font} and \texttt{today label node} were added.} -% \changes{v4.0}{2013/06/01}{The key \texttt{today} accepts a time slot specifier.} -% \changes{v4.0}{2013/06/01}{The canvas is now a node with shape \texttt{rectangle} by default.} -% \changes{v4.0}{2013/06/01}{\cs{newgantttimeslotformat} allows the user to define custom time slot formats.} -% \changes{v4.0}{2013/06/01}{The key \texttt{time slot format/start date} specifies the internal date representation of digit 1 in the \texttt{simple} time slot format.} -% \changes{v4.0}{2013/06/01}{The key \texttt{time slot format/base century} provides the century for autocompletion of two-digit years.} -% \changes{v4.0}{2013/06/01}{The key \texttt{time slot format} changes the format of time slot specifiers.} -% \changes{v4.0}{2013/06/01}{The \texttt{ganttchart} environment now requires two mandatory arguments.} -% -% \changes{v3.0}{2012/01/25}{\cs{setganttlinklabel} specifies the label for all links of a certain type. The \texttt{link label} key locally overrides any label set by this command.} -% \changes{v3.0}{2012/01/25}{The \texttt{chart element} shape supports four additional anchors (\texttt{on left}, \texttt{on top}, \texttt{on right} and \texttt{on bottom}).} -% \changes{v3.0}{2012/01/25}{\cs{@gtt@get} has been renamed to \cs{ganttvalueof} to provide a convenient access for link type authors.} -% \changes{v3.0}{2012/01/25}{\cs{@gtt@keydef} and \cs{@gtt@stylekeydef} have been rewritten to support \texttt{pgfkey}'s abilities to store key values.} -% \changes{v3.0}{2012/01/25}{New auxiliary macros for \cs{newganttlinkstyle}: \cs{xLeft}, \cs{xRight}, \cs{yUpper}, \cs{yLower}, \cs{ganttsetstartanchor}, \cs{ganttsetendanchor} and \cs{ganttlinklabel}.} -% \changes{v3.0}{2012/01/25}{Completely rewrote the code for links (again). Definition of new link types is now possible (via \cs{newganttlinktype} and \cs{newganttlinktypealias}).} -% \changes{v3.0}{2012/01/25}{The \texttt{bar/group/milestone label shape anchor} keys allow for a fine-tuned placement of chart element labels.} -% \changes{v3.0}{2012/01/25}{All style keys (\texttt{canvas}, \texttt{bar} etc.) only support the common \TikZ\ style key syntax.} -% \changes{v2.1}{2011/11/10}{The \texttt{inline} key moves labels close to their respective chart elements.} -% \changes{v2.1}{2011/11/10}{Added three keys (\texttt{bar/group/milestone label inline anchor}) for placing inline labels.} -% \changes{v2.1}{2011/11/10}{The \texttt{ganttchart} environment may be used outside a \texttt{tikzpicture}.} -% \changes{v2.0}{2011/10/10}{The syntax of \cs{ganttlink} was completely changed. The command now takes one optional and \textit{two} mandatory arguments. The latter specify the name of the chart elements to be linked. Consequently, the keys \texttt{b-b}, \texttt{b-m}, \texttt{m-b} and \texttt{m-m} were removed. The keys \texttt{s-s}, \texttt{s-f}, \texttt{f-s} and \texttt{f-f} are now values for the \texttt{link type} key.} -% \changes{v2.0}{2011/10/10}{The optional argument of \cs{ganttnewline} now also accepts a style.} -% \changes{v2.0}{2011/10/10}{Removed the \texttt{hgrid shift} and \texttt{last line height} keys.} -% \changes{v2.0}{2011/10/10}{Removed the \texttt{vgrid lines list} key, as its behaviour can be simulated by an appropriate \meta{style list} for \texttt{vgrid}.} -% \changes{v2.0}{2011/10/10}{Added style lists for the horizontal and vertical grid.} -% \changes{v2.0}{2011/10/10}{Removed the \texttt{vgrid style} key.} -% \changes{v2.0}{2011/10/10}{Completely rewrote the calculation of coordinates.} -% \changes{v2.0}{2011/10/10}{The \texttt{x unit}, \texttt{y unit title} and \texttt{y unit chart} keys specify the width of time slots and the height of title or chart lines, respectively. Thus, one can draw titles whose height differs from the rest of the chart. Furthermore, the $x$- and $y$-dimensions of the chart are independent of the dimensions of the surrounding \texttt{tikzpicture}.} -% \changes{v1.1}{2011/04/18}{\texttt{link tolerance} decides whether a five- or a three-part link is drawn.} -% \changes{v1.1}{2011/04/18}{\texttt{milestone label text} configures the text of a milestone label.} -% \changes{v1.1}{2011/04/18}{\texttt{bar label text} configures the text of a bar label.} -% \changes{v1.1}{2011/04/18}{The \texttt{time slot modifier} key has been added. If set to zero, all $x$-coordinates are interpreted as given, without regarding them as time slots.} -% \changes{v1.1}{2011/04/18}{The \texttt{vgrid lines list} key determines the number of vertical grid lines drawn.} -% \changes{v1.1}{2011/04/18}{The introduction clarifies what I mean by ``a current \textsc{pgf} installation''.} -% \changes{v1.1}{2011/04/18}{\texttt{group label text} configures the text of a group label.} -% \changes{v1.0}{2011/03/01}{Initial release} -% % % \clearpage\section{Introduction} % -% The \pack{pgfgantt} package allows you to draw Gantt charts in \LaTeX. Thus, you can describe simple project schedules without having to include images produced by external programs. Similar to Martin Kumm's \pack{gantt} package\footnote{\url{http://www.martin-kumm.de/tex_gantt_package.php}} (which inspired \pack{pgfgantt}'s fundamental aspects), \pack{pgfgantt} bases upon \textsc{pgf} and its \TikZ\ frontend\footnote{\url{http://ctan.org/tex-archive/graphics/pgf/}}. Besides, it provides a comprehensive (and portable) alternative to \pack{pst-gantt}\footnote{\url{http://ctan.org/tex-archive/graphics/pstricks/contrib/pst-gantt/}}. +% The \pack{pgfgantt} package allows you to draw Gantt charts in \LaTeX. Thus, you can describe simple project schedules without having to include images produced by external programs. Similar to Martin Kumm's \pack{gantt} package\footnote{\url{https://www.martin-kumm.de/tex_gantt_package.php}} (which inspired \pack{pgfgantt}'s fundamental aspects), \pack{pgfgantt} bases upon \textsc{pgf} and its \TikZ\ frontend\footnote{\url{https://ctan.org/pkg/pgf/}}. Besides, it provides a comprehensive (and portable) alternative to \pack{pst-gantt}\footnote{\url{https://ctan.org/pkg/pst-gantt/}}. % % \paragraph{Requirements} \pack{pgfgantt} requires a \textit{current} \textsc{pgf} installation. Note that the version number must at least be 2.10, dated October 25th, 2010. Furthermore, \pack{pgfgantt}~\fileversion\ and above is not fully downwards compatible. -% +% % \paragraph{Suggestions} Please report any suggestions and improvements at the project's GitHub page (\url{https://github.com/skafdasschaf/latex-pgfgantt}). % % \paragraph{Acknowledgements} I would like to thank the following people for their ideas concerning new features: @@ -425,7 +313,7 @@ % \end{ganttchart} % \end{center} % -% +% % \subsection{Specifying Keys} % % \textit{Keys} (sometimes called \textit{options}) modify the output from \pack{pgfgantt}'s commands. You may specify a key in two ways: (1) Pass it to the optional argument present in each command, e.\,g. @@ -439,7 +327,7 @@ % Since \pack{pgfgantt} uses the \pack{pgfkeys} package for key management, all its keys reside in the |/pgfgantt/| path. However, if you set your keys by one of the methods explained above, this path is automatically prepended to each key. % % \subsection{The Canvas} -% +% % Let us have a look at the basic anatomy of a Gantt chart and define some common terms. Each \textit{chart} consists of several \textit{lines}, which may contain one or more \textit{title elements} (at the top) or \textit{chart elements} (such as bars, groups and milestones). From left to right, the chart is divided into an integer number of \textit{time slots} that represent the basic $x$-unit. % % The \DescribeEnv{ganttchart}|ganttchart| environment draws a single Gantt chart: @@ -449,7 +337,7 @@ % \end{ganttchart} % \end{texcode} % The environment has one optional argument, which specifies the \meta{options} for the chart, and two mandatory arguments, which indicate the start and end time slot specifier. Although you will often put a |ganttchart| into a |tikzpicture| environment, you may actually use this environment on its own. \pack{pgfgantt} checks whether a chart is surrounded by a |tikzpicture| and adds this environment if necessary. -% +% % \begin{key}{time slot format}{\meta{format}}{simple} % Sets the \meta{format} of time slot specifiers. A \textbf{time slot specifier} (abbreviated ``tss'') denotes a certain time slot along the horizontal axis. \pack{pgfgantt} defines a range of formats: % \begin{itemize} @@ -469,23 +357,23 @@ % \textit{Examples:} \texttt{2013-03-14}, \texttt{13/03/14}, \texttt{2013.3.14} % \end{itemize} % \end{key} -% +% % \noindent Two subkeys of \opt{time slot format} let you configure \pack{pgfgantt}'s behavior regarding automatic completion of abbreviated dates: -% +% % \begin{key}{time slot format/base century}{\meta{year}}{2000} % Sets the century for auto-completion of two-digit years (used by the time slot formats \texttt{little-endian}, \texttt{middle-endian} and \texttt{big-endian}). Consequently, default settings convert a year like \texttt{13} to \texttt{2013}. % \end{key} -% +% % \begin{key}{time slot format/start date}{\meta{ISO-standard date}}{2000-01-01} % Numbers denoting time slots in the \texttt{simple} format are internally converted to a date, where \texttt{1} is converted to \meta{ISO-standard date}, \texttt{2} to $\meta{ISO-standard date} + 1$ etc. % \end{key} -% +% % \bigskip\noindent Advanced users may add their own time slot \DescribeMacro{\newgantttimeslotformat}formats: % \begin{texcode} % \newgantttimeslotformat`\marg{name}\marg{converter code}' % \end{texcode} % Defines a new time slot format called \meta{name}. The \meta{converter code} must convert the time slot specifier stored in |#1| to its corresponding Julian day number (see section~57 of the \TikZ\ manual) and assign this number to the count register |#2|. The \meta{converter code} is executed within a \TeX\ group, so you may use temporary macros like |\@tempa|, counts like |\@tempcnta| etc. -% +% % For example, we would like to create a format called \texttt{stardate}, where dates are given as ``\meta{year}\texttt{.}\meta{day of year}''. Thus, we will enter 24th February 2259 as ``\texttt{2259.55}''. To this end, we write the following code: % \par\bigskip\noindent % \begin{texcode}[numbers=left] @@ -498,10 +386,10 @@ % \advance#2 by-1\relax% % \advance#2 by\stardateday\relax% % } -% +% % \begin{ganttchart}[ % hgrid, -% vgrid, +% vgrid, % time slot format=stardate % ]{2259.55}{2259.67} % \gantttitlecalendar{year, month=name, day} \\ @@ -517,18 +405,18 @@ % \advance#2 by-1\relax% % \advance#2 by\stardateday\relax% % } -% +% % \begin{ganttchart}[ % hgrid, -% vgrid, +% vgrid, % time slot format=stardate % ]{2259.55}{2259.67} % \gantttitlecalendar{year, month=name, day} \\ % \end{ganttchart} % \end{center} -% +% % \noindent The macro |\decomposestardate| (lines 2--4) has two delimited arguments: The first one is delimited by a period and the second one by |\relax|. The call in line 5 decomposes the tss stored in |#1| and saves the day in |\stardateday| and the year in |\stardateyear|. |\pgfcalendardatetojulian| (section~57.1.1 of the \TikZ\ manual) calculates the Julian date of the first day of |\stardateyear| and stores it in |#2| (line 6). We then subtract 1 from |#2| (line 7) and add the |\stardateday| (line 8). -% +% % \begin{key}[./style=]{canvas}{\meta{style}}{shape=rectangle, draw, fill=white} % The \opt{canvas} key changes the appearance of the canvas. \meta{style} is a list of \TikZ\ keys suitable for the \meta{options} of a \TikZ\ node (such as |shape=rectangle|, |fill| or |draw|; see chapter~16 of the \TikZ\ manual). By default, the canvas is a white rectangle with a black frame. % \par\bigskip\noindent @@ -617,9 +505,9 @@ % \opt{hgrid} draws a horizontal grid which starts immediately below the last title element. The key can be specified in four different ways: Firstly, \opt{hgrid}|=false| eliminates the horizontal grid. You may omit this declaration, since it is the default. Secondly, both \opt{hgrid} and \opt{hgrid}|=true| activate the horizontal grid, which is then drawn in the default style |dotted|. Finally, \opt{hgrid}|=|\meta{style list} draws the horizontal grid in the given \meta{style list} (see below). % % \opt{hgrid style} changes the style of single horizontal grid lines that are drawn with |\ganttnewline[grid]| (see section~\ref{ssc:LineBreaks}). -% +% % The \opt{vgrid} key governs the vertical grid; otherwise, use it exactly like \opt{hgrid}. -% +% % \textit{Style lists} allow you to draw the grid lines in different styles. Each style list consists of several \textit{style list items} separated by a comma. A style list item has the general syntax |*{|\meta{n}|}{|\meta{style}|}| and orders the package to repeat the \meta{style} \meta{n}-times. (This syntax is reminiscent of column specifications in a |tabular| environment.) Thus, the list |*2{red}, *1{green}, *{10}{blue, dashed}| instructs \pack{pgfgantt} to draw first two red vertical grid lines, then a green one and finally ten dashed blue lines. If any grid lines remain to be drawn at the end of the list, the package starts again at the beginning of the list. % \par\bigskip\noindent % \begin{texcode} @@ -642,7 +530,7 @@ % \ganttbar{}{9}{20} % \end{ganttchart} % \end{center} -% +% % In most situations, you can omit the multiplier |*1|. Hence, the following style lists are equal:\\ % |{*1{red}, *1{blue, dashed}}|\\ % |{{red}, {blue, dashed}}|\\ @@ -653,7 +541,7 @@ % \begin{minipage}[t]{.45\textwidth} % \begin{texcode} % % wrong code -% +% % \begin{ganttchart}[ % hgrid=true, % vgrid={{red, dotted}} @@ -667,7 +555,7 @@ % \begin{minipage}[t]{.45\textwidth} % \begin{texcode} % % correct code -% +% % \begin{ganttchart}[ % hgrid=true, % vgrid={*1{red, dotted}} @@ -717,7 +605,7 @@ % \end{ganttchart} % \end{center} % \end{key} -% +% % \begin{key}{today}{\meta{tss}}{none} % \keyline{today offset}{\meta{number}}{1} % \keyline[/.style=]{today rule}{\meta{style}}{dashed, line width=1pt} @@ -787,13 +675,13 @@ % \end{ganttchart} % \end{center} % \end{key} -% -% +% +% % \subsection{Line Breaks between Chart Elements} % \label{ssc:LineBreaks} % % \pack{pgfgantt} does not automatically begin a new line after finishing a \DescribeMacro{\ganttnewline}chart element. Instead, you must insert an explicit line break with |\ganttnewline|. -% +% % \begin{key}{newline shortcut}{\meta{boolean}}{true} % If true, \DescribeMacro{\\}|\\| is defined as a shortcut for |\ganttnewline| within a |ganttchart| environment, so that the syntax is reminiscent of \LaTeX's |tabular| enviroment. % \par\bigskip\noindent @@ -868,7 +756,7 @@ % }{1}{3} % \end{ganttchart} % \end{center} -% +% % Even if you prefer a canvas without a horizontal grid, you may nevertheless want to separate certain lines by a grid rule. For this purpose, specify the optional argument |[grid]| for |\ganttnewline| (or |\\|), which draws a grid rule in \opt{hgrid style} between the current and the new line. Alternatively, directly give the desired style as optional argument. % \par\bigskip\noindent % \begin{texcode} @@ -921,7 +809,7 @@ % \gantttitlelist`\oarg{options}\marg{pgffor list}\marg{length of each element}' % \end{texcode} % This macro generates one title element for each element of the \meta{pgffor list}. The second mandatory argument specifies the \meta{length of each element}. Refer to section~56 of the \TikZ\ manual for the detailed syntax for the \meta{pgffor list}. -% +% % A simple application is to draw twelve title elements that contain the numbers from 1 to 12. The \meta{pgffor list} is |1,...,12|. % \par\bigskip\noindent % \begin{texcode} @@ -942,9 +830,9 @@ % \begin{texcode} % \gantttitle{1}{1} \gantttitle{2}{1} `\dots' \gantttitle{12}{1} \\ % \end{texcode} -% +% % As an advanced example, we will draw seven title elements containing the names of the weekdays (``Mon'' to ``Sun''). To this end, we introduce an additional key: -% +% % \begin{key}{title list options}{\meta{pgffor options}}{var=\string\x, evaluate=\string\x} % Changes the \meta{pgffor options} of the |\foreach| command called by |\gantttitlelist| (see section~56 of the \TikZ\ manual). The macro that yields the labels to be printed by |\gantttitlelist| must be called |\x|. % \par\bigskip\noindent\shorthandoff{"} @@ -971,7 +859,7 @@ % \end{ganttchart} % \end{center}\shorthandon{"} % \end{key} -% +% % \bigskip While you actually may build any chart title with the two commands described previously, \DescribeMacro{\gantttitlecalendar}|\gantttitlecalendar| saves a lot of time when you wish to create elaborate calendars: % \begin{texcode} % \gantttitlecalendar`\oarg{options}\marg{calendar lines}' @@ -999,7 +887,7 @@ % \bottomrule % \end{tabular} % \end{center} -% +% % The \meta{number} for the \texttt{week} line type is the number of the first week in the calendar. % \par\bigskip\noindent % \begin{texcode} @@ -1024,16 +912,16 @@ % \ganttbar{}{2013-01-14}{2013-01-17} % \end{ganttchart}\hspace*{-51.4pt} % \end{center} -% +% % You can easily add new output formats for \texttt{month} and \texttt{weekday}. The predefined ones use the macros described in section~57.1.3 of the \TikZ\ manual. For example, |weekday=name| calls |\pgfcalendarweekdayname|. Thus, new macros called |\pgfcalendarmonth|\textcolor{RoyalBlue}{\meta{output format}} or |\pgfcalendarweekday|\textcolor{RoyalBlue}{\meta{output format}} will provide additional \meta{output format}s for |month| and |weekday|, respectively. -% +% % A weekday output format called |letter|, which displays a weekday as single letter, might be implemented as follows: % \par\bigskip\noindent % \begin{texcode} % \def\pgfcalendarweekdayletter#1{% % \ifcase#1M\or T\or W\or T\or F\or S\or S\fi% % } -% +% % \begin{ganttchart}[ % hgrid, % vgrid, @@ -1050,7 +938,7 @@ % \def\pgfcalendarweekdayletter#1{% % \ifcase#1M\or T\or W\or T\or F\or S\or S\fi% % } -% +% % \begin{ganttchart}[ % hgrid, % vgrid, @@ -1063,7 +951,7 @@ % } % \end{ganttchart} % \end{center} -% +% % \begin{key}{calendar week text}{\meta{format}}{Week\string~\string\currentweek} % Changes the text displayed in a week title element. In \meta{format}, four additional macros are available: \DescribeMacro{\currentweek}|\currentweek| is the current week number; \DescribeMacro{\startyear}|\startyear|, \DescribeMacro{\startmonth}|\startmonth| and \DescribeMacro{\startday}|\startday| expand to the year, month and day of the current week's Monday. % \par\bigskip\noindent @@ -1100,7 +988,7 @@ % \end{ganttchart} % \end{center} % \end{key} -% +% % \begin{key}{time slot unit}{\texttt{day}\space\textbar\space\texttt{month}\space\textbar\space\texttt{year}}{day} % By default, one \textit{calendar day} is one time slot wide. With \opt{time slot unit}\texttt{=month}, one \textit{month} corresponds to one time slot. Consequently, in such calendars only |year| and |month| are sensible line types for |\gantttitlecalendar|, and the time slot format \texttt{isodate-yearmonth} is especially suited. % \par\bigskip\noindent @@ -1226,7 +1114,7 @@ % \end{ganttchart} % \end{center} % \end{key} -% +% % \begin{key}{title left shift}{\meta{factor}}{0} % \keyline{title right shift}{\meta{factor}}{0} % \keyline{title top shift}{\meta{factor}}{0} @@ -1394,7 +1282,7 @@ % % % \subsection{Predefined Chart Elements} -% +% % \pack{pgfgantt} predefines three chart elements: % \begin{enumerate} % \item \DescribeMacro{\ganttbar}\textit{Bars} indicate the duration of a task or one of its parts. @@ -1411,7 +1299,7 @@ % \end{texcode} % \end{enumerate} % Each of these macros draws a \meta{label}ed chart element from the \meta{start tss} to the \meta{end tss} (or at the given \meta{tss} in case of |\ganttmilestone|). -% +% % \par\bigskip\noindent % \begin{texcode} % \begin{ganttchart}[vgrid, hgrid]{1}{12} @@ -1443,7 +1331,7 @@ % \begin{minipage}[t]{.49\textwidth} % \begin{texcode} % % Short version -% +% % \begin{ganttchart}[ % vgrid, % hgrid @@ -1459,7 +1347,7 @@ % \begin{minipage}[t]{.47\textwidth} % \begin{texcode} % % Long version -% +% % \begin{ganttchart}[ % vgrid, % hgrid @@ -1475,7 +1363,7 @@ % \end{ganttchart} % \end{texcode} % \end{minipage} -% +% % \begin{center} % \begin{ganttchart}[ % vgrid, @@ -1488,7 +1376,7 @@ % \ganttlinkedbar{Task 3}{7}{11} % \end{ganttchart} % \end{center} -% +% % \begin{key}{chart element start border}{\texttt{left}\space\textbar\space\texttt{right}}{left} % Determines which border of the start time slot a chart element touches. \texttt{left} is the behavior usually expected, while \texttt{right} strictly interprets the start time slot as an $x$-coordinate. % \par\bigskip\noindent @@ -1511,10 +1399,10 @@ % \end{ganttchart} % \end{center} % \end{key} -% -% +% +% % \subsubsection{Options: Chart Element Appearance} -% +% % The following options are similar for all predefined (and user-defined) chart elements: % % \begin{key}[/.style=]{bar}{\meta{style}}{shape=ganttbar, inner sep=0pt, draw, fill=white} @@ -1558,9 +1446,9 @@ % \end{center} % \end{key} % -% +% % \subsubsection{Options: Label Formatting} -% +% % \begin{key}{bar label text}{\meta{text}}{\string\strut\#1} % \keyline{group label text}{\meta{text}}{\string\strut\#1} % \keyline{milestone label text}{\meta{text}}{\string\strut\#1} @@ -1611,7 +1499,7 @@ % \end{ganttchart} % \end{center} % \end{key} -% +% % \begin{key}{inline}{\meta{boolean}}{false} % \keyline{bar inline label anchor}{\meta{anchor}}{center} % \keyline{group inline label anchor}{\meta{anchor}}{center} @@ -1650,10 +1538,10 @@ % \end{ganttchart} % \end{center} % \end{key} -% -% +% +% % \subsubsection{Options: Chart Element Positioning} -% +% % \begin{key}{bar left shift}{\meta{factor}}{0} % \keyline{bar right shift}{\meta{factor}}{0} % \keyline{bar top shift}{\meta{factor}}{.3} @@ -1667,7 +1555,7 @@ % \keyline{milestone top shift}{\meta{factor}}{.3} % \keyline{milestone height}{\meta{factor}}{.4} % Shift the coordinates of a chart element's borders (\opt{\dots\ shift}) and change its height (\opt{\dots\ height}). -% +% % \begin{center} % \begin{tikzpicture}[x=.5cm, y=1cm] % \begin{ganttchart}[vgrid, hgrid]{1}{8} @@ -1701,7 +1589,7 @@ % \draw[-latex,teal] (8,-4.2) node[right] {End time slot (6)} -- (6,-3.8); % \end{tikzpicture} % \end{center} -% +% % The three following figures illustrate the distances modified by these keys. The first figure shows a Gantt chart with a bar, two lines and one time slot. % \begin{center} % \begin{tikzpicture}[x=8cm, y=2cm] @@ -1809,7 +1697,7 @@ % -- (.4,-.85); % \end{tikzpicture} % \end{center} -% +% % \begin{key}{group right peak tip position}{\meta{fraction}}{0.5} % \keyline{group right peak width}{\meta{factor}}{0.4} % \keyline{group right peak height}{\meta{factor}}{0.1} @@ -1820,7 +1708,7 @@ % \keyline{group peaks width}{\meta{factor}}{\textrm{(none)}} % \keyline{group peaks height}{\meta{factor}}{\textrm{(none)}} % Change the appearance of the peaks at both ends of a group. By default, both the left and right peak are 0.4~units wide and 0.1~units high, their tips lie between the peak sides. The \opt{group peaks \dots} keys set the dimensions for both peaks simultaneously. The figure below exemplifies the keys that apply to the left peak. -% +% % \begin{center} % \begin{tikzpicture}[x=8cm, y=2cm] % \small @@ -1845,7 +1733,7 @@ % \end{tikzpicture} % \end{center} % \end{key} -% +% % For example, you might devise the following layout: Bars are small and rounded; they do not touch the borders of their start and end time slots. Groups stay within the start and end time slot, and the peaks are more acute. % \par\bigskip\noindent % \begin{texcode} @@ -1887,12 +1775,12 @@ % \end{ganttchart} % \end{center} % \end{key} -% -% +% +% % \subsubsection{Options: Progress} -% +% % The \textit{progress} of a chart element illustrates the extent to which this element has been completed. -% +% % \begin{key}{progress}{\texttt{none}\space\textbar\space\texttt{today}\space\textbar\space\meta{number}}{none} % Indicates that a chart element is \meta{number} percent complete. The value \texttt{none} turns progress calculations off. % \par\bigskip\noindent @@ -1950,7 +1838,7 @@ % \end{ganttchart} % \end{center} % \end{key} -% +% % \begin{key}[/.style=]{bar incomplete}{\meta{style}}{/pgfgantt/bar, fill=black!25} % \keyline[/.style=]{group incomplete}{\meta{style}}{/pgfgantt/group, fill=black!25} % \keyline[/.style=]{milestone incomplete}{\meta{style}}{/pgfgantt/milestone, fill=black!25} @@ -1993,7 +1881,7 @@ % \end{ganttchart} % \end{center} % \end{key} -% +% % \begin{key}{progress label text}{\meta{text}}{\string\pgfmathprintnumber[precision=0, verbatim]\{\#1\}\string\% complete} % \keyline{bar progress label anchor}{\meta{anchor}}{east} % \keyline{bar progress label font}{\meta{font commands}}{\string\scriptsize} @@ -2047,16 +1935,16 @@ % \end{ganttchart} % \end{center} % \end{key} -% -% +% +% % \subsubsection{New Node Shapes} % \label{sss:NewNodeShapes} -% +% % \pack{pgfgantt} defines three new node shapes: -% +% % \bigskip\noindent % (1) The \texttt{ganttbar} node shape derives from shape \texttt{rectangle} (section~48.2 of the \TikZ\ manual). It provides four additional anchors: \texttt{on top}, \texttt{on bottom}, \texttt{on left} and \texttt{on right}. The \meta{fraction} set by the following keys indicates a position between the left and right (for \texttt{on top} and \texttt{on bottom}) or upper and lower border (for \texttt{on left} and \texttt{on right}), similarly to the \opt{/tikz/pos} key. -% +% % \begin{key}{on top fraction}{\meta{fraction}}{0.5} % \keyline{on bottom fraction}{\meta{fraction}}{0.5} % \keyline{on left fraction}{\meta{fraction}}{0.5} @@ -2097,7 +1985,7 @@ % \end{tikzpicture} % \end{center} % \end{key} -% +% % \bigskip\noindent % (2) The \texttt{ganttgroup} node shape also derives from shape \texttt{rectangle}. It provides the additional anchors \texttt{on top}, \texttt{on bottom}, \texttt{on left}, \texttt{on right} (same as above), \texttt{left peak} and \texttt{right peak}. % \begin{center} @@ -2138,7 +2026,7 @@ % node [\placement] {\scriptsize\texttt{(s.\anchor)}}; % \end{tikzpicture} % \end{center} -% +% % \bigskip\noindent % (3) The \texttt{ganttmilestone} node shape derives from shape \texttt{diamond} (section~48.3 of the \TikZ\ manual), but does not consider any aspect ratio. It provides the additional anchors \texttt{on top}, \texttt{on bottom}, \texttt{on left} and \texttt{on right} (same as above). % \begin{center} @@ -2172,19 +2060,19 @@ % node [\placement] {\scriptsize\texttt{(s.\anchor)}}; % \end{tikzpicture} % \end{center} -% -% +% +% % \subsection{Defining Custom Chart Elements} -% +% % You may define completely new chart elements with % \begin{texcode} % \newganttchartelement`\marg{name}\marg{new default key values}' % \newganttchartelement*`\marg{name}\marg{new default key values}' % \end{texcode} % \DescribeMacro{\newganttchartelement}|\newganttchartelement| (unstarred) defines a new chart element |\gantt|\textcolor{RoyalBlue}{\meta{name}} and the corresponding |\ganttlinked|\textcolor{RoyalBlue}{\meta{name}}. These chart element macros take one optional argument \meta{options} and \textit{three} mandatory arguments \meta{label}, \meta{start tss} and \meta{end tss} (like |\ganttbar|). -% +% % Chart element macros defined by the starred form, \DescribeMacro{\newganttchartelement*}|\newganttchartelement*|, take the same single optional argument, but \textit{two} mandatory arguments \meta{label} and \meta{tss} (like |\ganttmilestone|). -% +% % For each new chart element, |\newganttchartelement| also introduces a set of nine value-storing keys and five style keys and assigns default values to them: % \begin{center} % \begin{tabular}{l >{\ttfamily}l} @@ -2212,13 +2100,13 @@ % \end{tabular}\hspace*{-120pt} % \end{center} % Consequently, a new chart element will look like the standard |\ganttbar| unless you introduce some \meta{new default key values}. -% +% % Let us define a new chart element called ``foobar'', which is basically a fancy-colored and -shaped bar: % \par\bigskip\noindent % \begin{texcode} % \definecolor{foobarblue}{RGB}{0,153,255} % \definecolor{foobaryellow}{RGB}{234,187,0} -% +% % \newganttchartelement{foobar}{ % foobar/.style={ % shape=rounded rectangle, @@ -2237,7 +2125,7 @@ % foobar left shift=-.1, % foobar right shift=.1 % } -% +% % \begin{ganttchart}[ % vgrid, % progress=today, @@ -2253,7 +2141,7 @@ % \begin{center} % \definecolor{foobarblue}{RGB}{0,153,255} % \definecolor{foobaryellow}{RGB}{234,187,0} -% +% % \newganttchartelement{foobar}{ % foobar/.style={ % shape=rounded rectangle, @@ -2272,7 +2160,7 @@ % foobar left shift=-.1, % foobar right shift=.1 % } -% +% % \begin{ganttchart}[ % vgrid, % progress=today, @@ -2285,7 +2173,7 @@ % \ganttlinkedfoobar{Foobar 3}{9}{12} % \end{ganttchart} % \end{center} -% +% % % \subsection{Links} % \label{ssc:Links} @@ -2294,7 +2182,7 @@ % \begin{texcode} % \ganttlink`\oarg{options}\marg{start element name}\marg{end element name}' % \end{texcode} -% +% % \begin{key}{name}{\meta{name}}{\textrm{(empty)}} % The \DescribeMacro{\ganttlink}|\ganttlink| macro connects two elements, which are specified by their \meta{name}s. By default, chart elements are named automatically: The first one receives the name \texttt{elem0}, the second one is called \texttt{elem1} and so on. However, the \opt{name} key allows you to assign a name to each chart element. % \par\bigskip\noindent @@ -2348,7 +2236,7 @@ % \end{ganttchart} % \end{center} % \end{key} -% +% % \begin{key}[/.style=]{link}{\meta{style}}{-latex, rounded corners=1pt} % Sets the appearance of the link. % \par\bigskip\noindent @@ -2490,7 +2378,7 @@ % \DescribeMacro{\newganttlinktype}It defines a new link \meta{type} which is drawn by the given \meta{TikZ code}. When you write this code, you do not have to know the final absolute coordinates of each link type instance. On the contrary, several commands that are only available in the second argument of |\newganttlinktype| help you to design generic link types: % \begin{itemize} % \item First, you have to choose the border points of the chart elements the link will connect. For this purpose, \DescribeMacro{\ganttsetstartanchor}|\ganttsetstartanchor{|\meta{anchor}|}| and \DescribeMacro{\ganttsetendanchor}|\ganttsetendanchor{|\meta{anchor}|}| select an \meta{anchor} of the start and end element, respectively. See the figures in section~\ref{sss:NewNodeShapes} for possible \meta{anchor}s of the default chart element shapes. You may specify a certain \meta{fraction} for anchors like \texttt{on top} by |\ganttsetstartanchor{on top=|\meta{fraction}|}|. -% +% % \pack{pgfgantt} sets the default anchors to |\ganttsetstartanchor{east}| and |\ganttsetendanchor{west}|, so you even may omit these two commands. % \item The two macro pairs \DescribeMacro{\xLeft}|\xLeft|/\DescribeMacro{\yUpper}|\yUpper| and \DescribeMacro{\xRight}|\xRight|/\DescribeMacro{\yLower}|\yLower| provide the $x$- and $y$-coordinates of the link start and end points, respectively. % \begin{center}\makeatletter @@ -2509,7 +2397,7 @@ % \end{itemize} % \end{enumerate} % \end{key} -% +% % \begin{texcode} % \newganttlinktypealias`\marg{new type}\marg{existing type}' % \end{texcode} @@ -2524,7 +2412,7 @@ % \newganttlinktypealias{sta-to-sta}{s-s} % \newganttlinktypealias{fin-to-fin}{f-f} % \setganttlinklabel{fin-to-fin}{f2f} -% +% % \begin{ganttchart}[vgrid, hgrid]{1}{12} % \gantttitle{Title}{12} \\ % \ganttbar{Task 1}{2}{3} \\ @@ -2538,7 +2426,7 @@ % \newganttlinktypealias{sta-to-sta}{s-s} % \newganttlinktypealias{fin-to-fin}{f-f} % \setganttlinklabel{fin-to-fin}{f2f} -% +% % \begin{ganttchart}[vgrid, hgrid]{1}{12} % \gantttitle{Title}{12} \\ % \ganttbar{Task 1}{2}{3} \\ @@ -2552,7 +2440,7 @@ % \par\bigskip\noindent % \begin{texcode} % \usetikzlibrary{decorations.pathmorphing} -% +% % \newganttlinktype{zigzag}{ % \ganttsetstartanchor{on right=1} % \ganttsetendanchor{on left=0} @@ -2560,7 +2448,7 @@ % (\xLeft, \yUpper) -- % (\xRight, \yLower); % } -% +% % \begin{ganttchart}[vgrid, hgrid]{1}{12} % \gantttitle{Title}{12} \\ % \ganttbar{Task 1}{2}{3} \\ @@ -2612,7 +2500,7 @@ % (\xRight, \yLower); % } % \setganttlinklabel{drur}{a fancy link} -% +% % \begin{ganttchart}[ % vgrid, % hgrid, @@ -2648,7 +2536,7 @@ % (\xRight, \yLower); % } % \setganttlinklabel{drur}{a fancy link} -% +% % \begin{ganttchart}[ % vgrid, % hgrid, @@ -2663,7 +2551,7 @@ % \end{ganttchart} % \end{center} % (Please remove the comments if you copy the code above -- they will confuse \TikZ\ and generate tons of errors.) -% +% % \begin{key}{link label}{\meta{label}}{\textrm{(empty)}} % \keyline{link label font}{\meta{font commands}}{\string\scriptsize\string\itshape} % \keyline[/.style=]{link label node}{\meta{options}}{anchor=west, font=\string\ganttvalueof\{link label font\}} @@ -2812,9 +2700,9 @@ % \ganttlink[link mid=.159]{pp}{T2A} % \end{ganttchart} % \end{center} -% +% % \bigskip -% The second example demonstrates that \pack{pgfgantt} is really flexible: Even an appearance quite different from the standard layout is possible. (More precisely, the code below tries to reproduce the Gantt chart from the English Wikipedia site, see \url{http://en.wikipedia.org/wiki/Gantt_chart}.) +% The second example demonstrates that \pack{pgfgantt} is really flexible: Even an appearance quite different from the standard layout is possible. (More precisely, the code below tries to reproduce the Gantt chart from the English Wikipedia site, see \url{https://en.wikipedia.org/wiki/Gantt_chart}.) % \par\bigskip\noindent % \begin{texcode} % \definecolor{barblue}{RGB}{153,204,254} @@ -2967,8 +2855,8 @@ % \end{ganttchart} % \end{center} % -% -% \StopEventually{\PrintIndex\PrintChanges} +% +% \StopEventually{\PrintIndex} % \lstDeleteShortInline| % \MakeShortVerb{\|} % \clearpage\section{Implementation} @@ -3050,7 +2938,7 @@ % % % \subsection{The Horizontal and Vertical Grid} -% +% % \begin{intmacro}{\gtt@currentline} % \begin{intmacro}{\gtt@lasttitleline} % \begin{intmacro}{\gtt@currgrid} @@ -3202,7 +3090,7 @@ % % % \subsection{Time Slot Formats} -% +% % \begin{intmacro}{\gtt@smugglecount} % |\gtt@smugglecount|\marg{count} smuggles the local value of a count register over the end of a \TeX\ group. % \begin{macrocode} @@ -3390,11 +3278,11 @@ % \end{macrocode} % \end{intmacro} % \end{option} -% -% +% +% % \subsection{The Main Environment} % \label{ssc:ImplMain} -% +% % \begin{option}{x unit} % \begin{option}{y unit title} % \begin{option}{y unit chart} @@ -4222,10 +4110,10 @@ } % \end{macrocode} -% -% +% +% % \subsection{Chart Elements} -% +% % \begin{option}{progress} % \begin{intmacro}{\gtt@progress} % \begin{option}{progress label text} @@ -4606,7 +4494,7 @@ % \end{option} % \end{macro} % \end{macro} -% \clearpage +% \clearpage % \begin{macro}{\ganttgroup} % \begin{macro}{\ganttlinkedgroup} % \begin{option}{group} @@ -4772,10 +4660,10 @@ % \end{option} % \end{macro} % \end{macro} -% -% +% +% % \subsection{Node Shapes} -% +% % \begin{option}{on top fraction} % \begin{option}{on bottom fraction} % \begin{option}{on left fraction} @@ -5067,11 +4955,11 @@ } % \end{macrocode} -% +% % % \subsection{Links} % \label{ssc:ImplLinks} -% +% % \begin{option}{link} % \begin{option}{link type} % \begin{option}{link label} @@ -5302,7 +5190,7 @@ % \end{macrocode} % \end{intmacro} % \begin{intmacro}{\@gtt@link@anchor} -% We need the following keys for setting the start and end anchor of a link: Whenever a key |/pgfgantt/link anchor/|\meta{anchor} is undefined, \pack{pgfgantt} stores \meta{anchor} in |\@gtt@link@anchor|. +% We need the following keys for setting the start and end anchor of a link: Whenever a key |/pgfgantt/link anchor/|\meta{anchor} is undefined, \pack{pgfgantt} stores \meta{anchor} in |\@gtt@link@anchor|. % \begin{macrocode} \ganttset{% link anchor/.unknown/.code={% diff --git a/graphics/pgf/contrib/pgfgantt/pgfgantt.ins b/graphics/pgf/contrib/pgfgantt/pgfgantt.ins index 6e4aa0dd2b..2c6c6a4c03 100644 --- a/graphics/pgf/contrib/pgfgantt/pgfgantt.ins +++ b/graphics/pgf/contrib/pgfgantt/pgfgantt.ins @@ -1,6 +1,6 @@ %% pgfgantt.ins %% -%% Copyright (C) 2083 by Wolfgang Skala +%% Copyright (C) 2024 by Wolfgang Esser-Skala %% %% This work may be distributed and/or modified under the %% conditions of the LaTeX Project Public License, either version 1.3c @@ -10,9 +10,7 @@ %% and version 1.3c or later is part of all distributions of LaTeX %% version 2008/05/04 or later. %% -%% This work has the LPPL maintenance status `maintained'. -%% -%% The Current Maintainer of this work is Wolfgang Skala. +%% This work has the LPPL maintenance status `unmaintained'. %% %% This work consists of the files pgfgantt.dtx and pgfgantt.ins %% and the derived file pgfgantt.sty. @@ -24,7 +22,7 @@ \preamble -Copyright (C) 2018 by Wolfgang Skala +Copyright (C) 2024 by Wolfgang Esser-Skala This work may be distributed and/or modified under the conditions of the LaTeX Project Public License, either version 1.3c @@ -51,11 +49,10 @@ version 2008/05/04 or later. \Msg{*} \Msg{* pdflatex pgfgantt.dtx} \Msg{* makeindex -s gind.ist -o pgfgantt.ind pgfgantt.idx} -\Msg{* makeindex -s gglo.ist -o pgfgantt.gls pgfgantt.glo} \Msg{* pdflatex pgfgantt.dtx (2x)} \Msg{*} \Msg{* Happy TeXing!} \Msg{*} \Msg{****************************************************} -\endbatchfile
\ No newline at end of file +\endbatchfile diff --git a/graphics/pgf/contrib/pgfgantt/pgfgantt.pdf b/graphics/pgf/contrib/pgfgantt/pgfgantt.pdf Binary files differdeleted file mode 100644 index 5536734a4c..0000000000 --- a/graphics/pgf/contrib/pgfgantt/pgfgantt.pdf +++ /dev/null diff --git a/graphics/pgf/contrib/pgfornament-han/README.md b/graphics/pgf/contrib/pgfornament-han/README.md index 893666ec52..61d023c759 100644 --- a/graphics/pgf/contrib/pgfornament-han/README.md +++ b/graphics/pgf/contrib/pgfornament-han/README.md @@ -1,17 +1,17 @@ -# pgfornament-han 2023/10/29 -A pgfornament library for Chinese traditional motifs and patterns. +# pgfornament-han 2024/10/22 +A pgfornament library for Chinese traditional motifs and patterns. We also provide three beamer themes namely XiaoShan, HeavenlyClouds and TianQing based on these motifs. With some modifications, these themes can also be used to create posters using the `beamerposter` package; sample .tex files are provided. -以 pgfornament 宏包的机制,实现绘制汉风图纹。在此基础上设计了三款beamer主题:「萧山」(XiaoShan)、「神马浮云」(Heavenly Clouds)、「天青」(TianQing)。 +以 pgfornament 宏包的机制,实现绘制汉风图纹。在此基础上设计了三款beamer主题:「萧山」(XiaoShan)、「神马浮云」(HeavenlyClouds)、「天青」(TianQing),并可略加修改应用在海报设计上。详情请参考范例 .tex 文档。 -# Maintainers 宏包维护 +## Maintainers 宏包维护 LianTze Lim 林莲枝 (liantze@gmail.com) -# Contributors 开发人员 +## Contributors 开发人员 Chennan Zhang (23637935@qq.com) drew the motifs using a CAD application, re-drew them in `TikZ`, and granted permission for these to be turned into a library suitable for use with the `pgfornament` package by LianTze Lim. 所有图纹均由张晨南以 CAD 设计、以TikZ绘制,再由林莲枝转为适用 pgfornament 机制的宏包代码。 -# License +## License 许可协议 [LaTeX Project Public License (LPPL 1.3c)](https://www.latex-project.org/lppl/lppl-1-3c/) diff --git a/graphics/pgf/contrib/pgfornament-han/beamerthemeHeavenlyClouds.sty b/graphics/pgf/contrib/pgfornament-han/beamerthemeHeavenlyClouds.sty index 00bc63cd78..afee91585d 100644 --- a/graphics/pgf/contrib/pgfornament-han/beamerthemeHeavenlyClouds.sty +++ b/graphics/pgf/contrib/pgfornament-han/beamerthemeHeavenlyClouds.sty @@ -1,4 +1,4 @@ -% beamerthemeHeavenlyClouds.sty v1.1.1 2023/10/29 +% beamerthemeHeavenlyClouds.sty v1.2 2024/10/15 % by LianTze Lim (liantze@gmail.com) \ProvidesPackage{beamerthemeHeavenlyClouds} @@ -24,6 +24,7 @@ \renewcommand{\CJKrmdefault}{zhfs} \setbeamerfont{frametitle}{shape=\itshape,family=\lishu,series=\bfseries,size=\LARGE} +\setbeamerfont{framesubtitle}{shape=\itshape,family=\lishu,series=\bfseries,size=\normalsize} % \setbeamercolor{frametitle}{fg=茜色} \setbeamerfont{title}{family=\lishu,series=\bfseries,size=\huge} @@ -66,7 +67,8 @@ } \appto{\maketitle}{\end{minipage}} - +\newcommand{\addheight}{\parbox{0pt}{\rule{0pt}{1.3\ccwd}}} +% \setbeamerfont{block title}{series=\addheight} % \setbeamerfont{block title}{series=\centering} % \addtobeamertemplate{block alerted begin}{}{\centering} % \addtobeamertemplate{block example begin}{}{\centering} @@ -95,25 +97,27 @@ }% } +\newlength{\ShenmaMarkerWidth} +\setlength{\ShenmaMarkerWidth}{2.5em} \AddToHook{begindocument/before}{% \newbox{\clouds@shenma} \savebox{\clouds@shenma}{% \usebeamercolor[fg]{headline}% \tikzset{pgfornamentstyle/.style={line width=0pt}}% - \pgfornamenthan[width=2.5em]{78}% + \pgfornamenthan[width=\ShenmaMarkerWidth]{78}% } } \newcommand{\shenmaprogressmarker}{% \renewcommand{\clouds@progressmarker}{% - \clip (-1.3em,4em) rectangle (\paperwidth,0pt); + \clip (-1.3em,\dimexpr\ht\clouds@shenma + 4em\relax) rectangle (\paperwidth,0pt); \node[anchor=south,inner sep=1pt] at (\clouds@progressinheadfoot,1.25em) {\usebox{\clouds@shenma}}; } }% -\AtBeginDocument{% +\AddToHook{begindocument/before}{% \shenmaprogressmarker \newbox{\clouds@title@deco} \savebox{\clouds@title@deco}{% @@ -130,6 +134,9 @@ \parbox{\dimexpr\clouds@frametitle@actualwidth-5em}{\centering\insertframetitle}% \hfill\raisebox{0.5ex}{\usebox{\clouds@title@deco}}% \end{minipage}\par% + % 2024-10-08 add frame subtitle + \smallskip% + {\centering\usebeamerfont{framesubtitle}\mbox{}\insertframesubtitle\par}% } \newbox{\clouds@smallhuiwen} @@ -151,9 +158,8 @@ \begin{tikzpicture}[decoration={markings, mark=between positions 0 and 1 step 2.5em with { \node[transform shape]{\usebox{\clouds@smallhuiwen}}; }} ] \path [postaction={decorate}] (0,0) -- (\paperwidth,0); - \draw[headline.fg!50,line width=0.6pt] (-1.25em,1.25em) -- (\paperwidth,1.25em); + \draw[headline.fg!50,line width=0.2ex] (-1.25em,1.25em) -- (\paperwidth,1.25em); \clouds@progressmarker - % \fill[headline.fg] (\clouds@progressinheadfoot,1.25em) circle (2pt); %<-- TODO \end{tikzpicture} } } @@ -194,13 +200,17 @@ \pgfmathsetmacro{\myx}{rnd * 0.8} \pgfmathsetmacro{\myy}{rnd * 0.8} \pgfmathtruncatemacro{\myorn}{random(0,1) + #1} + \begingroup + \ifodd \myorn \tikzset{pgfornamentstyle/.append style={line width=1pt]}} \fi \node at (\myx * \paperwidth, \myy * \paperheight) {\pgfornamenthan[ color=normal text.bg!\myintensity!white,symmetry=\myflip,scale=\myscale]{\myorn}}; + \endgroup } +\newcommand{\BackgroundOrns}{\randorn{66}\randorn{68}\randorn{66}\randorn{70}\randorn{68}} \setbeamertemplate{background}{% \begin{tikzpicture} \clip (0,0) rectangle (\paperwidth,\paperheight); - \randorn{66}\randorn{68}\randorn{66}\randorn{70}\randorn{68} + \BackgroundOrns% \end{tikzpicture} } diff --git a/graphics/pgf/contrib/pgfornament-han/beamerthemeTianQing.sty b/graphics/pgf/contrib/pgfornament-han/beamerthemeTianQing.sty index 7d4bdfea49..b612979423 100644 --- a/graphics/pgf/contrib/pgfornament-han/beamerthemeTianQing.sty +++ b/graphics/pgf/contrib/pgfornament-han/beamerthemeTianQing.sty @@ -1,4 +1,4 @@ -% beamerthemeXiaoshan.sty v1.01 2023/10/29 +% beamerthemeXiaoshan.sty v1.02 2024/09/19 % by LianTze Lim (liantze@gmail.com) \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{beamerthemeTianQing} @@ -35,12 +35,20 @@ \setbeamerfont{section name}{family=\kaishu,size=\Large} \setbeamerfont{section title}{family=\kaishu,size=\huge} \setbeamerfont{section in toc}{family=\kaishu,size=\large} +\setbeamerfont{block title}{family=\kaishu\romankai,series=\bfseries} \setbeamercolor{alerted text}{fg=樱桃色} \setbeamercolor{example text}{fg=绿沉} \setbeamercolor{block title}{fg=宝蓝} \setbeamercolor{mini frame}{bg=天青色} +\newlength{\TQTopDecoWidth} +\newlength{\TQBottomDecoWidth} +\setlength{\TQTopDecoWidth}{.5\paperheight} +\setlength{\TQBottomDecoWidth}{.2\paperheight} +\newcommand{\TQTopDecoOpacity}{.2} +\newcommand{\TQBottomDecoOpacity}{.9} + \AddToHook{begindocument/before}{% \newsavebox{\bulletboxone} \savebox{\bulletboxone}{\usebeamercolor[fg]{structure}\tikz\node[line width=0pt,inner sep=0pt,outer sep=0pt]{\pgfornamenthan[height=1ex]{43}};} @@ -55,12 +63,12 @@ \savebox{\topcornermotif}{% \usebeamercolor{deco outline}% \usebeamercolor{top deco}% - \tikzset{pgfornamentstyle/.style={rotate=30,color=top deco.fg,draw=deco outline.fg,opacity=.2,inner sep=0pt,ultra thick}}\pgfornamenthan[width=.5\paperheight]{64}} + \tikzset{pgfornamentstyle/.style={rotate=30,color=top deco.fg,draw=deco outline.fg,opacity=\TQTopDecoOpacity,inner sep=0pt,ultra thick}}\pgfornamenthan[width=\TQTopDecoWidth]{64}} \newsavebox{\bottomcornermotif} \savebox{\bottomcornermotif}{% \usebeamercolor{structure}% - \tikzset{pgfornamentstyle/.style={color=structure.fg,opacity=.9,inner sep=0pt,very thick}}\pgfornamenthan[width=.2\paperheight,symmetry=v]{74}}% + \tikzset{pgfornamentstyle/.style={color=structure.fg,opacity=\TQBottomDecoOpacity,inner sep=0pt,very thick}}\pgfornamenthan[width=\TQBottomDecoWidth,symmetry=v]{74}}% } \setbeamertemplate{itemize item}{\raisebox{.08\ccwd}{\usebox{\bulletboxone}}} @@ -108,7 +116,7 @@ coltitle = alerted text.fg!70!black, colback = alerted text.bg, halign title = flush center, - fonttitle=\kaishu\romankai\bfseries, + fonttitle=\usebeamerfont{block title alerted}, title = #2, #1 } @@ -128,7 +136,7 @@ coltitle = example text.fg!70!black, colback = example text.bg, halign title = flush center, - fonttitle=\kaishu\romankai\bfseries, + fonttitle=\usebeamerfont{block title example}, title = #2, #1 } @@ -150,7 +158,7 @@ coltitle = block title.fg!70!black, colback = block title.bg, halign title = flush center, - fonttitle=\kaishu\romankai\bfseries, + fonttitle=\usebeamerfont{block title}, title = #2, #1 } diff --git a/graphics/pgf/contrib/pgfornament-han/beamerthemeXiaoshan.sty b/graphics/pgf/contrib/pgfornament-han/beamerthemeXiaoshan.sty index 52daf7b8ad..03800a5a50 100644 --- a/graphics/pgf/contrib/pgfornament-han/beamerthemeXiaoshan.sty +++ b/graphics/pgf/contrib/pgfornament-han/beamerthemeXiaoshan.sty @@ -1,4 +1,4 @@ -% beamerthemeXiaoshan.sty v1.1 2023/04/23 +% beamerthemeXiaoshan.sty v1.2 2024/10/19 % by LianTze Lim (liantze@gmail.com) \ProvidesPackage{beamerthemeXiaoshan} @@ -48,8 +48,9 @@ \linespread{1.0}% \inserttitle% \hspace*{2em}\par% -\vspace*{0.5em} } +% Frankly I have no idea if this is the right way to shove in a framesubtitle for metropolis +\apptocmd{\metropolis@frametitlestrut@end}{\ifx\insertframesubtitle\@empty\else\par\usebeamerfont{framesubtitle}\insertframesubtitle\par\vskip1.5ex\fi}{}{} \setbeamertemplate{subtitle}{ \raggedleft% diff --git a/graphics/pgf/contrib/pgfornament-han/heavenlyclouds-sample.pdf b/graphics/pgf/contrib/pgfornament-han/heavenlyclouds-sample.pdf Binary files differdeleted file mode 100644 index e8a3837826..0000000000 --- a/graphics/pgf/contrib/pgfornament-han/heavenlyclouds-sample.pdf +++ /dev/null diff --git a/graphics/pgf/contrib/pgfornament-han/pgfornament-han-doc.pdf b/graphics/pgf/contrib/pgfornament-han/pgfornament-han-doc.pdf Binary files differindex e2abf948f9..45926eaca9 100644 --- a/graphics/pgf/contrib/pgfornament-han/pgfornament-han-doc.pdf +++ b/graphics/pgf/contrib/pgfornament-han/pgfornament-han-doc.pdf diff --git a/graphics/pgf/contrib/pgfornament-han/pgfornament-han-doc.tex b/graphics/pgf/contrib/pgfornament-han/pgfornament-han-doc.tex index a5c6be5f1c..ffb8e95018 100644 --- a/graphics/pgf/contrib/pgfornament-han/pgfornament-han-doc.tex +++ b/graphics/pgf/contrib/pgfornament-han/pgfornament-han-doc.tex @@ -1,10 +1,8 @@ -% !TEX option = --shell-escape -% !TEX program = xelatex \documentclass[fontset=fandol]{ctexart} - \setmainfont{Linux Libertine O} \setsansfont{Linux Biolinum O} +\usepackage{multicol} \usepackage{ragged2e} \usepackage[svgnames]{xcolor} \usepackage{pgfornament-han} @@ -100,10 +98,11 @@ \fancypagestyle{plain}{\pagestyle{fancy}} \usepackage[colorlinks]{hyperref} +\usepackage{cleveref} \title{汉风图纹 \texttt{pgfornament-han}} \author{林莲枝、张晨南} -\date{2023/10/29\\\url{https://github.com/liantze/pgfornament-han}} +\date{2024/10/22\\\url{https://github.com/liantze/pgfornament-han}} \begin{document} @@ -111,7 +110,7 @@ \begin{abstract} 利用 \texttt{pgfornament} 宏包可以在 \LaTeX{} 文件里便捷地画出十分典雅漂亮的、欧式风格的花纹。(详情请自行访问 \url{http://ctan.org/pkg/pgfornament}) - \texttt{pgfornament-han} 宏包的用意,正是为了尝试用 \texttt{pgfornament} 的已有机制,提供一些汉风的传统图纹。所有图纹均由\emph{张晨南}以 CAD 程式定稿、TikZ 绘制,再由\emph{林莲枝}转为适合 \texttt{pgfornament} 机制使用的宏包代码。 + \texttt{pgfornament-han} 宏包的用意,正是为了尝试用 \texttt{pgfornament} 的已有机制,提供一些汉风的传统图纹。所有图纹均由\emph{张晨南}以 CAD 程式定稿、TikZ 绘制,再由\emph{林莲枝}转为适合 \texttt{pgfornament} 机制使用的宏包代码。我们也基于这些图纹尝试设计了一些beamer幻灯片及海报主题,详见附录\ref{app:beamer-xiaoshan}、\ref{app:beamer-heavenlyclouds}、\ref{app:beamer-tianqing}。 \end{abstract} \part{基本用法} @@ -515,9 +514,10 @@ \appendix \setlength{\parindent}{2\ccwd}\justifying \ctexset{section/name={附录}} -\phantomsection\addcontentsline{toc}{part}{附录} +\phantomsection\label{appendix-start}\addcontentsline{toc}{part}{附录} \section{传统中国颜色 \texttt{cncolours.sty}} +\label{app:cncolours} \begingroup @@ -1955,12 +1955,13 @@ \clearpage \section{萧山 Beamer 主题 Xiaoshan Beamer Theme \texttt{beamerthemeXiaoshan.sty}} +\label{app:beamer-xiaoshan} -这个Beamer主题是以 \href{https://ctan.org/pkg/beamertheme-metropolis}{Metropolis} 为基础,用 \texttt{cncolours.sty} 调了一下颜色,加入少许汉风纹样。 +这个Beamer主题是以 \href{https://ctan.org/pkg/beamertheme-metropolis}{Metropolis} 为基础,用 \texttt{cncolours.sty} 调了一下颜色,加入少许汉风纹样。请参考\texttt{xiaoshan-beamer-sample.tex}示范文档。 \bigskip -\begin{tcblisting}{listing side comment,title={使用范例},pdf comment={xiaoshan-sample.pdf}} +\begin{tcblisting}{listing side comment,title={使用范例},pdf comment={samples/xiaoshan-beamer-sample.pdf}} \documentclass[linespread=1.2,aspectratio=1610]{ctexbeamer} \usetheme{Xiaoshan} @@ -1990,15 +1991,45 @@ 可以自行查阅\href{https://ctan.org/pkg/beamertheme-metropolis}{Metropolis}的详细宏包手册,有很多可客制化的机制,包括各种元素的配色。 +这些设置(以及beamer本身自带的设置参数)经过一些适当更改,也可以配合\texttt{beamerposter}宏包制作学术海报。请参考 \texttt{xiaoshan-poster-sample.tex} 示范文档。 + +\begin{tcblisting}{listing side comment,title={海报范例},image comment={width=\hsize}{samples/xiaoshan-poster-sample.pdf}} +\documentclass[t]{ctexbeamer} +\usepackage[size=a4,orientation=portrait, +scale=1.4]{beamerposter} +\usetheme{Xiaoshan} + +\setbeamertemplate{frame numbering}[none] +\setbeamerfont{frametitle}{series=\mdseries\huge} +% ...以及其它适当改动, +% 详见tianqing-poster.tex + +\title{当萧山beamer主题拿来做海报} +\author{作者甲、作者乙、作者丙} +\begin{document} +\begin{frame} +\frametitle{\insertshorttitle} +\framesubtitle{\insertshortauthor} +\begin{block}{萧山城市图景} + \begin{itemize} + \item 长忆萧然山下县,去秋为客日招邀。 + \item ... + \end{itemize} +\end{block} +\end{frame} +\end{document} +\end{tcblisting} + \clearpage \section{神马浮云 Beamer 主题 Heavenly Clouds Beamer Theme \texttt{beamerthemeHeavenlyClouds.sty}} +\label{app:beamer-heavenlyclouds} -这个Beamer主题是我一次病中摸鱼摸出来的,脑洞略大。每一页的背景的云彩纹样,位置、大小、深浅都是随机的,所以如果内容页数比较多,编译时运算可能会比较花时间,请自行斟酌使用此主题。 +这个Beamer主题是我一次病中摸鱼摸出来的,脑洞略大。请参考\texttt{heavenlyclouds-beamer-sample.tex}示范文档。每一页的背景的云彩纹样,位置、大小、深浅都是随机的,所以如果内容页数比较多,编译时运算可能会比较花时间,请自行斟酌使用此主题。 \bigskip -\begin{tcblisting}{listing side comment,title={使用范例},pdf comment={heavenlyclouds-sample.pdf}} +\begin{tcblisting}{listing side comment,title={使用范例},pdf comment={samples/heavenlyclouds-beamer-sample.pdf}} \documentclass[aspectratio=1610,linespread=1.2]{ctexbeamer} \usetheme{HeavenlyClouds} @@ -2063,17 +2094,51 @@ \end{minted} \end{itemize} +这些设置(以及beamer本身自带的设置参数)经过一些适当更改,也可以配合\texttt{beamerposter}宏包制作学术海报。请参考 \texttt{heavenlyclouds-poster-sample.tex} 示范文档。 + +\begin{tcblisting}{listing side comment,title={海报范例},image comment={width=\hsize}{samples/heavenlyclouds-poster-sample.pdf}} +\documentclass[t,linespread=1.3]{ctexbeamer} +\usepackage[size=a4,orientation=portrait, +scale=1.5]{beamerposter} + +\usetheme{HeavenlyClouds} + +\setbeamerfont{frametitle}{size=\Huge} +\setbeamerfont{framesubtitle}{size=\Large} +\setbeamerfont{headline}{size=\small} +\setbeamerfont{footline}{size=\small} +% ...以及其它适当改动, +% 详见heavenlyclouds-poster-sample.tex + +\title{当神马浮云beamer主题拿来做海报} +\author{作者甲、作者乙、作者丙} +\begin{document} +\begin{frame} +\frametitle{\insertshorttitle} +\framesubtitle{\insertshortauthor} +\begin{block}{套马的汉子你威武雄壮} + \begin{itemize} + \item 飞驰的骏马像疾风一样 + \item ... + \end{itemize} +\end{block} +\end{frame} +\end{document} +\end{tcblisting} + \clearpage + \section{天青 Beamer 主题 Tian Qing Beamer Theme \texttt{beamerthemeTianqing.sty}} +\label{app:beamer-tianqing} -几年前看到一个很喜欢的舞台演出,根据个人印象做的一个Beamer主题。本来想取名「青花瓷」的。不过始终没能力重现出来那种感觉啦,眼高手低,惭愧。 +几年前看到一个\href{https://www.bilibili.com/video/BV1my4y1B7Vx/?p=156}{很喜欢的舞台演出},根据个人印象做的一个Beamer主题。本来想取名「青花瓷」的。不过始终没能力重现出来那种感觉啦,眼高手低,惭愧。请参考\texttt{tianqing-beamer-sample.tex}示范文档。 (话说拿这个模板去做科研学术性报告,真的不会被导师丢出来吗。) \bigskip -\begin{tcblisting}{listing side comment,title={使用范例},pdf comment={tianqing-sample.pdf}} +\begin{tcblisting}{listing side comment,title={使用范例},pdf comment={samples/tianqing-beamer-sample.pdf}} \documentclass[aspectratio=1610,linespread=1.2]{ctexbeamer} \usetheme{TianQing} @@ -2102,7 +2167,8 @@ \mintinline{latex}|\setCJKfamilyfont{zhkai}{Xingkai SC}| -一些可以自己更改的颜色: +\begin{multicols}{2} +\noindent 一些可以自己更改的颜色: \begin{minted}{latex} \setbeamercolor{structure}{fg=墨色} \setbeamercolor{section page}{fg=紫檀} @@ -2112,5 +2178,43 @@ \setbeamercolor{example text}{fg=鸦青} \setbeamercolor{block title}{fg=绀青} \end{minted} +\columnbreak +\noindent 其它一些可以自己更改的设置: +\begin{minted}{latex} +\setlength{\TQTopDecoWidth}{0.7\paperwidth} +\setlength{\TQBottomDecoWidth}{0.2\paperwidth} +\renewcommand{\TQTopDecoOpacity}{0.3} +\renewcommand{\TQBottomDecoOpacity}{0.45} +\end{minted} +\end{multicols} + +这些设置(以及beamer本身自带的设置参数)经过一些适当更改,也可以配合\texttt{beamerposter}宏包制作学术海报。请参考 \texttt{tianqing-poster-sample.tex} 示范文档。 + +\begin{tcblisting}{listing side comment,title={海报范例},image comment={width=\hsize}{samples/tianqing-poster-sample.pdf}} + \documentclass[t,linespread=1.2]{ctexbeamer} + \usepackage[size=a4,orientation=portrait, + scale=1.4]{beamerposter} + \usetheme{TianQing} + + \setbeamerfont{block title}{size=\Large} + \setlength{\TQBottomDecoWidth}{0.2\paperwidth} + % ...以及其它适当改动, + % 详见tianqing-poster-sample.tex + + \title{当天青beamer主题拿来做海报} + \author{作者甲、作者乙、作者丙} + \begin{document} + \begin{frame} + \frametitle{\insertshorttitle} + \framesubtitle{\insertshortauthor} + \begin{block}{天青色等烟雨} + \begin{itemize} + \item 炊烟袅袅升起, 隔江千万里。 + \item ... + \end{itemize} + \end{block} + \end{frame} + \end{document} + \end{tcblisting} \end{document} diff --git a/graphics/pgf/contrib/pgfornament-han/samples/Cloud_types_en.pdf b/graphics/pgf/contrib/pgfornament-han/samples/Cloud_types_en.pdf Binary files differnew file mode 100644 index 0000000000..9d7a641dd4 --- /dev/null +++ b/graphics/pgf/contrib/pgfornament-han/samples/Cloud_types_en.pdf diff --git a/graphics/pgf/contrib/pgfornament-han/samples/SiO2.jpg b/graphics/pgf/contrib/pgfornament-han/samples/SiO2.jpg Binary files differnew file mode 100644 index 0000000000..f62d8acf57 --- /dev/null +++ b/graphics/pgf/contrib/pgfornament-han/samples/SiO2.jpg diff --git a/graphics/pgf/contrib/pgfornament-han/samples/hangzhou-arch.jpg b/graphics/pgf/contrib/pgfornament-han/samples/hangzhou-arch.jpg Binary files differnew file mode 100644 index 0000000000..2303d312c1 --- /dev/null +++ b/graphics/pgf/contrib/pgfornament-han/samples/hangzhou-arch.jpg diff --git a/graphics/pgf/contrib/pgfornament-han/samples/heavenlyclouds-beamer-sample.pdf b/graphics/pgf/contrib/pgfornament-han/samples/heavenlyclouds-beamer-sample.pdf Binary files differnew file mode 100644 index 0000000000..6dbaf406ad --- /dev/null +++ b/graphics/pgf/contrib/pgfornament-han/samples/heavenlyclouds-beamer-sample.pdf diff --git a/graphics/pgf/contrib/pgfornament-han/heavenlyclouds-sample.tex b/graphics/pgf/contrib/pgfornament-han/samples/heavenlyclouds-beamer-sample.tex index d39932feaa..cdfd80c848 100644 --- a/graphics/pgf/contrib/pgfornament-han/heavenlyclouds-sample.tex +++ b/graphics/pgf/contrib/pgfornament-han/samples/heavenlyclouds-beamer-sample.tex @@ -1,10 +1,10 @@ -% !TEX program=xelatex \documentclass[aspectratio=1610,linespread=1.2]{ctexbeamer} \usetheme{HeavenlyClouds} % Mac 或 Linux 上请自己设定 \lishu!! % \providecommand{\lishu}{\CJKfontspec{Libian SC}[BoldFont=Baoli SC,Scale=1.2]} +% \providecommand{\lishu}{\CJKfontspec{鸿雷板书简体-正式版.otf}[Path=fonts/]} \author{林莲枝} \title{神马浮云\\Beamer主题} @@ -15,13 +15,7 @@ % \alttitlecircle %% 试试取消注释,有惊喜 % \simpleprogressmarker %% 神马太过引人注目的话,可以用简单圆点取代。 - -% \setbeamercolor{structure}{fg=绀青} -% \setbeamercolor{headline}{fg=群青} -% \setbeamercolor{page number in head/foot}{fg=藏青} -% \setbeamercolor{normal text}{bg=淡青} -% \setbeamercolor{alerted text}{fg=正黄} -% \setbeamercolor{example text}{fg=绿沉} +% \setlength{\ShenmaMarkerWidth}{4em} % 可以改变神马的大小 \begin{document} diff --git a/graphics/pgf/contrib/pgfornament-han/samples/heavenlyclouds-poster-sample.pdf b/graphics/pgf/contrib/pgfornament-han/samples/heavenlyclouds-poster-sample.pdf Binary files differnew file mode 100644 index 0000000000..595feef6b6 --- /dev/null +++ b/graphics/pgf/contrib/pgfornament-han/samples/heavenlyclouds-poster-sample.pdf diff --git a/graphics/pgf/contrib/pgfornament-han/samples/heavenlyclouds-poster-sample.tex b/graphics/pgf/contrib/pgfornament-han/samples/heavenlyclouds-poster-sample.tex new file mode 100644 index 0000000000..f28769dde4 --- /dev/null +++ b/graphics/pgf/contrib/pgfornament-han/samples/heavenlyclouds-poster-sample.tex @@ -0,0 +1,128 @@ +\documentclass[t,linespread=1.3]{ctexbeamer} + +\usepackage[size=a4,orientation=portrait,scale=1.5]{beamerposter} + +\usetheme{HeavenlyClouds} +% Mac 或 Linux 上请自己设定 \lishu!! +% \providecommand{\lishu}{\CJKfontspec{Libian SC}[BoldFont=Baoli SC,Scale=1.2]} +% \providecommand{\lishu}{\CJKfontspec{鸿雷板书简体-正式版.otf}[Path=fonts/]} +% 如果实在没有,就用楷书蒙混过关一下…… +% \providecommand{\lishu}{\kaishu} +% 当然也可以替换别的仿宋字体,自己喜欢哈自己喜欢 +% \setCJKfamilyfont{zhfs}{ZhuqueFangsong-Regular.ttf}[Path=fonts/] + +\usepackage[style=gb7714-2015]{biblatex} +\addbibresource{sample-refs.bib} +\usepackage{graphicx} +\usepackage{ccicons} + +% 幻灯片->海报需要的一些改动 +\setbeamerfont{frametitle}{size=\Huge} +\setbeamerfont{framesubtitle}{size=\Large} +\setbeamerfont{block title}{size=\large} +\setbeamerfont{headline}{size=\small} +\setbeamerfont{footline}{size=\small} +\AddToHook{begindocument/before}{% + \addtobeamertemplate{frametitle}{\vskip-1.5ex}{} +} + +% 让神马放大一些 +\setlength{\ShenmaMarkerWidth}{3.5em} +% patch for default scaling, make clouds larger +\patchcmd{\randorn}{rnd * 0.4 + 0.1}{rnd * 0.8 + 0.3}{}{} +% patch for default opacity, make clouds more prominent on poster +\patchcmd{\randorn}{rnd * 20 + 65}{rnd * 45 + 40}{}{} +% when in portrait mode, allow clouds to be higher up +\patchcmd{\randorn}{\pgfmathsetmacro{\myy}{rnd * 0.8}}{\pgfmathsetmacro{\myy}{rnd * 0.95}}{}{} +% and further to the right too; probably more important in landscape form +\patchcmd{\randorn}{\pgfmathsetmacro{\myx}{rnd * 0.8}}{\pgfmathsetmacro{\myx}{rnd * 0.95}}{}{} +% let there be more clouds in the background +\renewcommand{\BackgroundOrns}{% + \randorn{66}\randorn{68}\randorn{66}\randorn{70}\randorn{68}% + \randorn{70}\randorn{68}\randorn{70}\randorn{70}% +} + +\title{当神马浮云beamer主题拿来做海报} +\author{作者甲、作者乙、作者丙} + +\begin{document} +\begin{frame}[fragile] +% ……简单又粗暴的,解决footline里神马的位置的方法,嗯。 +\gdef\inserttotalframenumber{10} +\gdef\insertframenumber{3} + + +% ……懒得折腾了,\frametitle挺好看的,就这样吧【躺平ing +\frametitle{\insertshorttitle} +\framesubtitle{\insertshortauthor} + +\begin{block}{此主题脑洞略大} + + \begin{itemize} + \item 背景的云彩纹样,位置、大小、深浅都是随机的。刷一次不喜欢效果的话就再刷一次碰一下运气吧。 + \item 若觉得进度条上的神马太过引人注(侧)目,可以用 \verb|\simpleprogressmarker| 简单圆点取代。(默认是\verb|\shenmaprogressmarker|)。……但是这是海报啊海报,只用圆点可能真的太没存在感了。 + \end{itemize} + +\end{block} + +\begin{columns}[T] +\column{.45\textwidth} + +\begin{exampleblock}{算了我也不知道在写什么,do you?} + Now solve $x = \frac{-b \pm \sqrt{b^2 -4ac}}{2a}$. 对各位同学来说应该挑战不大。 +\end{exampleblock} + +\begin{alertblock}{算了我也不知道在写什么,do you?} + \[ x = \frac{-b \pm \sqrt{b^2 -4ac}}{2a} \] +\end{alertblock} + +\begin{block}{算了我也不知道在写什么,do you?} + \[ x = \frac{-b \pm \sqrt{b^2 -4ac}}{2a} \] +\end{block} + +% 个人觉得这个主题,多栏之间需要有个间隔。但是高度需要自己调整。 +\column{.01\textwidth} +\textcolor{structure!80}{\rule{.1mm}{.27\textheight}} + +\column{.45\textwidth} + +\begin{block}{套马的汉子你威武雄壮} + + \begin{itemize} + \item 飞驰的骏马像疾风一样 + \item 一望无际的原野随你去流浪 + \item 你的心海和大地一样宽广 + \end{itemize} + + \begin{enumerate} + \item 你是我天边最美的云彩 + \item 让我用心把你留下来 + \end{enumerate} +\end{block} + +\begin{proof} + 显而易见,$1+1=2$. +\end{proof} + +\begin{theorem} + 有一件很美好的事情将要发生,它终会发生。 +\end{theorem} + +\end{columns} + +\begin{block}{云的分类} +This is just a sample sentence with a sample citation\cite{BurroughsCrowder2007}. + +\smallskip +\includegraphics[width=.6\textwidth]{Cloud_types_en}\par +Valentin de Bruyn / Coton. This illustration has been created for Coton, the cloud identification guide for mobile. \ccbysa\ 3.0 via Wikimedia Commons. \url{https://commons.wikimedia.org/wiki/File:Cloud_types_en.svg} +\end{block} + +\vfill + +\begin{block}{\refname} +\printbibliography[heading=none] +\end{block} + +\end{frame} +\end{document} diff --git a/graphics/pgf/contrib/pgfornament-han/samples/sample-refs.bib b/graphics/pgf/contrib/pgfornament-han/samples/sample-refs.bib new file mode 100644 index 0000000000..8875337216 --- /dev/null +++ b/graphics/pgf/contrib/pgfornament-han/samples/sample-refs.bib @@ -0,0 +1,35 @@ +@article{ShaoShen2022, + author = {邵松雪 and 沈海云}, + title = {青花瓷选美记}, + journal = {大学化学}, + year = {2022}, + volume = {37}, + number = {9}, + pages = {2110061}, + doi = {10.3866/PKU.DXHX202110061} +} + +@book{BurroughsCrowder2007, + author = {Burroughs, William James and Crowder, Bob}, + year = {2007}, + title = {Weather}, + publisher = {Fog City Press, San Francisco} +}` + +@article{ChenCai2021, + author = {陈力新 and 蔡磊}, + title = {国土空间治理背景下全域控制性详细规划编制探析——以杭州市萧山区进化镇为例}, + journal = {浙江建筑}, + year = {2021}, + volume = {1}, + pages = {1--4,9} +} + +@article{ZhuEtal2021, + author = {朱鸿寅 and 洪玲笑 and 黄胜兰 and 马俊}, + title = {绿色亚运村,生态未来城——杭州亚运村绿色生态城区实践}, + journal = {建筑节能}, + year = {2021}, + number = {6}, + pages= {10--13} +} diff --git a/graphics/pgf/contrib/pgfornament-han/samples/tianqing-beamer-sample.pdf b/graphics/pgf/contrib/pgfornament-han/samples/tianqing-beamer-sample.pdf Binary files differnew file mode 100644 index 0000000000..8af1fcf099 --- /dev/null +++ b/graphics/pgf/contrib/pgfornament-han/samples/tianqing-beamer-sample.pdf diff --git a/graphics/pgf/contrib/pgfornament-han/tianqing-sample.tex b/graphics/pgf/contrib/pgfornament-han/samples/tianqing-beamer-sample.tex index 70c1b3d938..c26c27850b 100644 --- a/graphics/pgf/contrib/pgfornament-han/tianqing-sample.tex +++ b/graphics/pgf/contrib/pgfornament-han/samples/tianqing-beamer-sample.tex @@ -1,4 +1,3 @@ -% !TEX program=xelatex \documentclass[aspectratio=1610,linespread=1.2]{ctexbeamer} \usetheme{TianQing} % 可以把zhkai更改成自己喜欢的美术字体、书法字体等 @@ -12,9 +11,13 @@ % \setbeamercolor{section page deco}{fg=紫檀} % \setbeamercolor{top deco}{fg=老银} % \setbeamercolor{normal text}{bg=铅白} -% \setbeamercolor{alerted text}{fg=玄色} -% \setbeamercolor{example text}{fg=鸦青} -% \setbeamercolor{block title}{fg=绀青} +% \setbeamercolor{alerted text}{fg=栗色} +% \setbeamercolor{example text}{fg=苍青} +% \setbeamercolor{block title}{fg=靛青} +% \setlength{\TQTopDecoWidth}{0.7\paperwidth} +% \setlength{\TQBottomDecoWidth}{0.2\paperwidth} +% \renewcommand{\TQTopDecoOpacity}{0.3} +% \renewcommand{\TQBottomDecoOpacity}{0.45} \begin{document} diff --git a/graphics/pgf/contrib/pgfornament-han/samples/tianqing-poster-sample.pdf b/graphics/pgf/contrib/pgfornament-han/samples/tianqing-poster-sample.pdf Binary files differnew file mode 100644 index 0000000000..8e7dc0c514 --- /dev/null +++ b/graphics/pgf/contrib/pgfornament-han/samples/tianqing-poster-sample.pdf diff --git a/graphics/pgf/contrib/pgfornament-han/samples/tianqing-poster-sample.tex b/graphics/pgf/contrib/pgfornament-han/samples/tianqing-poster-sample.tex new file mode 100644 index 0000000000..0ef1f20b74 --- /dev/null +++ b/graphics/pgf/contrib/pgfornament-han/samples/tianqing-poster-sample.tex @@ -0,0 +1,131 @@ +\documentclass[t,linespread=1.2]{ctexbeamer} + +\usepackage[size=a4,orientation=portrait,scale=1.4]{beamerposter} + +\usetheme{TianQing} +% 可以把zhkai,zhfs更改成自己喜欢的美术字体、书法字体等 +% \setCJKfamilyfont{zhkai}{STXingkai} % Win有 +% \setCJKfamilyfont{zhkai}{Xingkai SC} % Mac有 +% \setCJKfamilyfont{zhkai}{鸿雷板书简体-正式版.otf}[Path=fonts/] % 自行下载 +% \setCJKfamilyfont{zhfs}{ZhuqueFangsong-Regular.ttf}[Path=fonts/] % 自行下载 + +\usepackage[style=gb7714-2015]{biblatex} +\addbibresource{sample-refs.bib} +\usepackage{chemformula} +\usepackage{qrcode} +\usepackage{graphicx} + +% 幻灯片->海报需要的一些改动 +\setbeamerfont{frametitle}{size=\Huge} +\setbeamerfont{framesubtitle}{size=\large} +\setbeamerfont{block title}{size=\Large} +% 。左上角、右下角的装饰可以酌情调整大小……不然右下真的有点太大 +% (或者要故意保留原大小来充版面也不是不可以哈哈哈 +% \setlength{\TQTopDecoWidth}{0.5\paperwidth} +\setlength{\TQBottomDecoWidth}{0.2\paperwidth} +% \renewcommand{\TQTopDecoOpacity}{0.3} +% \renewcommand{\TQBottomDecoOpacity}{0.45} + +\title{当天青beamer主题拿来做海报} +\author{作者甲、作者乙、作者丙} + +\begin{document} + +\begin{frame} + +% ……懒得折腾了,\frametitle挺好看的,就这样吧【躺平ing +\frametitle{\insertshorttitle} +\framesubtitle{\insertshortauthor} + +\begin{block}{天青色等烟雨} + \begin{itemize} + \item 炊烟袅袅升起, 隔江千万里。 + \begin{itemize} + \item 在瓶底书刻隶仿前朝的飘逸 + \begin{itemize} + \item 就当我为遇见你伏笔 + \end{itemize} + \end{itemize} + \end{itemize} + + \begin{enumerate} + \item 本来这个beamer主题样式,想取名“青花瓷”的。不过始终没能力重现出来那种感觉啦,就算了。 + \item 话说拿这个模板去做科研学术性报告,真的不会被导师丢出来吗。 + \end{enumerate} +\end{block} + +\begin{columns}[T] + \column{.47\textwidth} + + \begin{exampleblock}{算了我也不知道在写什么,do you?} + Now solve $x = \frac{-b \pm \sqrt{b^2 -4ac}}{2a}$. 对各位同学来说应该挑战不大。 + \end{exampleblock} + + \begin{alertblock}{算了我也不知道在写什么,do you?} + \[ x = \frac{-b \pm \sqrt{b^2 -4ac}}{2a} \] + \end{alertblock} + + \begin{block}{算了我也不知道在写什么,do you?} + \[ x = \frac{-b \pm \sqrt{b^2 -4ac}}{2a} \] + \end{block} + + \begin{proof} + 显而易见,$1+1=2$. + \end{proof} + + \begin{theorem} + 有一件很美好的事情将要发生,它终会发生。 + \end{theorem} + + \column{.47\textwidth} + + \begin{block}{青花瓷} + \begin{itemize} + \item 炊烟袅袅升起, 隔江千万里。 + \begin{itemize} + \item 在瓶底书刻隶仿前朝的飘逸 + \begin{itemize} + \item 就当我为遇见你伏笔 + \end{itemize} + \end{itemize} + \end{itemize} + + \begin{enumerate} + \item 本来这个beamer主题样式,想取名“青花瓷”的。不过始终没能力重现出来那种感觉啦,就算了。 + \item 话说拿这个模板去做科研学术性报告,真的不会被导师丢出来吗。 + \item \begin{minipage}[t]{.8\hsize}(其实我当初设计这个beamer主题的印象不完全源自原曲,更多是来自这个片段)\end{minipage}\quad + \raisebox{-.5em}{\structure{\qrcode[height=2\ccwd]{https://www.bilibili.com/video/BV1my4y1B7Vx/?p=156}}} + \end{enumerate} + \end{block} + + 有时不用blocks也挺好的。 + \begin{enumerate} + \item 雨纷纷 旧故里草木深 + \item 我听闻 你始终一个人 + \begin{enumerate} + \item 斑驳的城门 盘踞着老树根 + \begin{enumerate} + \item 石板上回荡的是 再等 + \item 石板上回荡的是 再等 + \end{enumerate} + \end{enumerate} + \end{enumerate} +\end{columns} + +\begin{block}{\ch{SiO2}与\ch{Al2O3}受热变化过程 \cite{ShaoShen2022}} + \Large\centering +\ch{!(高岭石)( Al2O3*2 SiO2*2 H2O ) ->[脱水] !(偏高岭石)( Al2O3 * 2 SiO2 ) ->[加热] !(硅铝尖晶石)( 2 Al2O3 * 3 SiO2 ) ->[加热] !(莫来石)( 3 Al2O3 * 2 SiO2 )} +\end{block} + +\begin{block}{二氧化硅结构及存在形态\cite{ShaoShen2022}} +\centering +\includegraphics[width=.8\textwidth]{SiO2}\par +(1) 二氧化硅(SiO2)结构;(2) 结晶二氧化硅;(3) 无定形二氧化硅 +\end{block} + +\begin{block}[width=.9\textwidth]{\refname} +\printbibliography[heading=none] +\end{block} + +\end{frame} +\end{document} diff --git a/graphics/pgf/contrib/pgfornament-han/samples/xiaoshan-beamer-sample.pdf b/graphics/pgf/contrib/pgfornament-han/samples/xiaoshan-beamer-sample.pdf Binary files differnew file mode 100644 index 0000000000..b00952c2f9 --- /dev/null +++ b/graphics/pgf/contrib/pgfornament-han/samples/xiaoshan-beamer-sample.pdf diff --git a/graphics/pgf/contrib/pgfornament-han/xiaoshan-sample.tex b/graphics/pgf/contrib/pgfornament-han/samples/xiaoshan-beamer-sample.tex index 366b5a537a..389a2b781c 100644 --- a/graphics/pgf/contrib/pgfornament-han/xiaoshan-sample.tex +++ b/graphics/pgf/contrib/pgfornament-han/samples/xiaoshan-beamer-sample.tex @@ -1,4 +1,3 @@ -% !TEX program = xelatex \documentclass[linespread=1.2,aspectratio=1610]{ctexbeamer} \usetheme{Xiaoshan} diff --git a/graphics/pgf/contrib/pgfornament-han/samples/xiaoshan-poster-sample.pdf b/graphics/pgf/contrib/pgfornament-han/samples/xiaoshan-poster-sample.pdf Binary files differnew file mode 100644 index 0000000000..41bfa11853 --- /dev/null +++ b/graphics/pgf/contrib/pgfornament-han/samples/xiaoshan-poster-sample.pdf diff --git a/graphics/pgf/contrib/pgfornament-han/samples/xiaoshan-poster-sample.tex b/graphics/pgf/contrib/pgfornament-han/samples/xiaoshan-poster-sample.tex new file mode 100644 index 0000000000..6e4bbbd95c --- /dev/null +++ b/graphics/pgf/contrib/pgfornament-han/samples/xiaoshan-poster-sample.tex @@ -0,0 +1,111 @@ +\documentclass[t]{ctexbeamer} + +\usepackage[size=a4,orientation=portrait,scale=1.4]{beamerposter} + +\usetheme{Xiaoshan} +\setmonofont{Inconsolata} +\usepackage[style=gb7714-2015]{biblatex} +\addbibresource{sample-refs.bib} +\usepackage{graphicx} + +% 幻灯片->海报需要的一些改动 +\linespread{1.2} % metropolis从\documentclass选项设置不到linespread的 +\setbeamertemplate{frame numbering}[none] +\setbeamerfont{frametitle}{series=\mdseries\huge} +% frankly idk why the additional space is needed on the poster +\makeatletter +\setbeamerfont{framesubtitle}{size=\large\hskip0.25\metropolis@frametitle@padding} +\makeatother +\addtobeamertemplate{block begin}{\large}{\normalsize} +\setbeamerfont{block title}{size=\large} +\addtobeamertemplate{block example begin}{\large}{\normalsize} +\setbeamerfont{block title example}{size=\large} +\addtobeamertemplate{block alerted begin}{\large}{\normalsize} +\setbeamerfont{block title alerted}{size=\large} +\setbeamercolor{bibliography entry note}{fg=block body.fg} + +% adjust itemize/enumerate list indents if necessary +\setlength{\leftmargini}{1em} + + +\urlstyle{tt} + +\title{当萧山beamer主题拿来做海报} +\author{作者甲、作者乙、作者丙} + +\begin{document} + +\begin{frame} + +% ……懒得折腾了,\frametitle挺好看的,就这样吧【躺平ing +\frametitle{\insertshorttitle} +\framesubtitle{\insertshortauthor} + +\begin{block}{萧山城市图景} +\begin{itemize} +\item 绿地宋都·杭州世纪中心是杭州目前规划的最高地标建筑,位于钱江世纪城奥体板块核心位置。 +\item 萧山城市规划的一些相关思考\cite{ChenCai2021,ZhuEtal2021} +\item \textbf{《次韵萧山友人》王祎:} +长忆萧然山下县,去秋为客日招邀。 +夕阳玄度飞轮塔,晓雨文通梦笔桥。 +搜检虫鱼穷《尔雅》,咏歌草木续《离骚》。 +旧游回首成凋谢,莫遣音书似路遥。 +\end{itemize} + +\end{block} + +\smallskip + +\begin{columns}[T] +\column{.45\textwidth} + +\begin{exampleblock}{算了我也不知道在写什么,do you?} + Now solve $x = \frac{-b \pm \sqrt{b^2 -4ac}}{2a}$. 对各位同学来说应该挑战不大。 +\end{exampleblock} + +\begin{alertblock}{算了我也不知道在写什么,do you?} + \[ x = \frac{-b \pm \sqrt{b^2 -4ac}}{2a} \] +\end{alertblock} + +\begin{block}{算了我也不知道在写什么,do you?} + \[ x = \frac{-b \pm \sqrt{b^2 -4ac}}{2a} \] +\end{block} + +% 个人觉得这个主题,多栏之间需要有个间隔。但是高度需要自己调整。 +\column{.01\textwidth} +\textcolor{structure!80}{\rule{.1mm}{.22\textheight}} + +\column{.45\textwidth} +\begin{proof} + 显而易见,$1+1=2$. +\end{proof} + +\begin{theorem} + 有一件很美好的事情将要发生,它终会发生。 +\end{theorem} + +\begin{block}{萧山城市图景} +\begin{itemize} +\item 绿地宋都·杭州世纪中心是杭州目前规划的最高地标建筑,位于钱江世纪城奥体板块核心位置。 +\item 萧山城市规划的一些相关思考\cite{ChenCai2021,ZhuEtal2021} +\end{itemize} +\end{block} + +\end{columns} + +\begin{block}{杭州市萧山奥体绿地宋都·杭州世纪中心} +\smallskip +\centering +\includegraphics[width=\textwidth,clip,trim=0pt 2cm 0pt 8cm,]{hangzhou-arch.jpg}\\ +图来自 \url{https://www.sohu.com/a/717899399_220260} +\end{block} + + +\begin{block}{\refname} +\renewcommand*{\bibfont}{\small\linespread{1}\selectfont} +\setlength{\biblabelsep}{0.25em} +\printbibliography[heading=none] +\end{block} + +\end{frame} +\end{document} diff --git a/graphics/pgf/contrib/pgfornament-han/tianqing-sample.pdf b/graphics/pgf/contrib/pgfornament-han/tianqing-sample.pdf Binary files differdeleted file mode 100644 index 174e0865d0..0000000000 --- a/graphics/pgf/contrib/pgfornament-han/tianqing-sample.pdf +++ /dev/null diff --git a/graphics/pgf/contrib/pgfornament-han/xiaoshan-sample.pdf b/graphics/pgf/contrib/pgfornament-han/xiaoshan-sample.pdf Binary files differdeleted file mode 100644 index 938436b852..0000000000 --- a/graphics/pgf/contrib/pgfornament-han/xiaoshan-sample.pdf +++ /dev/null diff --git a/graphics/pgf/contrib/pgfplotsthemebeamer/DEPENDS.txt b/graphics/pgf/contrib/pgfplotsthemebeamer/DEPENDS.txt new file mode 100644 index 0000000000..1c4fa2d593 --- /dev/null +++ b/graphics/pgf/contrib/pgfplotsthemebeamer/DEPENDS.txt @@ -0,0 +1,3 @@ +hard beamer +hard tools +hard pgfplots
\ No newline at end of file diff --git a/graphics/pgf/contrib/pgfplotsthemebeamer/README.md b/graphics/pgf/contrib/pgfplotsthemebeamer/README.md new file mode 100644 index 0000000000..47c815caaf --- /dev/null +++ b/graphics/pgf/contrib/pgfplotsthemebeamer/README.md @@ -0,0 +1,39 @@ +# pgfplotsthemebeamer + +[![License](https://img.shields.io/github/license/samcarter/pgfplotsthemebeamer.svg?color=blue)](http://www.latex-project.org/lppl.txt) +[![GitHub tag](https://img.shields.io/github/tag/samcarter/pgfplotsthemebeamer.svg?label=current%20version&color=blue)](https://github.com/samcarter/pgfplotsthemebeamer/releases/latest) +[![CTAN](https://img.shields.io/ctan/v/pgfplotsthemebeamer.svg?color=blue)](https://ctan.org/pkg/pgfplotsthemebeamer) + +A package for using colours from the current beamer theme in pgfplots diagrams. + +This project is licensed under the LaTeX Project Public License v1.3c or later, see http://www.latex-project.org/lppl.txt . + +The project repository, including a bug tracker, can be found at https://github.com/samcarter/pgfplotsthemebeamer/issues . + +### Usage + +```latex +\documentclass{beamer} + +\usetheme{moloch}% just as an example for a colour theme +\usepackage{pgfplotsthemebeamer} + +\begin{document} + +\begin{frame}[plain] +\centering +\begin{tikzpicture} + \begin{axis}[ + beamercolors + ] + \addplot {x}; \addplot {x-1}; \addplot {x-2}; + \addplot {x-3}; \addplot {x-4}; \addplot {x-5}; + \addplot {x-6}; \addplot {x-7}; \addplot {x-8}; + \end{axis} +\end{tikzpicture} +\end{frame} + +\end{document} +``` + +For more details, please consult the [package documentation](https://github.com/samcarter/pgfplotsthemebeamer/blob/main/DOCUMENTATION.pdf). diff --git a/graphics/pgf/contrib/pgfplotsthemebeamer/pgfplotsthemebeamer-doc-settings.sty b/graphics/pgf/contrib/pgfplotsthemebeamer/pgfplotsthemebeamer-doc-settings.sty new file mode 100644 index 0000000000..cd57229fcf --- /dev/null +++ b/graphics/pgf/contrib/pgfplotsthemebeamer/pgfplotsthemebeamer-doc-settings.sty @@ -0,0 +1,200 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% Personal helper theme for package documentations +% Copyright samcarter +% +% This file may be distributed and/or modified +% under the LaTeX Project Public License 1.3c or later +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% Usage: +% ln ~/Life/latex/beamertheme-sam/themesam.sty package-doc-settings.sty +% \usepackage[ +% themecolor=samdblue +% ]{\jobname-settings} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% Colours +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\RequirePackage{xcolor} +\definecolor{samyellow}{RGB}{246,193,65} +\definecolor{samorange}{RGB}{241,147,45}% pgfplotsthemebeamer +\definecolor{samred}{RGB}{191,26,46}% TikZbricks +\definecolor{sammagenta}{RGB}{170,42,104}% TikZmarmots +\definecolor{samviolet}{RGB}{136,46,114}% TikZlings +\definecolor{samlila}{RGB}{101,67,159}% Rainbow beamer theme +\definecolor{samdblue}{RGB}{0,51,134}% beamer theme +\definecolor{samlblue}{RGB}{22,89,155}% TikZducks +\definecolor{samteal}{RGB}{25,143,157}% Tcolorbox beamer theme +\definecolor{samlgreen}{RGB}{68,170,153}% Jigsaw +\definecolor{samdgreen}{RGB}{78,178,125} +\definecolor{samlgray}{RGB}{160,160,185} +\definecolor{samdgray}{RGB}{60,60,85} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% Package options +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\RequirePackage{xkeyval} +\DeclareOptionX{themecolor}[samdblue]{\colorlet{themecolor}{#1}} +\DeclareOptionX{listingcolor}[samlblue]{\colorlet{listingcolor}{#1}} +\ExecuteOptionsX{themecolor,listingcolor} +\ProcessOptionsX + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% Packages +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\@ifclassloaded{beamer}{}{% + \RequirePackage[english]{babel} + \RequirePackage[paper=a4paper,margin=2.9cm]{geometry} + \RequirePackage{scrlayer-scrpage} + \let\hrulefillx\hrulefill + \RequirePackage[bitstream-charter]{mathdesign} + \let\hrulefill\hrulefillx + \RequirePackage[hang,flushmargin,bottom]{footmisc} + \RequirePackage{footnotehyper} + \makesavenoteenv{tcolorbox} + \RequirePackage[all]{nowidow} + \RequirePackage[colorlinks=true,breaklinks=true,allcolors=themecolor,hyperfootnotes=false]{hyperref} +} +\RequirePackage[T1]{fontenc} +\RequirePackage{xspace} +\RequirePackage{inconsolata}% mono font with bold, but italic is missing +% \RequirePackage[scale=0.85]{cascadia-code} +% \AddToHook{cmd/ttfamily/before}{\fontseries{sl}} +\RequirePackage{iexec} +\usepackage{synthslant}% to fake slented comments in inconsolata + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% Listings +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\RequirePackage[ + cachedir=$TMPDIR/minted/ +]{minted} + +% smuggling custom pygmentize style in cache folder +% (a real pygmentise style would need installtion in some python folder) +\begin{filecontents*}[noheader,overwrite]{./sam.pygstyle} +\makeatletter +\def\PYG@reset{\let\PYG@it=\relax \let\PYG@bf=\relax% + \let\PYG@ul=\relax \let\PYG@tc=\relax% + \let\PYG@bc=\relax \let\PYG@ff=\relax} +\def\PYG@tok#1{\csname PYG@tok@#1\endcsname} +\def\PYG@toks#1+{\ifx\relax#1\empty\else% + \PYG@tok{#1}\expandafter\PYG@toks\fi} +\def\PYG@do#1{\PYG@bc{\PYG@tc{\PYG@ul{% + \PYG@it{\PYG@bf{\PYG@ff{#1}}}}}}} +\def\PYG#1#2{\PYG@reset\PYG@toks#1+\relax+\PYG@do{#2}} + +% optional arguments +\expandafter\def\csname PYG@tok@na\endcsname{\def\PYG@tc##1{\textcolor{black}{##1}}} + +% macros +\expandafter\def\csname PYG@tok@k\endcsname{\def\PYG@tc##1{\textcolor{listingcolor}{\bfseries ##1}}} +% curly brakets +\expandafter\def\csname PYG@tok@nb\endcsname{\def\PYG@tc##1{\textcolor{listingcolor}{\bfseries ##1}}} + +% comments (italics won't work with the inconsolata font) +\expandafter\def\csname PYG@tok@c\endcsname{\def\PYG@tc##1{\textcolor{gray}{\textsynthslant{##1}}}} + +\def\PYGZbs{\char`\\} +\def\PYGZus{\char`\_} +\def\PYGZob{\char`\{} +\def\PYGZcb{\char`\}} +\def\PYGZca{\char`\^} +\def\PYGZam{\char`\&} +\def\PYGZlt{\char`\<} +\def\PYGZgt{\char`\>} +\def\PYGZsh{\char`\#} +\def\PYGZpc{\char`\%} +\def\PYGZdl{\char`\$} +\def\PYGZhy{\char`\-} +\def\PYGZsq{\char`\'} +\def\PYGZdq{\char`\"} +\def\PYGZti{\char`\~} +% for compatibility with earlier versions +\def\PYGZat{@} +\def\PYGZlb{[} +\def\PYGZrb{]} +\makeatother +\end{filecontents*} + +\iexec{mkdir -p $TMPDIR/minted && mv sam.pygstyle $TMPDIR/minted/.} + +\usemintedstyle{sam} +\setminted{ + breaksymbolleft={}, + tabsize=2, + breaklines=true, +} +\newminted[samcode]{latex}{} +\newmintinline[saminline]{latex}{} + +% use non-bold and all coloured for inline code in articles +\ifdefined\insertaspectratio\else + \patchcmd{\minted@inputpyg@inline}{\minted@input}{\color{listingcolor}\renewcommand\textcolor[3][]{##3}\renewcommand\bfseries{}\minted@input}{}{} +\fi + +\RequirePackage[most]{tcolorbox} +\tcbuselibrary{minted} +\tcbset{% + colframe=themecolor, + fonttitle=\bfseries, + sidebyside, + center lower, + righthand width=5.7cm, + bottom=2pt, + top=2pt, + left=3pt, + right=3pt, + sidebyside gap=10pt, + lower separated=false, + listing engine=minted, + minted language=latex, + colback=themecolor!10, + sharp corners, + boxrule=0pt, + before title={\strut} +} + +% avoid page breaks right in front of the tcolorbox +\@ifclassloaded{beamer}{}{ + \tcbuselibrary{hooks} + \tcbset{before pre={\nopagebreak[4]}} +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% document settings +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\@ifclassloaded{scrartcl}{% + \KOMAoptions{parskip=half} + \addtokomafont{sectioning}{\color{themecolor}} + \addtokomafont{date}{\normalsize} + \addtokomafont{author}{\normalsize} + \setlength{\footnotemargin}{0.7em} +}{} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% Custom macros +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\providecommand*{\CTAN}{\textsc{CTAN}\xspace} +\providecommand*{\TikZ}{Ti\emph{k}Z\xspace} +\providecommand*{\miktex}{MiK\TeX\xspace} +\providecommand*{\texlive}{\TeX{}Live\xspace} +\providecommand*{\tikzbrick}{Ti\emph{k}Zbrick\xspace} +\providecommand*{\tikzducks}{Ti\emph{k}Zducks\xspace} +\providecommand*{\tikzlings}{Ti\emph{k}Zlings\xspace} +\providecommand*{\tikzmarmots}{Ti\emph{k}Zmarmots\xspace} +\providecommand*{\ConTeXt}{C\kern-.0333emon\-\kern-.0667em\TeX\kern-.0333emt}
\ No newline at end of file diff --git a/graphics/pgf/contrib/pgfplotsthemebeamer/pgfplotsthemebeamer-doc.pdf b/graphics/pgf/contrib/pgfplotsthemebeamer/pgfplotsthemebeamer-doc.pdf Binary files differnew file mode 100644 index 0000000000..a312a05245 --- /dev/null +++ b/graphics/pgf/contrib/pgfplotsthemebeamer/pgfplotsthemebeamer-doc.pdf diff --git a/graphics/pgf/contrib/pgfplotsthemebeamer/pgfplotsthemebeamer-doc.tex b/graphics/pgf/contrib/pgfplotsthemebeamer/pgfplotsthemebeamer-doc.tex new file mode 100644 index 0000000000..3beb6c99b6 --- /dev/null +++ b/graphics/pgf/contrib/pgfplotsthemebeamer/pgfplotsthemebeamer-doc.tex @@ -0,0 +1,119 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% Documentation for the pgfplotsthemebeamer package +% Using colours from the current beamer theme in pgfplots +% Maintained by samcarter +% +% Project repository and bug tracker: +% https://github.com/samcarter/pgfplotstheme-beamer +% +% Released under the LaTeX Project Public License v1.3c or later +% See http://www.latex-project.org/lppl.txt +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% !TeX program = txs:///arara +% arara: latexmk: { +% arara: --> engine: pdflatex, +% arara: --> options: [ +% arara: --> '-shell-escape', +% arara: --> '-synctex=1', +% arara: --> '-interaction=nonstopmode', +% arara: --> ] +% arara: --> } +\documentclass{scrartcl} + +% meta %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\title{The pgfplotsthemebeamer package} +\subtitle{Using colours from the current beamer theme in pgfplots} +\author{% + \texorpdfstring{ + \texttt{samcarter}\\ + \url{https://github.com/samcarter/pgfplotsthemebeamer}\\ + \url{https://ctan.org/pkg/pgfplotsthemebeamer} + }{samcarter}} +\date{Version v0.2 \textendash{} 2024/08/02} + +\usepackage[ + themecolor=samorange +]{\jobname-settings} + +% customisation %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\newcommand{\prefix}{./include} +\tcbset{ + compilable listing/.style={listing file={\prefix/\jobname-listing-\thetcblistingcount.tex}}, + run pdflatex/.style={run@system@command={cd\space \prefix;\space pdflatex}{\jobname-listing-\thetcblistingcount.tex}},% +} + +\begin{document} +\maketitle + +\section{Introduction} +\label{intro} + +Beamer themes often use carefully composed colour schemes. The \saminline|pgfplotsthemebeamer| package allows to reuse these colours in diagrams created with \saminline|pfgplots|. This ensures a consistent colour scheme throughout the presentation and avoids unsightly colour clashes. + +The package is included in \TeX{}Live +%and MiK\TeX\ +and available from \textsc{CTAN} (\url{https://www.ctan.org/pkg/pgfplotsthemebeamer}). +The development version of this package is located at \url{https://github.com/samcarter/pgfplotsthemebeamer}. If you have any problems, ideas or other feedback, please make constructive use of the issue tracker. + +Copyright \raisebox{0.2em}{\tiny\fontfamily{cmr}\selectfont\textcopyright} \texttt{samcarter}. Permission is granted to copy, distribute and\slash or modify this software under the terms of the LaTeX project public licence, version 1.3c or later \url{http://www.latex-project.org/lppl.txt}. + +\section{Usage} + +The basic usage is fairly simple. After loading the \saminline|pgfplotsthemebeamer| package, plots can use the \saminline|beamercolor| option to use the colours from the current beamer theme in the diagram: +\begin{tcolorbox}[title={Usage}] +\begin{samcode} +\usepackage{pgfplotsthemebeamer} + +\begin{axis}[ + beamercolors +] +... +\end{axis} +\end{samcode} +\end{tcolorbox} +The graphs will be coloured in the beamer colours \saminline|structure|, \saminline|alerted text| and \saminline|example text|. In most beamer themes, these three colours form an easily distinguishable set of colours. + +Users who would like to use the \saminline|beamercolors| scheme for all \saminline|pgfplots| diagrams in the presentation, can load the package with the \saminline|all| option, which will make this colour scheme the default. +\begin{tcolorbox}[title={Usage}] +\begin{samcode} +\usepackage[all]{pgfplotsthemebeamer} +\end{samcode} +\end{tcolorbox} + +\section{Full example} +\begin{tcblisting}{ + listing only, + freeze pdf, + compilable listing, + run pdflatex, + title={Basic example}, + righthand width=0pt +} +\documentclass{beamer} + +\usetheme{moloch}% just as an example for a colour theme +\usepackage{pgfplotsthemebeamer} + +\begin{document} + +\begin{frame}[plain] +\centering +\begin{tikzpicture} + \begin{axis}[ + beamercolors + ] + \addplot {x}; \addplot {x-1}; \addplot {x-2}; \addplot {x-3}; \addplot {x-4}; \addplot {x-5}; \addplot {x-6}; \addplot {x-7}; \addplot {x-8}; + \end{axis} +\end{tikzpicture} +\end{frame} + +\end{document} +\end{tcblisting} +\vfill +\centering +\setlength{\fboxsep}{0pt}% +\fbox{\includegraphics[width=.75\textwidth]{pgfplotsthemebeamer-doc-listing-1.pdf}}% + +\end{document} diff --git a/graphics/pgf/contrib/pgfplotsthemebeamer/pgfplotsthemebeamer.sty b/graphics/pgf/contrib/pgfplotsthemebeamer/pgfplotsthemebeamer.sty new file mode 100644 index 0000000000..23006e89c5 --- /dev/null +++ b/graphics/pgf/contrib/pgfplotsthemebeamer/pgfplotsthemebeamer.sty @@ -0,0 +1,37 @@ +% !TeX root = ./testing/test.tex +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% The pgfplotsthemebeamer package +% Using colours from the current beamer theme in pgfplots +% Maintained by samcarter +% +% Project repository and bug tracker: +% https://github.com/samcarter/pgfplotstheme-beamer +% +% Released under the LaTeX Project Public License v1.3c or later +% See http://www.latex-project.org/lppl.txt +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\ProvidesPackage{pgfplotsthemebeamer}[2024/08/02 version v0.2 PGFplots colours based the colours of the current beamer theme] + +% error if used with a class other than beamer +\IfClassLoadedF{beamer}{% + \PackageError{pgfplotsthemebeamer}{This pgfplots theme needs to be used in conjunction with the beamer class}{} +} + +% setting up colours +\RequirePackage{pgfplots} +\pgfplotsset{ + beamercolors/.style={ + cycle multi list={ + mark=*\\mark=x\\mark=square*\\mark=o\\mark=+\\mark=square\\\nextlist + structure.fg\\alerted text.fg\\example text.fg\\ + } + } +} + +% making beamercolors default if package is loaded with `all` option +\DeclareOption{all}{ + \pgfplotsset{beamercolors} +} +\ProcessOptions\relax diff --git a/graphics/pgf/contrib/pixelarttikz/doc/PixelArtTikz-doc-en.pdf b/graphics/pgf/contrib/pixelarttikz/doc/PixelArtTikz-doc-en.pdf Binary files differindex 160751afc2..a4bda8a742 100644 --- a/graphics/pgf/contrib/pixelarttikz/doc/PixelArtTikz-doc-en.pdf +++ b/graphics/pgf/contrib/pixelarttikz/doc/PixelArtTikz-doc-en.pdf diff --git a/graphics/pgf/contrib/pixelarttikz/doc/PixelArtTikz-doc-en.tex b/graphics/pgf/contrib/pixelarttikz/doc/PixelArtTikz-doc-en.tex index ae34054bba..41b1e1a8b0 100644 --- a/graphics/pgf/contrib/pixelarttikz/doc/PixelArtTikz-doc-en.tex +++ b/graphics/pgf/contrib/pixelarttikz/doc/PixelArtTikz-doc-en.tex @@ -45,9 +45,9 @@ \usepackage[margin=1.5cm]{geometry} \setlength{\parindent}{0pt} -\def\TPversion{0.1.4} -\def\TPdate{16/04/2024} - +\def\TPversion{0.1.5} +\def\TPdate{31/10/2024} +\usepackage{minted2} \usepackage[most]{tcolorbox} \tcbuselibrary{minted} \NewTCBListing{PresentationCode}{ O{blue} m }{% @@ -453,6 +453,33 @@ In the following example, the \textit{symbols} to print can't be used for the \t \pagebreak +\subsection{Symbols within list(s)} + +List of symbols can be given within list(s), picked randomly. + +\begin{PresentationCode}{} +\begin{filecontents*}[overwrite]{testlist.csv} +A,B,C,A +A,B,B,C +B,A,C,B +C,A,B,C +\end{filecontents*} + +\textbf{Notice : } + +Multiples of 5 : red\\ +Multiples of 3 : green\\ +Multiples of 2 : blue + +\PixlArtTikz[Codes=ABC,Symbols={5§25§35,3§9§21§27,2§4§8§14§16},Symb,Style=\large\sffamily,Unit=0.85]{testlist.csv} +\hspace{5mm} +\PixlArtTikz[Codes=ABC,Symbols={5§25§35,3§9§21§27,2§4§8§14§16},Symb,Style=\large\sffamily,Unit=0.85]{testlist.csv} +\hspace{5mm} +\PixlArtTikz[Codes=ABC,Colors={red,green,blue},Correction,Style=\large\sffamily,Unit=0.85]{testlist.csv} +\end{PresentationCode} + +\pagebreak + \subsection{Starred macro} The starred macro \texttt{\textbackslash PixlArtTikz*} is to be used within an already created environment. It can be useful for adding code after the PixelArt. @@ -881,6 +908,8 @@ In this paragraph, we use the data \texttt{PAsorciere}, which corresponds to the \part{History} +\verb|v0.1.5|~:~~~~Symbols can be given with list(s) + Enhancements of internal code + \verb|v0.1.4|~:~~~~Anamorphic cylinder PixelArts \verb|v0.1.3|~:~~~~Cut PixelArts within several PixelArts diff --git a/graphics/pgf/contrib/pixelarttikz/doc/PixelArtTikz-doc-fr.pdf b/graphics/pgf/contrib/pixelarttikz/doc/PixelArtTikz-doc-fr.pdf Binary files differindex dba701f59d..1aea924967 100644 --- a/graphics/pgf/contrib/pixelarttikz/doc/PixelArtTikz-doc-fr.pdf +++ b/graphics/pgf/contrib/pixelarttikz/doc/PixelArtTikz-doc-fr.pdf diff --git a/graphics/pgf/contrib/pixelarttikz/doc/PixelArtTikz-doc-fr.tex b/graphics/pgf/contrib/pixelarttikz/doc/PixelArtTikz-doc-fr.tex index 94e9f30b37..6e5027a355 100644 --- a/graphics/pgf/contrib/pixelarttikz/doc/PixelArtTikz-doc-fr.tex +++ b/graphics/pgf/contrib/pixelarttikz/doc/PixelArtTikz-doc-fr.tex @@ -44,9 +44,10 @@ \usepackage[margin=1.5cm]{geometry} \setlength{\parindent}{0pt} -\def\TPversion{0.1.4} -\def\TPdate{16 avril 2024} +\def\TPversion{0.1.5} +\def\TPdate{31 octobre 2024} +\usepackage{minted2} \usepackage[most]{tcolorbox} \tcbuselibrary{minted} \NewTCBListing{PresentationCode}{ O{blue} m }{% @@ -504,6 +505,35 @@ Dans l'exemple suivant, les \textit{symboles} à afficher ne peuvent pas servir \pagebreak +\subsection{Symboles dans une liste} + +À noter qu'il est possible de donner comme symboles des listes dans lesquelles seront choisies aléatoirement les symboles. + +\begin{PresentationCode}{} +%codes à afficher, avec utiliser des symboles "alétaoires" dans une liste + +\begin{filecontents*}[overwrite]{testlist.csv} +A,B,C,A +A,B,B,C +B,A,C,B +C,A,B,C +\end{filecontents*} + +\textbf{Notice : } + +Multiples de 5 : Rouge\\ +Multiples de 3 : Vert\\ +Multiples de 2 : Bleu + +\PixelArtTikz[Codes=ABC,Symboles={5§25§35,3§9§21§27,2§4§8§14§16},Symb,Style=\large\sffamily,Unite=0.85]{testlist.csv} +\hspace{5mm} +\PixelArtTikz[Codes=ABC,Symboles={5§25§35,3§9§21§27,2§4§8§14§16},Symb,Style=\large\sffamily,Unite=0.85]{testlist.csv} +\hspace{5mm} +\PixelArtTikz[Codes=ABC,Couleurs={red,green,blue},Correction,Style=\large\sffamily,Unite=0.85]{testlist.csv} +\end{PresentationCode} + +\pagebreak + \subsection{Commande étoilée} La commande \textit{étoilée} \texttt{\textbackslash PixelArtTikz*} permet d'intégrer le PixelArt dans un environnement créé par l'utilisateur. Cela permet par exemple de pouvoir rajouter du code en parallèle du PixelArt. @@ -1112,6 +1142,8 @@ Il est également possible de créer le tableau \textit{manuellement}, avec une \part{Historique} +\verb|v0.1.5|~:~~~~Symboles sous forme de liste(s) (éléments tirés aléatoirement) + Amélioration du traitement + \verb|v0.1.4|~:~~~~PixelArts avec anamorphose cylindrique \verb|v0.1.3|~:~~~~Possibilité de créer des PixelArts collaboratifs diff --git a/graphics/pgf/contrib/pixelarttikz/doc/base.csv b/graphics/pgf/contrib/pixelarttikz/doc/base.csv index 6f8d88334b..0b9de46575 100644 --- a/graphics/pgf/contrib/pixelarttikz/doc/base.csv +++ b/graphics/pgf/contrib/pixelarttikz/doc/base.csv @@ -1,4 +1,4 @@ - A,B,C,D - A,B,D,C - B,A,D,C - C,A,B,D +A,B,C,D +A,B,D,C +B,A,D,C +C,A,B,D diff --git a/graphics/pgf/contrib/pixelarttikz/doc/testlist.csv b/graphics/pgf/contrib/pixelarttikz/doc/testlist.csv new file mode 100644 index 0000000000..ab1d24e697 --- /dev/null +++ b/graphics/pgf/contrib/pixelarttikz/doc/testlist.csv @@ -0,0 +1,4 @@ +A,B,C,A +A,B,B,C +B,A,C,B +C,A,B,C diff --git a/graphics/pgf/contrib/pixelarttikz/tex/PixelArtTikz.sty b/graphics/pgf/contrib/pixelarttikz/tex/PixelArtTikz.sty index 711b0e919a..aacfcb1241 100644 --- a/graphics/pgf/contrib/pixelarttikz/tex/PixelArtTikz.sty +++ b/graphics/pgf/contrib/pixelarttikz/tex/PixelArtTikz.sty @@ -2,7 +2,8 @@ % licence........: Released under the LaTeX Project Public License v1.3c or later, see http://www.latex-project.org/lppl.txtf \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{PixelArtTikz}[2024/04/16 v0.1.4 PixelArts with csv and TikZ] +\ProvidesPackage{PixelArtTikz}[2024/10/31 v0.1.5 PixelArts with csv and TikZ] +% 0.1.5 Amélioration du code interne + possibilité de créer des grilles avec des symboles choisis dans une liste % 0.1.4 Cylinder anamorphic pixelart % 0.1.3 Split PA into grid % 0.1.2 Mini pixerlart @@ -23,6 +24,7 @@ \RequirePackage{xstring} \RequirePackage{multicol} \RequirePackage{listofitems} +\RequirePackage{ifthen} %librairies tikz %\usetikzlibrary{calc,shapes.geometric} %cvs @@ -33,6 +35,19 @@ \RequirePackage[l3]{csvsimple} \fi +\NewDocumentCommand\TraiteListeSymbPixelArt{ m }{% + \IfSubStr{#1}{§}% + {% + \setsepchar{§}% + \readlist*\lstPAchoices{#1}% + \xdef\lstPAchoicesrand{\fpeval{randint(1,\lstPAchoiceslen)}}% + \lstPAchoices[\lstPAchoicesrand]% + }% + {%c'est normal + #1% + }% +} + %------clés [fr] / keys [en] \defKV[pixelarttkz]{% Codes=\def\PATlettres{#1},% @@ -60,36 +75,43 @@ \IfBooleanTF{#1}{}{\begin{tikzpicture}[x=\PATunit cm,y=\PATunit cm,#3]} \ifboolKV[pixelarttkz]{Correction}% {% + \readlist*\LCPA\PATcouleurs% \csvloop{file=#4,no head,command={% \foreach \l [count=\n] in \csvline {% \StrDel{\l}{ }[\l]% - \setsepchar{,}% - \readlist*\LCPA\PATcouleurs% + %\setsepchar{,}% + %\readlist*\LCPA\PATcouleurs% \StrPosition{\PATlettres}{\l}[\pixcnt]% - \xintifboolexpr{\pixcnt>0}% - {% - \itemtomacro\LCPA[\pixcnt]\pixcol% - \ifboolKV[pixelarttkz]{BordCases}% - {\draw[fill=\pixcol] ({\n-0.5},{-\thecsvrow+0.5}) rectangle ({\n+0.5},{-\thecsvrow-0.5}) ;}% - {\filldraw[\pixcol] ({\n-0.5},{-\thecsvrow+0.5}) rectangle ({\n+0.5},{-\thecsvrow-0.5}) ;}% - }% - {}% + \ifnum\pixcnt>0% + \ifboolKV[pixelarttkz]{BordCases}% + {\draw[fill={\LCPA[\pixcnt]}] ({\n-0.5},{-\thecsvrow+0.5}) rectangle ({\n+0.5},{-\thecsvrow-0.5}) ;}% + {\filldraw[{\LCPA[\pixcnt]}] ({\n-0.5},{-\thecsvrow+0.5}) rectangle ({\n+0.5},{-\thecsvrow-0.5}) ;}% + \fi% + %\xintifboolexpr{\pixcnt>0}% + % {% + % %\itemtomacro\LCPA[\pixcnt]\pixcol% + % \ifboolKV[pixelarttkz]{BordCases}% + % {\draw[fill={\LCPA[\pixcnt]}] ({\n-0.5},{-\thecsvrow+0.5}) rectangle ({\n+0.5},{-\thecsvrow-0.5}) ;}% + % {\filldraw[{\LCPA[\pixcnt]}] ({\n-0.5},{-\thecsvrow+0.5}) rectangle ({\n+0.5},{-\thecsvrow-0.5}) ;}% + % }% + % {}% }% }% }% }% {% \ifboolKV[pixelarttkz]{Symb}{%affichage du pixelart versions chiffres si besoin + \readlist*\LCNA\PATchiffres% \csvloop{file=#4,no head,command={% \foreach \l [count=\n] in \csvline {% \StrDel{\l}{ }[\l]% - \setsepchar{,}% - \readlist*\LCNA\PATchiffres% + %\setsepchar{,}% + %\readlist*\LCNA\PATchiffres% \StrPosition{\PATlettres}{\l}[\pixpos]% \xintifboolexpr{\pixpos>0}% {% \itemtomacro\LCNA[\pixpos]\pixchf% - \draw ({\n-0.5},{-\thecsvrow+0.5}) rectangle ({\n+0.5},{-\thecsvrow-0.5}) node[inner sep=0,midway,font=\PATtaille] {\pixchf} ;% + \draw ({\n-0.5},{-\thecsvrow+0.5}) rectangle ({\n+0.5},{-\thecsvrow-0.5}) node[inner sep=0,midway,font=\PATtaille] {\TraiteListeSymbPixelArt{\pixchf}} ;% }% {}% }% @@ -145,11 +167,12 @@ \begin{tikzpicture}[x=\PATunit cm,y=\PATunit cm,#2] \ifboolKV[pixelarttkz]{Correction}% {% + \readlist*\LCPA\PATcouleurs% \csvloop{file=#3,no head,command={% \foreach \l [count=\n] in \csvline {% \StrDel{\l}{ }[\l]% - \setsepchar{,}% - \readlist*\LCPA\PATcouleursù + %\setsepchar{,}% + %\readlist*\LCPA\PATcouleurs% \StrPosition{\PATlettres}{\l}[\pixcnt]% \xintifboolexpr{\pixcnt>0}% {% @@ -165,16 +188,17 @@ }% {% \ifboolKV[pixelarttkz]{Symb}{%affichage du pixelart versions chiffres si besoin + \readlist*\LCNA\PATchiffres% \csvloop{file=#3,no head,command={% \foreach \l [count=\n] in \csvline {% \StrDel{\l}{ }[\l]% - \setsepchar{,}% - \readlist*\LCNA\PATchiffres% + %\setsepchar{,}% + %\readlist*\LCNA\PATchiffres% \StrPosition{\PATlettres}{\l}[\pixpos]% \xintifboolexpr{\pixpos>0}% {% \itemtomacro\LCNA[\pixpos]\pixchf% - \draw ({\n-0.5},{-\thecsvrow+0.5}) rectangle ({\n+0.5},{-\thecsvrow-0.5}) node[inner sep=0,midway,font=\PATtaille] {\pixchf} ;% + \draw ({\n-0.5},{-\thecsvrow+0.5}) rectangle ({\n+0.5},{-\thecsvrow-0.5}) node[inner sep=0,midway,font=\PATtaille] {\TraiteListeSymbPixelArt{\pixchf}} ;% }% {}% }% @@ -226,11 +250,12 @@ \IfBooleanTF{#1}{}{\begin{tikzpicture}[x=\PATunit cm,y=\PATunit cm,#3]} \ifboolKV[pixelarttkzen]{Correction}% {% + \readlist*\LCPA\PATcouleurs% \csvloop{file=#4,no head,command={% \foreach \l [count=\n] in \csvline {% \StrDel{\l}{ }[\l]% - \setsepchar{,}% - \readlist*\LCPA\PATcouleurs% + %\setsepchar{,}% + %\readlist*\LCPA\PATcouleurs% \StrPosition{\PATlettres}{\l}[\pixcnt]% \xintifboolexpr{\pixcnt>0}% {% @@ -246,16 +271,17 @@ }% {% \ifboolKV[pixelarttkzen]{Symb}{%affichage du pixelart versions chiffres si besoin + \readlist*\LCNA\PATchiffres% \csvloop{file=#4,no head,command={% \foreach \l [count=\n] in \csvline {% \StrDel{\l}{ }[\l]% - \setsepchar{,}% - \readlist*\LCNA\PATchiffres% + %\setsepchar{,}% + %\readlist*\LCNA\PATchiffres% \StrPosition{\PATlettres}{\l}[\pixpos]% \xintifboolexpr{\pixpos>0}% {% \itemtomacro\LCNA[\pixpos]\pixchf% - \draw ({\n-0.5},{-\thecsvrow+0.5}) rectangle ({\n+0.5},{-\thecsvrow-0.5}) node[inner sep=0,midway,font=\PATtaille] {\pixchf} ;% + \draw ({\n-0.5},{-\thecsvrow+0.5}) rectangle ({\n+0.5},{-\thecsvrow-0.5}) node[inner sep=0,midway,font=\PATtaille] {\TraiteListeSymbPixelArt{\pixchf}} ;% }% {}% }% @@ -311,11 +337,12 @@ \begin{tikzpicture}[x=\PATunit cm,y=\PATunit cm,#2] \ifboolKV[pixelarttkzen]{Correction}% {% + \readlist*\LCPA\PATcouleurs% \csvloop{file=#3,no head,command={% \foreach \l [count=\n] in \csvline {% \StrDel{\l}{ }[\l]% - \setsepchar{,}% - \readlist*\LCPA\PATcouleurs% + %\setsepchar{,}% + %\readlist*\LCPA\PATcouleurs% \StrPosition{\PATlettres}{\l}[\pixcnt]% \xintifboolexpr{\pixcnt>0}% {% @@ -331,16 +358,17 @@ }% {% \ifboolKV[pixelarttkzen]{Symb}{%affichage du pixelart versions chiffres si besoin + \readlist*\LCNA\PATchiffres% \csvloop{file=#3,no head,command={% \foreach \l [count=\n] in \csvline {% \StrDel{\l}{ }[\l]% - \setsepchar{,}% - \readlist*\LCNA\PATchiffres% + %\setsepchar{,}% + %\readlist*\LCNA\PATchiffres% \StrPosition{\PATlettres}{\l}[\pixpos]% \xintifboolexpr{\pixpos>0}% {% \itemtomacro\LCNA[\pixpos]\pixchf% - \draw ({\n-0.5},{-\thecsvrow+0.5}) rectangle ({\n+0.5},{-\thecsvrow-0.5}) node[inner sep=0,midway,font=\PATtaille] {\pixchf} ;% + \draw ({\n-0.5},{-\thecsvrow+0.5}) rectangle ({\n+0.5},{-\thecsvrow-0.5}) node[inner sep=0,midway,font=\PATtaille] {\TraiteListeSymbPixelArt{\pixchf}} ;% }% {}% }% @@ -476,13 +504,14 @@ \begin{tikzpicture}[x=\PATunit cm,y=\PATunit cm,#2] \ifboolKV[pixelarttkz]{Correction}% {% + \readlist*\LCPA\PATcouleurs% \csvloop{file=#3,range=\PAfirstline-\PAlastline,no head,command={% \foreach \l [count=\n] in \csvline {% \xintifboolexpr{ \n >= (\NbColBloc*(\NumBlocCol-1)+1) 'and' \n <= (\NbColBloc*(\NumBlocCol-1)+\NbColBloc)}% {% \StrDel{\l}{ }[\l]% \setsepchar{,}% - \readlist*\LCPA\PATcouleurs% + %\readlist*\LCPA\PATcouleurs% \StrPosition{\PATlettres}{\l}[\pixcnt]% \xintifboolexpr{\pixcnt>0}% {% @@ -500,18 +529,19 @@ }% {% \ifboolKV[pixelarttkz]{Symb}{%affichage du pixelart versions chiffres si besoin + \readlist*\LCNA\PATchiffres% \csvloop{file=#3,range=\PAfirstline-\PAlastline,no head,command={% \foreach \l [count=\n] in \csvline {% \xintifboolexpr{ \n >= (\NbColBloc*(\NumBlocCol-1)+1) 'and' \n <= (\NbColBloc*(\NumBlocCol-1)+\NbColBloc)}% {% \StrDel{\l}{ }[\l]% \setsepchar{,}% - \readlist*\LCNA\PATchiffres% + %\readlist*\LCNA\PATchiffres% \StrPosition{\PATlettres}{\l}[\pixpos]% \xintifboolexpr{\pixpos>0}% {% \itemtomacro\LCNA[\pixpos]\pixchf% - \draw ({\n-0.5},{-\thecsvrow+0.5}) rectangle ({\n+0.5},{-\thecsvrow-0.5}) node[inner sep=0,midway,font=\PATtaille] {\pixchf} ;% + \draw ({\n-0.5},{-\thecsvrow+0.5}) rectangle ({\n+0.5},{-\thecsvrow-0.5}) node[inner sep=0,midway,font=\PATtaille] {\TraiteListeSymbPixelArt{\pixchf}} ;% }% {}% }% @@ -629,13 +659,14 @@ \begin{tikzpicture}[x=\PATunit cm,y=\PATunit cm,#2] \ifboolKV[pixelarttkzen]{Correction}% {% + \readlist*\LCPA\PATcouleurs% \csvloop{file=#3,range=\PAfirstline-\PAlastline,no head,command={% \foreach \l [count=\n] in \csvline {% \xintifboolexpr{ \n >= (\NbColBloc*(\NumBlocCol-1)+1) 'and' \n <= (\NbColBloc*(\NumBlocCol-1)+\NbColBloc)}% {% \StrDel{\l}{ }[\l]% \setsepchar{,}% - \readlist*\LCPA\PATcouleurs% + %\readlist*\LCPA\PATcouleurs% \StrPosition{\PATlettres}{\l}[\pixcnt]% \xintifboolexpr{\pixcnt>0}% {% @@ -653,18 +684,19 @@ }% {% \ifboolKV[pixelarttkzen]{Symb}{%affichage du pixelart versions chiffres si besoin + \readlist*\LCNA\PATchiffres% \csvloop{file=#3,range=\PAfirstline-\PAlastline,no head,command={% \foreach \l [count=\n] in \csvline {% \xintifboolexpr{ \n >= (\NbColBloc*(\NumBlocCol-1)+1) 'and' \n <= (\NbColBloc*(\NumBlocCol-1)+\NbColBloc)}% {% \StrDel{\l}{ }[\l]% \setsepchar{,}% - \readlist*\LCNA\PATchiffres% + %\readlist*\LCNA\PATchiffres% \StrPosition{\PATlettres}{\l}[\pixpos]% \xintifboolexpr{\pixpos>0}% {% \itemtomacro\LCNA[\pixpos]\pixchf% - \draw ({\n-0.5},{-\thecsvrow+0.5}) rectangle ({\n+0.5},{-\thecsvrow-0.5}) node[inner sep=0,midway,font=\PATtaille] {\pixchf} ;% + \draw ({\n-0.5},{-\thecsvrow+0.5}) rectangle ({\n+0.5},{-\thecsvrow-0.5}) node[inner sep=0,midway,font=\PATtaille] {\TraiteListeSymbPixelArt{\pixchf}} ;% }% {}% }% @@ -909,10 +941,10 @@ \itemtomacro\LCNA[\pixpos]\pixchf% \ifboolKV[PixelArtCylinder]{Swap}% {% - \draw ({0.5*\CylindAng+(\nnnn-1)*\CylindAng}:{-\AAanamcyllarg+(\thecsvrow-0.5)*\CylindSect}) node[rotate={-90+0.5*\CylindAng+(\nnnn-1)*\CylindAng},font=\PATAAtaille] {\pixchf};% + \draw ({0.5*\CylindAng+(\nnnn-1)*\CylindAng}:{-\AAanamcyllarg+(\thecsvrow-0.5)*\CylindSect}) node[rotate={-90+0.5*\CylindAng+(\nnnn-1)*\CylindAng},font=\PATAAtaille] {\TraiteListeSymbPixelArt{\pixchf}} ;% }% {% - \draw ({0.5*\CylindAng+(\nnnn-1)*\CylindAng}:{-\AAanamcylcenter-(\thecsvrow-0.5)*\CylindSect}) node[rotate={-90+0.5*\CylindAng+(\nnnn-1)*\CylindAng},font=\PATAAtaille] {\pixchf};% + \draw ({0.5*\CylindAng+(\nnnn-1)*\CylindAng}:{-\AAanamcylcenter-(\thecsvrow-0.5)*\CylindSect}) node[rotate={-90+0.5*\CylindAng+(\nnnn-1)*\CylindAng},font=\PATAAtaille] {\TraiteListeSymbPixelArt{\pixchf}} ;% }% }% {% @@ -1002,10 +1034,10 @@ \itemtomacro\LCNA[\pixpos]\pixchf% \ifboolKV[PixlArtCylinder]{Swap}% {% - \draw ({0.5*\CylindAng+(\nnnn-1)*\CylindAng}:{-\AAanamcyllarg+(\thecsvrow-0.5)*\CylindSect}) node[rotate={-90+0.5*\CylindAng+(\nnnn-1)*\CylindAng},font=\PATAAtaille] {\pixchf};% + \draw ({0.5*\CylindAng+(\nnnn-1)*\CylindAng}:{-\AAanamcyllarg+(\thecsvrow-0.5)*\CylindSect}) node[rotate={-90+0.5*\CylindAng+(\nnnn-1)*\CylindAng},font=\PATAAtaille] {\TraiteListeSymbPixelArt{\pixchf}} ;% }% {% - \draw ({0.5*\CylindAng+(\nnnn-1)*\CylindAng}:{-\AAanamcylcenter-(\thecsvrow-0.5)*\CylindSect}) node[rotate={-90+0.5*\CylindAng+(\nnnn-1)*\CylindAng},font=\PATAAtaille] {\pixchf};% + \draw ({0.5*\CylindAng+(\nnnn-1)*\CylindAng}:{-\AAanamcylcenter-(\thecsvrow-0.5)*\CylindSect}) node[rotate={-90+0.5*\CylindAng+(\nnnn-1)*\CylindAng},font=\PATAAtaille] {\TraiteListeSymbPixelArt{\pixchf}} ;% }% }% {% diff --git a/graphics/pgf/contrib/pmdraw/README.md b/graphics/pgf/contrib/pmdraw/README.md new file mode 100644 index 0000000000..24bdba4e67 --- /dev/null +++ b/graphics/pgf/contrib/pmdraw/README.md @@ -0,0 +1,74 @@ +pmdraw +====== + +*README V1.5 2024-10-07* + +<!-- + +*------------------------------* +|4````````````````````````````1| +|`````____````____`````````````| +|````|MFMF\ /MFMF|````````````| +|````|MF|MF\/MF|MF|````````````| +|````|MF|\MFMF/|MF|_______`````| +|````|MF|``````|MFMFMFMFMF|````| +|````|MF|``````|MF|````````````| +|````|MF|``````|MF|___`````````| +|``````````````|MFMFMF|````````| +|``````````````|MF|````````````| +|``````````````|MF|````````````| +|``````````````|MF|````````````| +|5````````````````````````````7| +*------------------------------* +--> + +The `pmdraw` package allows you to draw elements of the diagram monoids, commonly referred to as diagrams. The package provides a lot of +flexibility to draw most diagrams and can be customised as needed. + +The package makes use of the `tikz` and `keyval` packages. + + +Usage +----- + +The usage of the package requires some basic understanding of +partition diagrams as well as the interface used. Please read the +manual for a complete explanation. + + +Contact +------- + +If you discover a bug, please be so kind and send me a minimum working +example of the bug in action and I will work on fixing it. My details +are <matthias.ypg37@slmail.me>. + + +Author +------- + +- Matthias Fresacher + + +License +------- + +Copyright 2023-10-16 (original release) & 2024, Matthias Fresacher + +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 found via +<http://www.latex-project.org/lppl.txt>. + +This work has the LPPL maintenance status `maintained`. + +The Current Maintainer of this work is Matthias Fresacher. + + +Contents +------- + +This work consists of the files `pmdraw.sty`, `pmdraw.tex` and the +examples in the folder `examples`, in addition to the derived file +`pmdraw.pdf`.
\ No newline at end of file diff --git a/graphics/pgf/contrib/pmdraw/examples/example-1.tex b/graphics/pgf/contrib/pmdraw/examples/example-1.tex new file mode 100644 index 0000000000..402c418a15 --- /dev/null +++ b/graphics/pgf/contrib/pmdraw/examples/example-1.tex @@ -0,0 +1,36 @@ +%!TEX root = ../pmdraw.tex + +% *------------------------------* +% |4````````````````````````````8| +% |`````____````____`````````````| +% |````|MFMF\ /MFMF|````````````| +% |````|MF|MF\/MF|MF|````````````| +% |````|MF|\MFMF/|MF|_______`````| +% |````|MF|``````|MFMFMFMFMF|````| +% |````|MF|``````|MF|````````````| +% |````|MF|``````|MF|___`````````| +% |``````````````|MFMFMF|````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |1````````````````````````````8| +% *------------------------------* + +\pmdBrick[ % Options + degree=5, + levels top=4, + levels bottom=3 +]{ % Upper non transversal edges + {1}{2} + {3}{4} + [level=2]{2}{4} + [level=3]{2}{5} + [level=4]{1}{5} +}{ % Lower non transversal edges + {1}{2} + {3}{4} + [level=2]{2}{4} + [level=3]{2}{5} +}{ % Transversal edges + \pmdEmpty +}
\ No newline at end of file diff --git a/graphics/pgf/contrib/pmdraw/examples/example-10.tex b/graphics/pgf/contrib/pmdraw/examples/example-10.tex new file mode 100644 index 0000000000..01d1502f32 --- /dev/null +++ b/graphics/pgf/contrib/pmdraw/examples/example-10.tex @@ -0,0 +1,37 @@ +%!TEX root = ../pmdraw.tex + +% *------------------------------* +% |6````````````````````````````8| +% |`````____````____`````````````| +% |````|MFMF\ /MFMF|````````````| +% |````|MF|MF\/MF|MF|````````````| +% |````|MF|\MFMF/|MF|_______`````| +% |````|MF|``````|MFMFMFMFMF|````| +% |````|MF|``````|MF|````````````| +% |````|MF|``````|MF|___`````````| +% |``````````````|MFMFMF|````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |2````````````````````````````8| +% *------------------------------* + +\pmdDiagram{ + { % Brick 1 + [ % Options + degree=17 + ]{ % Upper non transversal edges + \pmdEmpty + }{ % Lower non transversal edges + \pmdEmpty + }{ % Transversal edges + [height=1.75]{11}{1} + [height=1.5]{12}{2} + [height=1.25]{13}{3} + [height=1]{14}{4} + [height=0.75]{15}{5} + [height=0.5]{16}{6} + [height=0.25]{17}{7} + } + } +}
\ No newline at end of file diff --git a/graphics/pgf/contrib/pmdraw/examples/example-11.tex b/graphics/pgf/contrib/pmdraw/examples/example-11.tex new file mode 100644 index 0000000000..9729320f40 --- /dev/null +++ b/graphics/pgf/contrib/pmdraw/examples/example-11.tex @@ -0,0 +1,37 @@ +%!TEX root = ../pmdraw.tex + +% *------------------------------* +% |4````````````````````````````8| +% |`````____````____`````````````| +% |````|MFMF\ /MFMF|````````````| +% |````|MF|MF\/MF|MF|````````````| +% |````|MF|\MFMF/|MF|_______`````| +% |````|MF|``````|MFMFMFMFMF|````| +% |````|MF|``````|MF|````````````| +% |````|MF|``````|MF|___`````````| +% |``````````````|MFMFMF|````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |8````````````````````````````3| +% *------------------------------* + +\pmdDiagram{ + { % Brick 1 + [ % Options + degree=14 + ]{ % Upper non transversal edges + \pmdEmpty + }{ % Lower non transversal edges + \pmdEmpty + }{ % Transversal edges + [height=1.75]{11}{1} + [height=1.25]{12}{2} + [height=0.75]{13}{3} + [height=0.25]{14}{4} + [height=0.5]{1}{11} + [height=1]{2}{12} + [height=1.5]{3}{13} + } + } +}
\ No newline at end of file diff --git a/graphics/pgf/contrib/pmdraw/examples/example-12.tex b/graphics/pgf/contrib/pmdraw/examples/example-12.tex new file mode 100644 index 0000000000..f21946849f --- /dev/null +++ b/graphics/pgf/contrib/pmdraw/examples/example-12.tex @@ -0,0 +1,101 @@ +%!TEX root = ../pmdraw.tex + +% *------------------------------* +% |6````````````````````````````7| +% |`````____````____`````````````| +% |````|MFMF\ /MFMF|````````````| +% |````|MF|MF\/MF|MF|````````````| +% |````|MF|\MFMF/|MF|_______`````| +% |````|MF|``````|MFMFMFMFMF|````| +% |````|MF|``````|MF|````````````| +% |````|MF|``````|MF|___`````````| +% |``````````````|MFMFMF|````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |2````````````````````````````4| +% *------------------------------* + +\pmdDiagram{ + { % Brick 1 + [ % Options + degree=16, + row sep=3, % Must be before levels key + levels=3, + vertices options={ + \fill[red] (#1,#2) circle (.5); + }, + edges upper={very thick}, + edges transversal={red,very thick}, + brace={ + left=1, + right=4, + label={4}, + options={ + \draw [ + red, + very thick, + decorate, + decoration={calligraphic brace,mirror,amplitude=6pt} + ] (#1-0.17,-0.5) -- (#2+0.17,-0.5) node[pos=0.5,below=6pt]{\(#3\)}; + } + } + ]{ % Upper non transversal edges + {4}{5} + [ % Options + options={ + \draw[blue] (#1,3) arc (180:270:\pmdraw{edgeHeight}); % Draw left arch + \draw[blue] (#1+\pmdraw{edgeHeight},3-\pmdraw{edgeHeight}) -- (#2-\pmdraw{edgeHeight},3-\pmdraw{edgeHeight}); % Draw straight line + \draw[blue] (#2-\pmdraw{edgeHeight},3-\pmdraw{edgeHeight}) arc (270:360:\pmdraw{edgeHeight}); % Draw right arc + } + ]{4}{6} + [level=2]{4}{7} + [level=3]{4}{8} + }{ % Lower non transversal edges + {4}{5} + [ + options={ + \draw[green] (#1,0) arc (180:90:\pmdraw{edgeHeight}); % Draw left arch + \draw[green] (#1+\pmdraw{edgeHeight},\pmdraw{edgeHeight}) -- (#2-\pmdraw{edgeHeight},\pmdraw{edgeHeight}); % Draw straight line + \draw[green] (#2-\pmdraw{edgeHeight},\pmdraw{edgeHeight}) arc (90:0:\pmdraw{edgeHeight}); % Draw right arc + } + ]{4}{6} + [level=2]{4}{7} + [level=3]{4}{8} + } + { % Transversal edges + [height=1.75]{11}{1} + [height=1.25]{12}{2} + [height=0.75]{13}{3} + [height=0.25]{14}{4} + [height=0.5]{1}{11} + [height=1]{2}{12} + [height=1.5]{3}{13} + [ + options={ + \draw[dashed] (#1, 3) -- (#2, 0); % Draw straight line + } + ]{16}{16} + {15}{15} + } + } + { % Brick 2 + [ % Options + degree=14, + row sep=3, % Must be before levels key + levels=3 + ]{ % Upper non transversal edges + \pmdEmpty + }{ % Lower non transversal edges + \pmdEmpty + }{ % Transversal edges + [height=1.75]{11}{1} + [height=1.25]{12}{2} + [height=0.75]{13}{3} + [height=0.25]{14}{4} + [height=0.5]{1}{11} + [height=1]{2}{12} + [height=1.5]{3}{13} + } + } +}
\ No newline at end of file diff --git a/graphics/pgf/contrib/pmdraw/examples/example-13.tex b/graphics/pgf/contrib/pmdraw/examples/example-13.tex new file mode 100644 index 0000000000..c3a189e202 --- /dev/null +++ b/graphics/pgf/contrib/pmdraw/examples/example-13.tex @@ -0,0 +1,126 @@ +%!TEX root = ../pmdraw.tex + +% *------------------------------* +% |8````````````````````````````7| +% |`````____````____`````````````| +% |````|MFMF\ /MFMF|````````````| +% |````|MF|MF\/MF|MF|````````````| +% |````|MF|\MFMF/|MF|_______`````| +% |````|MF|``````|MFMFMFMFMF|````| +% |````|MF|``````|MF|````````````| +% |````|MF|``````|MF|___`````````| +% |``````````````|MFMFMF|````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |2````````````````````````````8| +% *------------------------------* + +\pmdProduct +[ % Options + row sep=3, + diagram sep=2, + dots options={ + \draw (#1,#2) node[red] {\(\dots\dots\)}; + } +]{ % Added edges + {1}{3} + {7}{11} + {18}{21} +}{ % Top Diagram + { % Brick 1 + [ % Options + degree top=3, + degree bottom=4 + ]{ % Upper non transversal edges + \pmdEmpty + }{ % Lower non transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{2} + {2}{3} + {3}{4} + {7}{1} + } + }{ % Brick 2 + [ % Options + degree top=7, + blank bottom=1, + degree bottom=5, + levels=2 + ]{ % Upper non transversal edges + [level=2]{3}{16} + {4}{5} + {6}{7} + }{ % Lower non transversal edges + {3}{4} + {5}{6} + }{ % Transversal edges + {1}{2} + } + }{ % Brick 3 + [ % Options + blank top=3, + degree top=5, + blank bottom=4, + degree bottom=4, + levels=2 + ]{ % Upper non transversal edges + {4}{5} + {6}{7} + }{ % Lower non transversal edges + {5}{6} + {7}{8} + }{ % Transversal edges + \pmdEmpty + } + } +}{ % Bottom Diagram + { % Brick 1 + [ % Options + degree top=3, + degree bottom=4 + ]{ % Upper non transversal edges + \pmdEmpty + }{ % Lower non transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{2} + {2}{3} + {3}{4} + [height=1.5]{7}{1} + } + }{ % Brick 2 + [ % Options + degree top=7, + blank bottom=1, + degree bottom=5, + levels=2 + ]{ % Upper non transversal edges + [level=2]{3}{16} + {4}{5} + {6}{7} + }{ % Lower non transversal edges + {3}{4} + {5}{6} + }{ % Transversal edges + {1}{2} + } + }{ % Brick 3 + [ % Options + blank top=3, + degree top=5, + blank bottom=4, + degree bottom=4, + levels=2 + ]{ % Upper non transversal edges + {4}{5} + {6}{7} + }{ % Lower non transversal edges + {5}{6} + {7}{8} + }{ % Transversal edges + \pmdEmpty + } + } +}
\ No newline at end of file diff --git a/graphics/pgf/contrib/pmdraw/examples/example-14.tex b/graphics/pgf/contrib/pmdraw/examples/example-14.tex new file mode 100644 index 0000000000..0ad77f546d --- /dev/null +++ b/graphics/pgf/contrib/pmdraw/examples/example-14.tex @@ -0,0 +1,76 @@ +%!TEX root = ../pmdraw.tex + +% *------------------------------* +% |6````````````````````````````2| +% |`````____````____`````````````| +% |````|MFMF\ /MFMF|````````````| +% |````|MF|MF\/MF|MF|````````````| +% |````|MF|\MFMF/|MF|_______`````| +% |````|MF|``````|MFMFMFMFMF|````| +% |````|MF|``````|MF|````````````| +% |````|MF|``````|MF|___`````````| +% |``````````````|MFMFMF|````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |4````````````````````````````1| +% *------------------------------* + +\pmdDiagram +[ % Options + row sep=3, + diagram sep=2, + dots options={ + \draw (#1,#2) node[red] {\(\mid\)}; + } +]{ + { % Brick 1 + [ % Options + degree top=3, + degree bottom=4 + ]{ % Upper non transversal edges + \pmdEmpty + }{ % Lower non transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{2} + {2}{3} + {3}{4} + {7}{1} + } + }{ % Brick 2 + [ % Options + degree top=7, + blank bottom=1, + degree bottom=5, + levels=2 + ]{ % Upper non transversal edges + [level=2]{3}{16} + {4}{5} + {6}{7} + }{ % Lower non transversal edges + {3}{4} + {5}{6} + }{ % Transversal edges + {1}{2} + } + }{ % Brick 3 + [ % Options + blank top=-1, + degree top=9, + blank bottom=4, + degree bottom=4, + levels=2 + ]{ % Upper non transversal edges + {0}{1} + {2}{3} + {4}{5} + {6}{7} + }{ % Lower non transversal edges + {5}{6} + {7}{8} + }{ % Transversal edges + \pmdEmpty + } + } +}
\ No newline at end of file diff --git a/graphics/pgf/contrib/pmdraw/examples/example-15.tex b/graphics/pgf/contrib/pmdraw/examples/example-15.tex new file mode 100644 index 0000000000..672965eb13 --- /dev/null +++ b/graphics/pgf/contrib/pmdraw/examples/example-15.tex @@ -0,0 +1,76 @@ +%!TEX root = ../pmdraw.tex + +% *------------------------------* +% |3````````````````````````````7| +% |`````____````____`````````````| +% |````|MFMF\ /MFMF|````````````| +% |````|MF|MF\/MF|MF|````````````| +% |````|MF|\MFMF/|MF|_______`````| +% |````|MF|``````|MFMFMFMFMF|````| +% |````|MF|``````|MF|````````````| +% |````|MF|``````|MF|___`````````| +% |``````````````|MFMFMF|````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |1````````````````````````````6| +% *------------------------------* + +\pmdDiagram +[ % Options + row sep=3, + diagram sep=2, + dots options={ + \draw (#1,#2) node {}; + } +]{ + { % Brick 1 + [ % Options + degree top=3, + degree bottom=4 + ]{ % Upper non transversal edges + \pmdEmpty + }{ % Lower non transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{2} + {2}{3} + {3}{4} + {7}{1} + } + }{ % Brick 2 + [ % Options + degree top=7, + blank bottom=1, + degree bottom=5, + levels=2 + ]{ % Upper non transversal edges + [level=2]{3}{16} + {4}{5} + {6}{7} + }{ % Lower non transversal edges + {3}{4} + {5}{6} + }{ % Transversal edges + {1}{2} + } + }{ % Brick 3 + [ % Options + blank top=-1, + degree top=9, + blank bottom=4, + degree bottom=4, + levels=2 + ]{ % Upper non transversal edges + {0}{1} + {2}{3} + {4}{5} + {6}{7} + }{ % Lower non transversal edges + {5}{6} + {7}{8} + }{ % Transversal edges + \pmdEmpty + } + } +}
\ No newline at end of file diff --git a/graphics/pgf/contrib/pmdraw/examples/example-16.tex b/graphics/pgf/contrib/pmdraw/examples/example-16.tex new file mode 100644 index 0000000000..efacb4d246 --- /dev/null +++ b/graphics/pgf/contrib/pmdraw/examples/example-16.tex @@ -0,0 +1,127 @@ +%!TEX root = ../pmdraw.tex + +% *------------------------------* +% |3````````````````````````````0| +% |`````____````____`````````````| +% |````|MFMF\ /MFMF|````````````| +% |````|MF|MF\/MF|MF|````````````| +% |````|MF|\MFMF/|MF|_______`````| +% |````|MF|``````|MFMFMFMFMF|````| +% |````|MF|``````|MF|````````````| +% |````|MF|``````|MF|___`````````| +% |``````````````|MFMFMF|````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |1````````````````````````````9| +% *------------------------------* + +\pmdProduct +[ % options + row sep=3, + diagram sep=2, + dots options={ + \draw (#1,#2) node[red] {\(\dots\dots\)}; + }, + edges added={dashed,blue} +]{ % Added edges + {1}{3} + {7}{11} + {18}{21} +}{ % Top Diagram + { % Brick 1 + [ % Options + degree top=3, + degree bottom=4 + ]{ % Upper non transversal edges + \pmdEmpty + }{ % Lower non transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{2} + {2}{3} + {3}{4} + {7}{1} + } + }{ % Brick 2 + [ % Options + degree top=7, + blank bottom=1, + degree bottom=5, + levels=2 + ]{ % Upper non transversal edges + [level=2]{3}{16} + {4}{5} + {6}{7} + }{ % Lower non transversal edges + {3}{4} + {5}{6} + }{ % Transversal edges + {1}{2} + } + }{ % Brick 3 + [ % Options + blank top=3, + degree top=5, + blank bottom=4, + degree bottom=4, + levels=2 + ]{ % Upper non transversal edges + {4}{5} + {6}{7} + }{ % Lower non transversal edges + {5}{6} + {7}{8} + }{ % Transversal edges + \pmdEmpty + } + } +}{ % Bottom Diagram + { % Brick 1 + [ % Options + degree top=3, + degree bottom=4 + ]{ % Upper non transversal edges + \pmdEmpty + }{ % Lower non transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{2} + {2}{3} + {3}{4} + [height=1.5]{7}{1} + } + }{ % Brick 2 + [ % Options + degree top=7, + blank bottom=1, + degree bottom=5, + levels=2 + ]{ % Upper non transversal edges + [level=2]{3}{16} + {4}{5} + {6}{7} + }{ % Lower non transversal edges + {3}{4} + {5}{6} + }{ % Transversal edges + {1}{2} + } + }{ % Brick 3 + [ % Options + blank top=3, + degree top=5, + blank bottom=4, + degree bottom=4, + levels=2 + ]{ % Upper non transversal edges + {4}{5} + {6}{7} + }{ % Lower non transversal edges + {5}{6} + {7}{8} + }{ % Transversal edges + \pmdEmpty + } + } +}
\ No newline at end of file diff --git a/graphics/pgf/contrib/pmdraw/examples/example-17.tex b/graphics/pgf/contrib/pmdraw/examples/example-17.tex new file mode 100644 index 0000000000..97c6052f8a --- /dev/null +++ b/graphics/pgf/contrib/pmdraw/examples/example-17.tex @@ -0,0 +1,70 @@ +%!TEX root = ../pmdraw.tex + +% *------------------------------* +% |9````````````````````````````0| +% |`````____````____`````````````| +% |````|MFMF\ /MFMF|````````````| +% |````|MF|MF\/MF|MF|````````````| +% |````|MF|\MFMF/|MF|_______`````| +% |````|MF|``````|MFMFMFMFMF|````| +% |````|MF|``````|MF|````````````| +% |````|MF|``````|MF|___`````````| +% |``````````````|MFMFMF|````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |7````````````````````````````0| +% *------------------------------* + +\pmdDiagram[grid]{ + { % Brick 1 + [ % Options + degree=2, + brace node=red, + edges transversal=blue, + brace={ + left=1, + right=4, + label={p - 1} + } + ]{ % Upper non transversal edges + \pmdEmpty + }{ % Lower non transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{2} + } + } + { % Brick 2 + [ % Options + degree top=6, + degree bottom=5, + dots node=blue, + edges upper=red, + edges lower=green, + edges transversal=blue + ]{ % Upper non transversal edges + {3}{4} + {5}{6} + }{ % Lower non transversal edges + {2}{3} + {4}{5} + }{ % Transversal edges + [height=1]{2}{10} + {1}{1} + } + }{ % Brick 3 + [ % Options + degree top=2, + blank top=1, + degree bottom=3 + ]{ % Upper non transversal edges + {2}{3} + }{ % Lower non transversal edges + {1}{2} + }{ % Transversal edges + \pmdEmpty + } + } +}
\ No newline at end of file diff --git a/graphics/pgf/contrib/pmdraw/examples/example-18.tex b/graphics/pgf/contrib/pmdraw/examples/example-18.tex new file mode 100644 index 0000000000..2d1014a1cb --- /dev/null +++ b/graphics/pgf/contrib/pmdraw/examples/example-18.tex @@ -0,0 +1,52 @@ +%!TEX root = ../pmdraw.tex + +% *------------------------------* +% |8````````````````````````````0| +% |`````____````____`````````````| +% |````|MFMF\ /MFMF|````````````| +% |````|MF|MF\/MF|MF|````````````| +% |````|MF|\MFMF/|MF|_______`````| +% |````|MF|``````|MFMFMFMFMF|````| +% |````|MF|``````|MF|````````````| +% |````|MF|``````|MF|___`````````| +% |``````````````|MFMFMF|````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |4````````````````````````````0| +% *------------------------------* + +\pmdDiagram{ + { % Brick 1 + [ % Options + degree=5, + levels top=1, + levels bottom=1, + labels, + labels top node={red,above=16pt} + ]{ % Upper non transversal edges + [height=1.1]{2}{5} + }{ % Lower non transversal edges + [height=0.3]{2}{5} + }{ % Transversal edges + {1}{1} + } + }{ % Brick 2 + [ % Options + degree=2, + levels top=1, + levels bottom=1, + labels, + labels bottom options={ + \draw (#1,#2) node[below=6pt] {\(#3''\)}; + }, + labels bottom start=6 + ]{ % Upper non transversal edges + {1}{2} + }{ % Lower non transversal edges + {1}{2} + }{ % Transversal edges + {1}{2} + } + } +}
\ No newline at end of file diff --git a/graphics/pgf/contrib/pmdraw/examples/example-19.tex b/graphics/pgf/contrib/pmdraw/examples/example-19.tex new file mode 100644 index 0000000000..32c24bcf23 --- /dev/null +++ b/graphics/pgf/contrib/pmdraw/examples/example-19.tex @@ -0,0 +1,53 @@ +%!TEX root = ../pmdraw.tex + +% *------------------------------* +% |7````````````````````````````6| +% |`````____````____`````````````| +% |````|MFMF\ /MFMF|````````````| +% |````|MF|MF\/MF|MF|````````````| +% |````|MF|\MFMF/|MF|_______`````| +% |````|MF|``````|MFMFMFMFMF|````| +% |````|MF|``````|MF|````````````| +% |````|MF|``````|MF|___`````````| +% |``````````````|MFMFMF|````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |7````````````````````````````3| +% *------------------------------* + +\pmdDiagram[grid]{ + { % Brick 1 + [ % Options + degree=5, + levels top=1, + levels bottom=1, + labels, + labels top node={red,above=16pt} + ]{ % Upper non transversal edges + [height=1.1]{2}{5} + }{ % Lower non transversal edges + [height=0.3]{2}{5} + }{ % Transversal edges + {1}{1} + } + }{ % Brick 2 + [ % Options + degree=2, + levels top=1, + levels bottom=1, + labels, + labels bottom options={ + \draw (#1,#2) node[below=6pt] {\(#3''\)}; + }, + labels bottom start=6, + labels top start=-4 + ]{ % Upper non transversal edges + {1}{2} + }{ % Lower non transversal edges + {1}{2} + }{ % Transversal edges + {1}{2} + } + } +}
\ No newline at end of file diff --git a/graphics/pgf/contrib/pmdraw/examples/example-2.tex b/graphics/pgf/contrib/pmdraw/examples/example-2.tex new file mode 100644 index 0000000000..c80de8e5a3 --- /dev/null +++ b/graphics/pgf/contrib/pmdraw/examples/example-2.tex @@ -0,0 +1,39 @@ +%!TEX root = ../pmdraw.tex + +% *------------------------------* +% |0````````````````````````````5| +% |`````____````____`````````````| +% |````|MFMF\ /MFMF|````````````| +% |````|MF|MF\/MF|MF|````````````| +% |````|MF|\MFMF/|MF|_______`````| +% |````|MF|``````|MFMFMFMFMF|````| +% |````|MF|``````|MF|````````````| +% |````|MF|``````|MF|___`````````| +% |``````````````|MFMFMF|````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |0````````````````````````````3| +% *------------------------------* + +\pmdBrick[ % Options + blank top=2, + degree top=5, + blank bottom=1, + degree bottom=4, + levels top=4, + levels bottom=3 +]{ % Upper non transversal edges + {3}{4} + {5}{6} + [level=2]{4}{6} + [level=3]{4}{7} + [level=4]{3}{7} +}{ % Lower non transversal edges + {1}{2} + {3}{4} + [level=2]{2}{4} + [level=3]{2}{5} +}{ % Transversal edges + \pmdEmpty +}
\ No newline at end of file diff --git a/graphics/pgf/contrib/pmdraw/examples/example-20.tex b/graphics/pgf/contrib/pmdraw/examples/example-20.tex new file mode 100644 index 0000000000..8d0bc25cb3 --- /dev/null +++ b/graphics/pgf/contrib/pmdraw/examples/example-20.tex @@ -0,0 +1,171 @@ +%!TEX root = ../pmdraw.tex + +% *------------------------------* +% |0````````````````````````````9| +% |`````____````____`````````````| +% |````|MFMF\ /MFMF|````````````| +% |````|MF|MF\/MF|MF|````````````| +% |````|MF|\MFMF/|MF|_______`````| +% |````|MF|``````|MFMFMFMFMF|````| +% |````|MF|``````|MF|````````````| +% |````|MF|``````|MF|___`````````| +% |``````````````|MFMFMF|````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |3````````````````````````````8| +% *------------------------------* + +\usetikzlibrary{patterns} + +\newcommand{\blockStyles}{ + \tikzstyle{typeI} = [ + very thick, + rounded corners=5pt, + red, + preaction={fill, red!3} + ] + \tikzstyle{typeT} = [ + very thick, + rounded corners=5pt, + dash pattern={on 7.5pt off 2.5pt}, + green, + preaction={fill, green!3} + ] + \tikzstyle{typeB} = [ + very thick, + rounded corners=5pt, + dash pattern={on 2.5pt off 2.5pt}, + blue, + preaction={fill, blue!3} + ] + \tikzstyle{typeO} = [ + very thick, + rounded corners=5pt, + dash pattern={on 2.5pt off 2.5pt on 7.5pt off 2.5pt}, + orange, + preaction={fill, orange!3} + ] + \tikzstyle{typeU} = [ + very thick, + rounded corners=5pt, + dash pattern={on 2.5pt off 2.5pt on 2.5pt off 2.5pt on 7.5pt off 2.5pt}, + violet, + preaction={fill, violet!3} + ] + \tikzstyle{typeN} = [ + very thick, + rounded corners=5pt, + dash pattern={on 7.5pt off 2.5pt on 7.5pt off 2.5pt on 2.5pt off 2.5pt}, + yellow, + preaction={fill, yellow!3} + ] +} + +\pmdProduct[ % Options + decorate before={ + \blockStyles + \draw[typeI] (0.6, 2.4) -- (1.4, 2.4) -- (1.4, 0.7) -- (3.4, 0.7) -- (3.4, -3.4) -- (2.6, -3.4) -- (2.6, -1.7) -- (0.6, -1.7) -- cycle; + \draw[typeT] (1.6, 1.3) rectangle (3.4, 2.4); + \draw[typeB] (0.6, -3.4) rectangle (2.4, -2.3); + } +]{ % Added edges + {1}{3} +}{ % Top Diagram + { % Brick 1 + [ % Options + degree=3 + ]{ % Upper non transversal edges + {2}{3} + }{ % Lower non transversal edges + {2}{3} + }{ % Transversal edges + {1}{1} + } + } +}{ % Bottom Diagram + { % Brick 1 + [ % Options + degree=3 + ]{ % Upper non transversal edges + {1}{2} + }{ % Lower non transversal edges + {1}{2} + }{ % Transversal edges + {3}{3} + } + } +} +\hspace{5em} +\pmdProduct[ % Options + decorate before={ + \blockStyles + \draw[typeI] (0.6, 2.4) -- (1.4, 2.4) -- (1.4, 0.7) -- (10.4, 0.7) -- (10.4, -3.4) -- (9.6, -3.4) -- (9.6, -1.7) -- (0.6, -1.7) -- cycle; + \foreach \x in {0,2,7} { + \begin{scope}[shift={(\x,0)}] + \draw[typeT] (1.6, 1.3) rectangle (3.4, 2.4); + \end{scope} + } + \foreach \x in {0,2,4,7} { + \begin{scope}[shift={(\x,0)}] + \draw[typeB] (0.6, -3.4) rectangle (2.4, -2.3); + \end{scope} + } + } +]{ % Added edges + {1}{5} + {9}{10} +}{ % Top Diagram + { % Brick 1 + [ % Options + degree=5 + ]{ % Upper non transversal edges + {2}{3} + {4}{5} + }{ % Lower non transversal edges + {2}{3} + {4}{5} + }{ % Transversal edges + {1}{1} + } + }{ % Brick 2 + [ % Options + blank top=2, + degree top=2, + blank bottom=2, + degree bottom=2 + ]{ % Upper non transversal edges + {3}{4} + }{ % Lower non transversal edges + {3}{4} + }{ % Transversal edges + \pmdEmpty + } + } +}{ % Bottom Diagram + { % Brick 1 + [ % Options + degree=6 + ]{ % Upper non transversal edges + {1}{2} + {3}{4} + {5}{6} + }{ % Lower non transversal edges + {1}{2} + {3}{4} + {5}{6} + }{ % Transversal edges + \pmdEmpty + } + }{ % Brick 2 + [ % Options + degree=3 + ]{ % Upper non transversal edges + {1}{2} + }{ % Lower non transversal edges + {1}{2} + }{ % Transversal edges + {3}{3} + } + } +}
\ No newline at end of file diff --git a/graphics/pgf/contrib/pmdraw/examples/example-21.tex b/graphics/pgf/contrib/pmdraw/examples/example-21.tex new file mode 100644 index 0000000000..e4bd9556cc --- /dev/null +++ b/graphics/pgf/contrib/pmdraw/examples/example-21.tex @@ -0,0 +1,183 @@ +%!TEX root = ../pmdraw.tex + +% *------------------------------* +% |8````````````````````````````7| +% |`````____````____`````````````| +% |````|MFMF\ /MFMF|````````````| +% |````|MF|MF\/MF|MF|````````````| +% |````|MF|\MFMF/|MF|_______`````| +% |````|MF|``````|MFMFMFMFMF|````| +% |````|MF|``````|MF|````````````| +% |````|MF|``````|MF|___`````````| +% |``````````````|MFMFMF|````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |7````````````````````````````3| +% *------------------------------* + +\usetikzlibrary{patterns} + +\newcommand{\blockStyles}{ + \tikzstyle{typeI} = [ + very thick, + rounded corners=5pt, + red, + preaction={fill, red!3} + ] + \tikzstyle{typeT} = [ + very thick, + rounded corners=5pt, + dash pattern={on 7.5pt off 2.5pt}, + green, + preaction={fill, green!3} + ] + \tikzstyle{typeB} = [ + very thick, + rounded corners=5pt, + dash pattern={on 2.5pt off 2.5pt}, + blue, + preaction={fill, blue!3} + ] + \tikzstyle{typeO} = [ + very thick, + rounded corners=5pt, + dash pattern={on 2.5pt off 2.5pt on 7.5pt off 2.5pt}, + orange, + preaction={fill, orange!3} + ] + \tikzstyle{typeU} = [ + very thick, + rounded corners=5pt, + dash pattern={on 2.5pt off 2.5pt on 2.5pt off 2.5pt on 7.5pt off 2.5pt}, + violet, + preaction={fill, violet!3} + ] + \tikzstyle{typeN} = [ + very thick, + rounded corners=5pt, + dash pattern={on 7.5pt off 2.5pt on 7.5pt off 2.5pt on 2.5pt off 2.5pt}, + yellow, + preaction={fill, yellow!3} + ] +} + +\pmdProduct[ % Options + decorate before={ + \blockStyles + \draw[typeO] (0.6, -1.9) rectangle (4.4, 0.7); + \foreach \x in {0,2} { + \begin{scope}[shift={(\x,0)}] + \draw[typeB] (0.6, -3.4) rectangle (2.4, -2.3); + \draw[typeT] (0.6, 1.3) rectangle (2.4, 2.4); + \end{scope} + } + } +]{ % Added edges + {1}{4} +}{ % Top Diagram + { % Brick 1 + [ % Options + degree=4 + ]{ % Upper non transversal edges + {1}{2} + {3}{4} + }{ % Lower non transversal edges + {1}{2} + {3}{4} + }{ % Transversal edges + \pmdEmpty + } + } +}{ % Bottom Diagram + { % Brick 1 + [ % Options + degree=4, + levels top=2 + ]{ % Upper non transversal edges + [level=2]{1}{4} + {2}{3} + }{ % Lower non transversal edges + {1}{2} + {3}{4} + }{ % Transversal edges + \pmdEmpty + } + } +} +\hspace{5em} +\pmdProduct[ % Options + decorate before={ + \blockStyles + \draw[typeO] (0.6, -1.9) rectangle (11.4, 0.7); + \foreach \x in {0,2,4,7,9} { + \begin{scope}[shift={(\x,0)}] + \draw[typeB] (0.6, -3.4) rectangle (2.4, -2.3); + \draw[typeT] (0.6, 1.3) rectangle (2.4, 2.4); + \end{scope} + } + } +]{ % Added edges + {1}{5} + {9}{11} +}{ % Top Diagram + { % Brick 1 + [ % Options + degree=6 + ]{ % Upper non transversal edges + {1}{2} + {3}{4} + {5}{6} + }{ % Lower non transversal edges + {1}{2} + {3}{4} + {5}{6} + }{ % Transversal edges + \pmdEmpty + } + }{ % Brick 2 + [ % Options + degree=4 + ]{ % Upper non transversal edges + {1}{2} + {3}{4} + }{ % Lower non transversal edges + {1}{2} + {3}{4} + }{ % Transversal edges + \pmdEmpty + } + } +}{ % Bottom Diagram + { % Brick 1 + [ % Options + degree top=5, + levels top=2, + degree bottom=6 + ]{ % Upper non transversal edges + [level=2]{1}{11} + {2}{3} + {4}{5} + }{ % Lower non transversal edges + {1}{2} + {3}{4} + {5}{6} + }{ % Transversal edges + \pmdEmpty + } + }{ % Brick 2 + [ % Options + blank top=1, + degree top=3, + degree bottom=4, + levels top=2 + ]{ % Upper non transversal edges + {2}{3} + }{ % Lower non transversal edges + {1}{2} + {3}{4} + }{ % Transversal edges + \pmdEmpty + } + } +}
\ No newline at end of file diff --git a/graphics/pgf/contrib/pmdraw/examples/example-22.tex b/graphics/pgf/contrib/pmdraw/examples/example-22.tex new file mode 100644 index 0000000000..c7aa5c4cba --- /dev/null +++ b/graphics/pgf/contrib/pmdraw/examples/example-22.tex @@ -0,0 +1,179 @@ +%!TEX root = ../pmdraw.tex + +% *------------------------------* +% |7````````````````````````````9| +% |`````____````____`````````````| +% |````|MFMF\ /MFMF|````````````| +% |````|MF|MF\/MF|MF|````````````| +% |````|MF|\MFMF/|MF|_______`````| +% |````|MF|``````|MFMFMFMFMF|````| +% |````|MF|``````|MF|````````````| +% |````|MF|``````|MF|___`````````| +% |``````````````|MFMFMF|````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |6````````````````````````````5| +% *------------------------------* + +\usetikzlibrary{patterns} + +\newcommand{\blockStyles}{ + \tikzstyle{typeI} = [ + very thick, + rounded corners=5pt, + red, + preaction={fill, red!3} + ] + \tikzstyle{typeT} = [ + very thick, + rounded corners=5pt, + dash pattern={on 7.5pt off 2.5pt}, + green, + preaction={fill, green!3} + ] + \tikzstyle{typeB} = [ + very thick, + rounded corners=5pt, + dash pattern={on 2.5pt off 2.5pt}, + blue, + preaction={fill, blue!3} + ] + \tikzstyle{typeO} = [ + very thick, + rounded corners=5pt, + dash pattern={on 2.5pt off 2.5pt on 7.5pt off 2.5pt}, + orange, + preaction={fill, orange!3} + ] + \tikzstyle{typeU} = [ + very thick, + rounded corners=5pt, + dash pattern={on 2.5pt off 2.5pt on 2.5pt off 2.5pt on 7.5pt off 2.5pt}, + violet, + preaction={fill, violet!3} + ] + \tikzstyle{typeN} = [ + very thick, + rounded corners=5pt, + dash pattern={on 7.5pt off 2.5pt on 7.5pt off 2.5pt on 2.5pt off 2.5pt}, + yellow, + preaction={fill, yellow!3} + ] +} + +\pmdProduct[ % Options + decorate before={ + \blockStyles + \draw[typeU] (0.6, 2.4) -- (1.4, 2.4) -- (1.4, 0.7) -- (3.6, 0.7) -- (3.6, 2.4) -- (4.4, 2.4) -- (4.4, -1.7) -- (0.6, -1.7) -- cycle; + \draw[typeT] (1.6, 1.3) rectangle (3.4, 2.4); + \foreach \x in {0,2} { + \begin{scope}[shift={(\x,0)}] + \draw[typeB] (0.6, -3.4) rectangle (2.4, -2.3); + \end{scope} + } + } +]{ % Added edges + {1}{4} +}{ % Top Diagram + { % Brick 1 + [ % Options + degree=4 + ]{ % Upper non transversal edges + {2}{3} + }{ % Lower non transversal edges + {2}{3} + }{ % Transversal edges + {1}{1} + {4}{4} + } + } +}{ % Bottom Diagram + { % Brick 1 + [ % Options + degree=4 + ]{ % Upper non transversal edges + {1}{2} + {3}{4} + }{ % Lower non transversal edges + {1}{2} + {3}{4} + }{ % Transversal edges + \pmdEmpty + } + } +} +\hspace{5em} +\pmdProduct[ % Options + decorate before={ + \blockStyles + \draw[typeU] (0.6, 2.4) -- (1.4, 2.4) -- (1.4, 0.7) -- (10.6, 0.7) -- (10.6, 2.4) -- (11.4, 2.4) -- (11.4, -1.7) -- (0.6, -1.7) -- cycle; + \foreach \x in {0,2,4,7,9} { + \begin{scope}[shift={(\x,0)}] + \draw[typeB] (0.6, -3.4) rectangle (2.4, -2.3); + \end{scope} + } + \foreach \x in {1,3,8} { + \begin{scope}[shift={(\x,0)}] + \draw[typeT] (0.6, 1.3) rectangle (2.4, 2.4); + \end{scope} + } + } +]{ % Added edges + {1}{5} + {9}{11} +}{ % Top Diagram + { % Brick 1 + [ % Options + degree=5 + ]{ % Upper non transversal edges + {2}{3} + {4}{5} + }{ % Lower non transversal edges + {2}{3} + {4}{5} + }{ % Transversal edges + {1}{1} + } + }{ % Brick 2 + [ % Options + blank top=2, + blank bottom=2, + degree=3 + ]{ % Upper non transversal edges + {3}{4} + }{ % Lower non transversal edges + {3}{4} + }{ % Transversal edges + {5}{5} + } + } +}{ % Bottom Diagram + { % Brick 1 + [ % Options + degree=6 + ]{ % Upper non transversal edges + {1}{2} + {3}{4} + {5}{6} + }{ % Lower non transversal edges + {1}{2} + {3}{4} + {5}{6} + }{ % Transversal edges + \pmdEmpty + } + }{ % Brick 2 + [ % Options + degree=4 + ]{ % Upper non transversal edges + {1}{2} + {3}{4} + }{ % Lower non transversal edges + {1}{2} + {3}{4} + }{ % Transversal edges + \pmdEmpty + } + } +}
\ No newline at end of file diff --git a/graphics/pgf/contrib/pmdraw/examples/example-23.tex b/graphics/pgf/contrib/pmdraw/examples/example-23.tex new file mode 100644 index 0000000000..d2ae85c4e7 --- /dev/null +++ b/graphics/pgf/contrib/pmdraw/examples/example-23.tex @@ -0,0 +1,179 @@ +%!TEX root = ../pmdraw.tex + +% *------------------------------* +% |6````````````````````````````5| +% |`````____````____`````````````| +% |````|MFMF\ /MFMF|````````````| +% |````|MF|MF\/MF|MF|````````````| +% |````|MF|\MFMF/|MF|_______`````| +% |````|MF|``````|MFMFMFMFMF|````| +% |````|MF|``````|MF|````````````| +% |````|MF|``````|MF|___`````````| +% |``````````````|MFMFMF|````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |4````````````````````````````3| +% *------------------------------* + +\usetikzlibrary{patterns} + +\newcommand{\blockStyles}{ + \tikzstyle{typeI} = [ + very thick, + rounded corners=5pt, + red, + preaction={fill, red!3} + ] + \tikzstyle{typeT} = [ + very thick, + rounded corners=5pt, + dash pattern={on 7.5pt off 2.5pt}, + green, + preaction={fill, green!3} + ] + \tikzstyle{typeB} = [ + very thick, + rounded corners=5pt, + dash pattern={on 2.5pt off 2.5pt}, + blue, + preaction={fill, blue!3} + ] + \tikzstyle{typeO} = [ + very thick, + rounded corners=5pt, + dash pattern={on 2.5pt off 2.5pt on 7.5pt off 2.5pt}, + orange, + preaction={fill, orange!3} + ] + \tikzstyle{typeU} = [ + very thick, + rounded corners=5pt, + dash pattern={on 2.5pt off 2.5pt on 2.5pt off 2.5pt on 7.5pt off 2.5pt}, + violet, + preaction={fill, violet!3} + ] + \tikzstyle{typeN} = [ + very thick, + rounded corners=5pt, + dash pattern={on 7.5pt off 2.5pt on 7.5pt off 2.5pt on 2.5pt off 2.5pt}, + yellow, + preaction={fill, yellow!3} + ] +} + +\pmdProduct[ % Options + decorate before={ + \blockStyles + \draw[typeN] (0.6, -3.4) -- (1.4, -3.4) -- (1.4, -1.7) -- (3.6, -1.7) -- (3.6, -3.4) -- (4.4, -3.4) -- (4.4, 0.7) -- (0.6, 0.7) -- cycle; + \draw[typeB] (1.6, -3.4) rectangle (3.4, -2.3); + \foreach \x in {0,2} { + \begin{scope}[shift={(\x,0)}] + \draw[typeT] (0.6, 1.3) rectangle (2.4, 2.4); + \end{scope} + } + } +]{ % Added edges + {1}{4} +}{ % Top Diagram + { % Brick 1 + [ % Options + degree=4 + ]{ % Upper non transversal edges + {1}{2} + {3}{4} + }{ % Lower non transversal edges + {1}{2} + {3}{4} + }{ % Transversal edges + \pmdEmpty + } + } +}{ % Bottom Diagram + { % Brick 1 + [ % Options + degree=4 + ]{ % Upper non transversal edges + {2}{3} + }{ % Lower non transversal edges + {2}{3} + }{ % Transversal edges + {1}{1} + {4}{4} + } + } +} +\hspace{5em} +\pmdProduct[ % Options + decorate before={ + \blockStyles + \draw[typeN] (0.6, -3.4) -- (1.4, -3.4) -- (1.4, -1.7) -- (10.6, -1.7) -- (10.6, -3.4) -- (11.4, -3.4) -- (11.4, 0.7) -- (0.6, 0.7) -- cycle; + \foreach \x in {0,2,4,7,9} { + \begin{scope}[shift={(\x,0)}] + \draw[typeT] (0.6, 1.3) rectangle (2.4, 2.4); + \end{scope} + } + \foreach \x in {1,3,8} { + \begin{scope}[shift={(\x,0)}] + \draw[typeB] (0.6, -3.4) rectangle (2.4, -2.3); + \end{scope} + } + } +]{ % Added edges + {1}{5} + {9}{11} +}{ % Top Diagram + { % Brick 1 + [ % Options + degree=6 + ]{ % Upper non transversal edges + {1}{2} + {3}{4} + {5}{6} + }{ % Lower non transversal edges + {1}{2} + {3}{4} + {5}{6} + }{ % Transversal edges + \pmdEmpty + } + }{ % Brick 2 + [ % Options + degree=4 + ]{ % Upper non transversal edges + {1}{2} + {3}{4} + }{ % Lower non transversal edges + {1}{2} + {3}{4} + }{ % Transversal edges + \pmdEmpty + } + } +}{ % Bottom Diagram + { % Brick 1 + [ % Options + degree=5 + ]{ % Upper non transversal edges + {2}{3} + {4}{5} + }{ % Lower non transversal edges + {2}{3} + {4}{5} + }{ % Transversal edges + {1}{1} + } + }{ % Brick 2 + [ % Options + blank top=2, + blank bottom=2, + degree=3 + ]{ % Upper non transversal edges + {3}{4} + }{ % Lower non transversal edges + {3}{4} + }{ % Transversal edges + {5}{5} + } + } +}
\ No newline at end of file diff --git a/graphics/pgf/contrib/pmdraw/examples/example-24.tex b/graphics/pgf/contrib/pmdraw/examples/example-24.tex new file mode 100644 index 0000000000..7b93adc805 --- /dev/null +++ b/graphics/pgf/contrib/pmdraw/examples/example-24.tex @@ -0,0 +1,160 @@ +%!TEX root = ../pmdraw.tex + +% *------------------------------* +% |6```````````````````````````0| +% |`````____````____`````````````| +% |````|MFMF\ /MFMF|````````````| +% |````|MF|MF\/MF|MF|````````````| +% |````|MF|\MFMF/|MF|_______`````| +% |````|MF|``````|MFMFMFMFMF|````| +% |````|MF|``````|MF|````````````| +% |````|MF|``````|MF|___`````````| +% |``````````````|MFMFMF|````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |9````````````````````````````8| +% *------------------------------* + +\pmdProduct[ % Options + decorate after={ + \draw (1, 2) node[above=6pt] {\( x \)\strut}; + \draw (2, 2) node[above=6pt] {\( y \)\strut}; + } +]{ % Added edges + {1}{3} +}{ % Top diagram + { % Brick 1 + [ + degree=3 + ]{ % Upper non transversal edges + {1}{2} + }{ % Lower non transversal edges + \pmdEmpty + }{ % Transversal edges + \pmdEmpty + } + } +}{ % Bottom diagram + { % Brick 1 + [ + degree=3 + ]{ % Upper non transversal edges + \pmdEmpty + }{ % Lower non transversal edges + \pmdEmpty + }{ % Transversal edges + \pmdEmpty + } + } +} +\hspace{2em} +\pmdProduct[ % Options + decorate after={ + \draw (1, 2) node[above=6pt] {\( x \)}; + \draw (1, 0) node[left=6pt] {\( y \)}; + \draw (1, -1) node[left=6pt] {\( j''' \)}; + \draw (1, -3) node[left=6pt] {\( z \)}; + } +]{ % Added edges + {1}{3} +}{ % Top diagram + { % Brick 1 + [ + degree=3 + ]{ % Upper non transversal edges + \pmdEmpty + }{ % Lower non transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + } + } +}{ % Bottom diagram + { % Brick 1 + [ + degree=3 + ]{ % Upper non transversal edges + \pmdEmpty + }{ % Lower non transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + } + } +} +\hspace{2em} +\pmdProduct[ % Options + decorate after={ + \draw (1, 2) node[above=6pt] {\( x \)}; + \draw (1, 0) node[left=6pt] {\( y \)}; + \draw (1, -1) node[left=6pt] {\( j''' \)}; + \draw (2, -1) node[below=4pt] {\( z \)}; + \draw (2, 0) node[above right=0pt] {\( k'' \)}; + \draw (2, 2) node[above=6pt] {\( w \)}; + } +]{ % Added edges + {1}{3} +}{ % Top diagram + { % Brick 1 + [ + degree=3 + ]{ % Upper non transversal edges + \pmdEmpty + }{ % Lower non transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{2} + } + } +}{ % Bottom diagram + { % Brick 1 + [ + degree=3 + ]{ % Upper non transversal edges + {1}{2} + }{ % Lower non transversal edges + \pmdEmpty + }{ % Transversal edges + \pmdEmpty + } + } +} +\hspace{2em} +\pmdProduct[ % Options + decorate after={ + \draw (1, 2) node[above=6pt] {\( x \)}; + \draw (1, 0) node[left=6pt] {\( y \)}; + \draw (1, -1) node[left=6pt] {\( j''' \)}; + \draw (2, -1) node[below=4pt] {\( z \)}; + \draw (2, 0) node[above=4pt] {\( k'' \)}; + \draw (3, 0) node[above=4pt] {\( w \)}; + } +]{ % Added edges + {1}{4} +}{ % Top diagram + { % Brick 1 + [ + degree=4 + ]{ % Upper non transversal edges + \pmdEmpty + }{ % Lower non transversal edges + {2}{3} + }{ % Transversal edges + {1}{1} + } + } +}{ % Bottom diagram + { % Brick 1 + [ + degree=4 + ]{ % Upper non transversal edges + {1}{2} + }{ % Lower non transversal edges + \pmdEmpty + }{ % Transversal edges + \pmdEmpty + } + } +}
\ No newline at end of file diff --git a/graphics/pgf/contrib/pmdraw/examples/example-25.tex b/graphics/pgf/contrib/pmdraw/examples/example-25.tex new file mode 100644 index 0000000000..bea76db2f3 --- /dev/null +++ b/graphics/pgf/contrib/pmdraw/examples/example-25.tex @@ -0,0 +1,63 @@ +%!TEX root = ../pmdraw.tex + +% *------------------------------* +% |9````````````````````````````1| +% |`````____````____`````````````| +% |````|MFMF\ /MFMF|````````````| +% |````|MF|MF\/MF|MF|````````````| +% |````|MF|\MFMF/|MF|_______`````| +% |````|MF|``````|MFMFMFMFMF|````| +% |````|MF|``````|MF|````````````| +% |````|MF|``````|MF|___`````````| +% |``````````````|MFMFMF|````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |4````````````````````````````2| +% *------------------------------* + +\pmdDiagram{ + { % Brick 1 + [ % Options + degree=5, + brace={ + left=4, + right=7, + label={p - 3} + } + ]{ % Upper non transversal edges + \pmdEmpty + }{ % Lower non transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{2} + {2}{3} + {3}{1} + {4}{4} + {5}{5} + } + } + { % Brick 2 + [ % Options + degree=5 + ]{ % Upper non transversal edges + {2}{3} + {4}{5} + }{ % Lower non transversal edges + {2}{3} + {4}{5} + }{ % Transversal edges + {1}{1} + } + }{ % Brick 3 + [ % Options + degree=2 + ]{ % Upper non transversal edges + {1}{2} + }{ % Lower non transversal edges + {1}{2} + }{ % Transversal edges + \pmdEmpty + } + } +}
\ No newline at end of file diff --git a/graphics/pgf/contrib/pmdraw/examples/example-3.tex b/graphics/pgf/contrib/pmdraw/examples/example-3.tex new file mode 100644 index 0000000000..09a5256eac --- /dev/null +++ b/graphics/pgf/contrib/pmdraw/examples/example-3.tex @@ -0,0 +1,53 @@ +%!TEX root = ../pmdraw.tex + +% *------------------------------* +% |6````````````````````````````2| +% |`````____````____`````````````| +% |````|MFMF\ /MFMF|````````````| +% |````|MF|MF\/MF|MF|````````````| +% |````|MF|\MFMF/|MF|_______`````| +% |````|MF|``````|MFMFMFMFMF|````| +% |````|MF|``````|MF|````````````| +% |````|MF|``````|MF|___`````````| +% |``````````````|MFMFMF|````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |9````````````````````````````4| +% *------------------------------* + +\pmdDiagram{ + { % Brick 1 + [ % Options + degree=5, + levels top=4, + levels bottom=3 + ]{ % Upper non transversal edges + {1}{2} + {3}{4} + [level=2]{2}{4} + [level=3]{2}{5} + [level=4]{1}{5} + [level=3]{5}{7} + }{ % Lower non transversal edges + {1}{2} + {3}{4} + [level=2]{2}{4} + [level=3]{2}{5} + }{ % Transversal edges + {1}{1} + } + }{ % Brick 2 + [ % Options + degree=4 + ]{ % Upper non transversal edges + {1}{2} + {3}{4} + }{ % Lower non transversal edges + {1}{2} + }{ % Transversal edges + {1}{2} + {3}{4} + } + } +}
\ No newline at end of file diff --git a/graphics/pgf/contrib/pmdraw/examples/example-4.tex b/graphics/pgf/contrib/pmdraw/examples/example-4.tex new file mode 100644 index 0000000000..bbbf5bd819 --- /dev/null +++ b/graphics/pgf/contrib/pmdraw/examples/example-4.tex @@ -0,0 +1,77 @@ +%!TEX root = ../pmdraw.tex + +% *------------------------------* +% |1````````````````````````````1| +% |`````____````____`````````````| +% |````|MFMF\ /MFMF|````````````| +% |````|MF|MF\/MF|MF|````````````| +% |````|MF|\MFMF/|MF|_______`````| +% |````|MF|``````|MFMFMFMFMF|````| +% |````|MF|``````|MF|````````````| +% |````|MF|``````|MF|___`````````| +% |``````````````|MFMFMF|````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |8````````````````````````````3| +% *------------------------------* + +\pmdDiagram{ + { % Brick 1 + [ % Options + degree top=3, + degree bottom=4, + brace={ + left=2, + right=7, + label={p} + } + ]{ % Upper non transversal edges + \pmdEmpty + }{ % Lower non transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{2} + {2}{3} + {3}{4} + {7}{1} + } + }{ % Brick 2 + [ % Options + degree top=7, + blank bottom=1, + degree bottom=5, + levels=2, + brace={ + left=4, + right=12, + label={q}, + above + } + ]{ % Upper non transversal edges + [level=2]{3}{13} + {4}{5} + {6}{7} + }{ % Lower non transversal edges + {3}{4} + {5}{6} + }{ % Transversal edges + {1}{2} + } + }{ % Brick 3 + [ % Options + degree top=5, + blank bottom=1, + degree bottom=4, + levels=2 + ]{ % Upper non transversal edges + {1}{2} + {3}{4} + }{ % Lower non transversal edges + {2}{3} + {4}{5} + }{ % Transversal edges + \pmdEmpty + } + } +}
\ No newline at end of file diff --git a/graphics/pgf/contrib/pmdraw/examples/example-5.tex b/graphics/pgf/contrib/pmdraw/examples/example-5.tex new file mode 100644 index 0000000000..e7a9c63e96 --- /dev/null +++ b/graphics/pgf/contrib/pmdraw/examples/example-5.tex @@ -0,0 +1,118 @@ +%!TEX root = ../pmdraw.tex + +% *------------------------------* +% |1````````````````````````````2| +% |`````____````____`````````````| +% |````|MFMF\ /MFMF|````````````| +% |````|MF|MF\/MF|MF|````````````| +% |````|MF|\MFMF/|MF|_______`````| +% |````|MF|``````|MFMFMFMFMF|````| +% |````|MF|``````|MF|````````````| +% |````|MF|``````|MF|___`````````| +% |``````````````|MFMFMF|````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |2````````````````````````````8| +% *------------------------------* + +\pmdProduct{ % Added edges + {1}{3} + {7}{11} + {15}{18} +}{ % Top Diagram + { % Brick 1 + [ % Options + degree top=3, + degree bottom=4 + ]{ % Upper non transversal edges + \pmdEmpty + }{ % Lower non transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{2} + {2}{3} + {3}{4} + {7}{1} + } + }{ % Brick 2 + [ % Options + degree top=7, + blank bottom=1, + degree bottom=5, + levels=2 + ]{ % Upper non transversal edges + [level=2]{3}{13} + {4}{5} + {6}{7} + }{ % Lower non transversal edges + {3}{4} + {5}{6} + }{ % Transversal edges + {1}{2} + } + }{ % Brick 3 + [ % Options + degree top=5, + blank bottom=1, + degree bottom=4, + levels=2 + ]{ % Upper non transversal edges + {1}{2} + {3}{4} + }{ % Lower non transversal edges + {2}{3} + {4}{5} + }{ % Transversal edges + \pmdEmpty + } + } +}{ % Bottom Diagram + { % Brick 1 + [ % Options + degree top=3, + degree bottom=4 + ]{ % Upper non transversal edges + \pmdEmpty + }{ % Lower non transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{2} + {2}{3} + {3}{4} + {7}{1} + } + }{ % Brick 2 + [ % Options + degree top=7, + blank bottom=1, + degree bottom=5, + levels=2, + no dots + ]{ % Upper non transversal edges + [level=2]{3}{13} + {4}{5} + {6}{7} + }{ % Lower non transversal edges + {3}{4} + {5}{6} + }{ % Transversal edges + {1}{2} + } + }{ % Brick 3 + [ % Options + degree top=5, + blank bottom=1, + degree bottom=4, + levels=2 + ]{ % Upper non transversal edges + {1}{2} + {3}{4} + }{ % Lower non transversal edges + {2}{3} + {4}{5} + }{ % Transversal edges + \pmdEmpty + } + } +}
\ No newline at end of file diff --git a/graphics/pgf/contrib/pmdraw/examples/example-6.tex b/graphics/pgf/contrib/pmdraw/examples/example-6.tex new file mode 100644 index 0000000000..18a47a794c --- /dev/null +++ b/graphics/pgf/contrib/pmdraw/examples/example-6.tex @@ -0,0 +1,55 @@ +%!TEX root = ../pmdraw.tex + +% *------------------------------* +% |4````````````````````````````5| +% |`````____````____`````````````| +% |````|MFMF\ /MFMF|````````````| +% |````|MF|MF\/MF|MF|````````````| +% |````|MF|\MFMF/|MF|_______`````| +% |````|MF|``````|MFMFMFMFMF|````| +% |````|MF|``````|MF|````````````| +% |````|MF|``````|MF|___`````````| +% |``````````````|MFMFMF|````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |1````````````````````````````9| +% *------------------------------* + +\pmdProduct[ % Options + decorate after={ + \draw[very thick,red,rounded corners=5pt] (0.6, -3.4) rectangle (1.4, 2.4); + } +]{ % Added edges + {1}{4} +}{ % Top Diagram + { % Brick 1 + [ % Options + degree=4 + ]{ % Upper non transversal edges + \pmdEmpty + }{ % Lower non transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{2} + {3}{3} + {4}{4} + } + } +}{ % Bottom Diagram + { % Brick 1 + [ % Options + degree=4 + ]{ % Upper non transversal edges + \pmdEmpty + }{ % Lower non transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{2} + {3}{3} + {4}{4} + } + } +}
\ No newline at end of file diff --git a/graphics/pgf/contrib/pmdraw/examples/example-7.tex b/graphics/pgf/contrib/pmdraw/examples/example-7.tex new file mode 100644 index 0000000000..171bf113a4 --- /dev/null +++ b/graphics/pgf/contrib/pmdraw/examples/example-7.tex @@ -0,0 +1,63 @@ +%!TEX root = ../pmdraw.tex + +% *------------------------------* +% |3````````````````````````````6| +% |`````____````____`````````````| +% |````|MFMF\ /MFMF|````````````| +% |````|MF|MF\/MF|MF|````````````| +% |````|MF|\MFMF/|MF|_______`````| +% |````|MF|``````|MFMFMFMFMF|````| +% |````|MF|``````|MF|````````````| +% |````|MF|``````|MF|___`````````| +% |``````````````|MFMFMF|````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |3````````````````````````````2| +% *------------------------------* + +\pmdDiagram{ + { % Brick 1 + [ % Options + degree=2, + brace={ + left=1, + right=4, + label={p} + } + ]{ % Upper non transversal edges + \pmdEmpty + }{ % Lower non transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{2} + } + }{ % Brick 2 + [ % Options + degree top=5, + degree bottom=6 + ]{ % Upper non transversal edges + {2}{3} + {4}{5} + }{ % Lower non transversal edges + {3}{4} + {5}{6} + }{ % Transversal edges + [height=1]{10}{2} + {1}{1} + } + }{ % Brick 3 + [ % Options + degree top=3, + blank bottom=1, + degree bottom=2 + ]{ % Upper non transversal edges + {1}{2} + }{ % Lower non transversal edges + {2}{3} + }{ % Transversal edges + \pmdEmpty + } + } +}
\ No newline at end of file diff --git a/graphics/pgf/contrib/pmdraw/examples/example-8.tex b/graphics/pgf/contrib/pmdraw/examples/example-8.tex new file mode 100644 index 0000000000..6ed2f2cf5c --- /dev/null +++ b/graphics/pgf/contrib/pmdraw/examples/example-8.tex @@ -0,0 +1,63 @@ +%!TEX root = ../pmdraw.tex + +% *------------------------------* +% |0````````````````````````````7| +% |`````____````____`````````````| +% |````|MFMF\ /MFMF|````````````| +% |````|MF|MF\/MF|MF|````````````| +% |````|MF|\MFMF/|MF|_______`````| +% |````|MF|``````|MFMFMFMFMF|````| +% |````|MF|``````|MF|````````````| +% |````|MF|``````|MF|___`````````| +% |``````````````|MFMFMF|````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |7````````````````````````````9| +% *------------------------------* + +\pmdDiagram{ + { % Brick 1 + [ % Options + degree=2, + brace={ + left=1, + right=4, + label={p} + } + ]{ % Upper non transversal edges + \pmdEmpty + }{ % Lower non transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{2} + } + }{ % Brick 2 + [ % Options + degree top=6, + degree bottom=5 + ]{ % Upper non transversal edges + {3}{4} + {5}{6} + }{ % Lower non transversal edges + {2}{3} + {4}{5} + }{ % Transversal edges + [height=1]{2}{10} + {1}{1} + } + }{ % Brick 3 + [ % Options + degree top=2, + blank top=1, + degree bottom=3 + ]{ % Upper non transversal edges + {2}{3} + }{ % Lower non transversal edges + {1}{2} + }{ % Transversal edges + \pmdEmpty + } + } +}
\ No newline at end of file diff --git a/graphics/pgf/contrib/pmdraw/examples/example-9.tex b/graphics/pgf/contrib/pmdraw/examples/example-9.tex new file mode 100644 index 0000000000..8e7d87023f --- /dev/null +++ b/graphics/pgf/contrib/pmdraw/examples/example-9.tex @@ -0,0 +1,37 @@ +%!TEX root = ../pmdraw.tex + +% *------------------------------* +% |1````````````````````````````1| +% |`````____````____`````````````| +% |````|MFMF\ /MFMF|````````````| +% |````|MF|MF\/MF|MF|````````````| +% |````|MF|\MFMF/|MF|_______`````| +% |````|MF|``````|MFMFMFMFMF|````| +% |````|MF|``````|MF|````````````| +% |````|MF|``````|MF|___`````````| +% |``````````````|MFMFMF|````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |7````````````````````````````4| +% *------------------------------* + +\pmdDiagram{ + { % Brick 1 + [ % Options + degree=17 + ]{ % Upper non transversal edges + \pmdEmpty + }{ % Lower non transversal edges + \pmdEmpty + }{ % Transversal edges + [height=0.25]{1}{11} + [height=0.5]{2}{12} + [height=0.75]{3}{13} + [height=1]{4}{14} + [height=1.25]{5}{15} + [height=1.5]{6}{16} + [height=1.75]{7}{17} + } + } +}
\ No newline at end of file diff --git a/graphics/pgf/contrib/pmdraw/pmdraw.pdf b/graphics/pgf/contrib/pmdraw/pmdraw.pdf Binary files differnew file mode 100644 index 0000000000..20a7cdf339 --- /dev/null +++ b/graphics/pgf/contrib/pmdraw/pmdraw.pdf diff --git a/graphics/pgf/contrib/pmdraw/pmdraw.sty b/graphics/pgf/contrib/pmdraw/pmdraw.sty new file mode 100644 index 0000000000..9819f84893 --- /dev/null +++ b/graphics/pgf/contrib/pmdraw/pmdraw.sty @@ -0,0 +1,1636 @@ +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{pmdraw}[2024-10-07 v1.5 pmdraw] + +% *------------------------------* +% |9````````````````````````````5| +% |`````____````____`````````````| +% |````|MFMF\ /MFMF|````````````| +% |````|MF|MF\/MF|MF|````````````| +% |````|MF|\MFMF/|MF|_______`````| +% |````|MF|``````|MFMFMFMFMF|````| +% |````|MF|``````|MF|````````````| +% |````|MF|``````|MF|___`````````| +% |``````````````|MFMFMF|````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |3````````````````````````````1| +% *------------------------------* + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% % +% Required packages % +% % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% \RequirePackage{datetime} +\RequirePackage{keyval} +\RequirePackage{tikz} +\usetikzlibrary{math,decorations.pathreplacing,calligraphy,backgrounds} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% % +% Internal control and option commands % +% - loosely ordered alphabetically % +% - includes default values where appropriate % +% % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\newcommand{\pmdraw@braceLabel}{}% Label of brace + +\newcommand{\pmdraw@diagSep}{1}% Vertical separation between bottom row of top diagram and top row of bottom diagram in product diagram + +\newcommand{\pmdraw@drawAedgesOptions}{}% Draw options for added edges in product diagram +\newcommand{\pmdraw@drawAedges}[2]{% Draws added edges in product diagram from #1 vertex to #2 vertex, assumes #1<#2 + \@ifclassloaded{beamer}{% If in beamer + \uncover<\pmdraw@edgesAddedUncover>{% Uncovers added edges + \foreach \x in {#1,...,#2} {% For each vertex in range + \ifnum\value{pmdraw@ifEdgesAdded}=0% If drawing added edges + \draw[dotted,thick,apply style/.expand once=\pmdraw@drawAedgesOptions] (\x,0) -- (\x,-\pmdraw@diagSep);% Draw concatenation edge + \else% If hiding top vertices + \phantom{% + \draw[dotted,thick,apply style/.expand once=\pmdraw@drawAedgesOptions] (\x,0) -- (\x,-\pmdraw@diagSep);% Draw concatenation edge + }% + \fi% + }% + }% + }{% If not in beamer + \foreach \x in {#1,...,#2} {% For each vertex in range + \ifnum\value{pmdraw@ifEdgesAdded}=0% If drawing added edges + \draw[dotted,thick,apply style/.expand once=\pmdraw@drawAedgesOptions] (\x,0) -- (\x,-\pmdraw@diagSep);% Draw concatenation edge + \else% If hiding top vertices + \phantom{% + \draw[dotted,thick,apply style/.expand once=\pmdraw@drawAedgesOptions] (\x,0) -- (\x,-\pmdraw@diagSep);% Draw concatenation edge + }% + \fi% + }% + }% + \pmdraw@AedgesLoop% Restart for loop +} + +\newcommand{\pmdraw@drawBraceDrawOptions}{}% Draw options for brace +\newcommand{\pmdraw@drawBraceNodeOptions}{}% Node options for brace +\newcommand{\pmdraw@drawBraceDefault}[3]{% Draws brace a brace starting from #1 vertex to #2 vertex with label #3, assumes #1<#2 - DEFAULT + \ifnum\pmdraw@ifProdDiag=1% If drawing a product diagram or if placing brace above diagram + \draw[ + very thick, + decorate, + decoration={calligraphic brace,amplitude=6pt}, + apply style/.expand once=\pmdraw@drawBraceDrawOptions + ] (#1-0.17,\pmdraw@rowSep+0.5) -- (#2+0.17,\pmdraw@rowSep+0.5) + node[ + pos=0.5, + above=6pt, + apply style/.expand once=\pmdraw@drawBraceNodeOptions + ] {\(#3\)};% Draw brace on top of diagram + \else% If not drawing a product diagram or if placing brace below diagram + \draw[ + very thick, + decorate, + decoration={calligraphic brace,mirror,amplitude=6pt}, + apply style/.expand once=\pmdraw@drawBraceDrawOptions + ] (#1-0.17,-0.5) -- (#2+0.17,-0.5) + node[ + pos=0.5, + below=6pt, + apply style/.expand once=\pmdraw@drawBraceNodeOptions + ] {\(#3\)};% Draw brace on bottom of diagram + \fi% +} +\let\pmdraw@drawBrace\pmdraw@drawBraceDefault% Draws brace a brace starting from #1 vertex to #2 vertex with label #3, assumes #1<#2 + +\newcommand{\pmdraw@drawDotsDrawOptions}{}% Draw options for dots between bricks +\newcommand{\pmdraw@drawDotsNodeOptions}{}% Node options for dots between bricks +\newcommand{\pmdraw@drawDotsDefault}[2]{% Draws dots between bricks at (#1,#2) - DEFAULT + \draw[apply style/.expand once=\pmdraw@drawDotsDrawOptions] (#1,#2) node[apply style/.expand once=\pmdraw@drawDotsNodeOptions] {\(\dots\)};% +} +\let\pmdraw@drawDots\pmdraw@drawDotsDefault% Draws dots between bricks at (#1,#2) + +\newcommand{\pmdraw@drawEdgeDrawOptions}{}% Draw options for edge + +\newcommand{\pmdraw@drawLabelBDrawOptions}{}% Draw options for label of a vertex in bottom row +\newcommand{\pmdraw@drawLabelBNodeOptions}{}% Node options for label of a vertex in bottom row +\newcommand{\pmdraw@drawLabelBottomDefault}[3]{% For bottom row, draws the label #3 for a vertex at (#1,#2) - DEFAULT + \draw[apply style/.expand once=\pmdraw@drawLabelBDrawOptions] (#1,#2) node[below=6pt,apply style/.expand once=\pmdraw@drawLabelBNodeOptions] {\(#3'\)};% +} +\let\pmdraw@drawLabelBottom\pmdraw@drawLabelBottomDefault% For bottom row, draws the label #3 for a vertex at (#1,#2) + +\newcommand{\pmdraw@drawLabelTDrawOptions}{}% Draw options for label of a vertex in top row +\newcommand{\pmdraw@drawLabelTNodeOptions}{}% Node options for label of a vertex in top row +\newcommand{\pmdraw@drawLabelTopDefault}[3]{% For top row, draws the label #3 for a vertex at (#1,#2) - DEFAULT + \draw[apply style/.expand once=\pmdraw@drawLabelTDrawOptions] (#1,#2) node[above=6pt,apply style/.expand once=\pmdraw@drawLabelTNodeOptions] {\(#3\)};% +} +\let\pmdraw@drawLabelTop\pmdraw@drawLabelTopDefault% For top row, draws the label #3 for a vertex at (#1,#2) + +\newcommand{\pmdraw@drawLedgesDrawOptions}{}% Draw options for lower non-transversal edges +\newcommand{\pmdraw@drawLedgesDrawDefault}[2]{% Draws lower non-transversal edge from #1 vertex to #2 vertex, assumes #1<#2 - DEFAULT + \draw[apply style/.expand once=\pmdraw@drawLedgesDrawOptions,apply style/.expand once=\pmdraw@drawEdgeDrawOptions] (#1,0) arc (180:90:\pmdraw{edgeHeight});% Draw left arch + \draw[apply style/.expand once=\pmdraw@drawLedgesDrawOptions,apply style/.expand once=\pmdraw@drawEdgeDrawOptions] (#1+\pmdraw{edgeHeight},\pmdraw{edgeHeight}) -- (#2-\pmdraw{edgeHeight},\pmdraw{edgeHeight});% Draw straight line + \draw[apply style/.expand once=\pmdraw@drawLedgesDrawOptions,apply style/.expand once=\pmdraw@drawEdgeDrawOptions] (#2-\pmdraw{edgeHeight},\pmdraw{edgeHeight}) arc (90:0:\pmdraw{edgeHeight});% Draw right arc + \renewcommand{\pmdraw@drawEdgeDrawOptions}{}% Reset draw options for edge +} +\let\pmdraw@drawLedgesDraw\pmdraw@drawLedgesDrawDefault% Draws lower non-transversal edge from #1 vertex to #2 vertex, assumes #1<#2 + +\newcommand{\pmdraw@drawNoLabelBa}{-1}% 1st vertex to skip label in bottom row +\newcommand{\pmdraw@drawNoLabelBb}{-1}% 2nd vertex to skip label in bottom row +\newcommand{\pmdraw@drawNoLabelBc}{-1}% 3rd vertex to skip label in bottom row +\newcommand{\pmdraw@drawNoLabelBd}{-1}% 4th vertex to skip label in bottom row +\newcommand{\pmdraw@drawNoLabelBe}{-1}% 5th vertex to skip label in bottom row +\newcommand{\pmdraw@drawNoLabelBf}{-1}% 6th vertex to skip label in bottom row +\newcommand{\pmdraw@drawNoLabelBg}{-1}% 7th vertex to skip label in bottom row +\newcommand{\pmdraw@drawNoLabelBh}{-1}% 8th vertex to skip label in bottom row +\newcommand{\pmdraw@drawNoLabelBi}{-1}% 9th vertex to skip label in bottom row +\newcommand{\pmdraw@drawNoLabelTa}{-1}% 1st vertex to skip label in top row +\newcommand{\pmdraw@drawNoLabelTb}{-1}% 2nd vertex to skip label in top row +\newcommand{\pmdraw@drawNoLabelTc}{-1}% 3rd vertex to skip label in top row +\newcommand{\pmdraw@drawNoLabelTd}{-1}% 4th vertex to skip label in top row +\newcommand{\pmdraw@drawNoLabelTe}{-1}% 5th vertex to skip label in top row +\newcommand{\pmdraw@drawNoLabelTf}{-1}% 6th vertex to skip label in top row +\newcommand{\pmdraw@drawNoLabelTg}{-1}% 7th vertex to skip label in top row +\newcommand{\pmdraw@drawNoLabelTh}{-1}% 8th vertex to skip label in top row +\newcommand{\pmdraw@drawNoLabelTi}{-1}% 9th vertex to skip label in top row + +\newcommand{\pmdraw@drawNoVertexBa}{-1}% 1st vertex to skip in bottom row +\newcommand{\pmdraw@drawNoVertexBb}{-1}% 2nd vertex to skip in bottom row +\newcommand{\pmdraw@drawNoVertexBc}{-1}% 3rd vertex to skip in bottom row +\newcommand{\pmdraw@drawNoVertexBd}{-1}% 4th vertex to skip in bottom row +\newcommand{\pmdraw@drawNoVertexBe}{-1}% 5th vertex to skip in bottom row +\newcommand{\pmdraw@drawNoVertexBf}{-1}% 6th vertex to skip in bottom row +\newcommand{\pmdraw@drawNoVertexBg}{-1}% 7th vertex to skip in bottom row +\newcommand{\pmdraw@drawNoVertexBh}{-1}% 8th vertex to skip in bottom row +\newcommand{\pmdraw@drawNoVertexBi}{-1}% 9th vertex to skip in bottom row +\newcommand{\pmdraw@drawNoVertexTa}{-1}% 1st vertex to skip in top row +\newcommand{\pmdraw@drawNoVertexTb}{-1}% 2nd vertex to skip in top row +\newcommand{\pmdraw@drawNoVertexTc}{-1}% 3rd vertex to skip in top row +\newcommand{\pmdraw@drawNoVertexTd}{-1}% 4th vertex to skip in top row +\newcommand{\pmdraw@drawNoVertexTe}{-1}% 5th vertex to skip in top row +\newcommand{\pmdraw@drawNoVertexTf}{-1}% 6th vertex to skip in top row +\newcommand{\pmdraw@drawNoVertexTg}{-1}% 7th vertex to skip in top row +\newcommand{\pmdraw@drawNoVertexTh}{-1}% 8th vertex to skip in top row +\newcommand{\pmdraw@drawNoVertexTi}{-1}% 9th vertex to skip in top row + +\newcommand{\pmdraw@drawTedgesDrawOptions}{}% Draw options for transversal edges +\newcommand{\pmdraw@drawTedgesDrawDefault}[2]{% Draws transversal edge from #1 vertex in top row to #2 vertex in bottom row - DEFAULT + \ifnum\pmdraw@ifTedgeHorizontal=0% If drawing a straight line edge + \draw[apply style/.expand once=\pmdraw@drawTedgesDrawOptions,apply style/.expand once=\pmdraw@drawEdgeDrawOptions] (#1,\pmdraw@rowSep) -- (#2,0);% Draw straight line + \else% If transversal edge is drawn horizontally + \ifnum#1>#2% If edge goes from top right to bottom left + \draw[apply style/.expand once=\pmdraw@drawTedgesDrawOptions,apply style/.expand once=\pmdraw@drawEdgeDrawOptions] (#2,0) arc (180:90:\pmdraw{Tlevel});% Draw bottom arch + \draw[apply style/.expand once=\pmdraw@drawTedgesDrawOptions,apply style/.expand once=\pmdraw@drawEdgeDrawOptions] (#2+\pmdraw{Tlevel},\pmdraw{Tlevel}) -- (#1-\pmdraw@rowSep+\pmdraw{Tlevel}, \pmdraw{Tlevel});% Draw straight line + \draw[apply style/.expand once=\pmdraw@drawTedgesDrawOptions,apply style/.expand once=\pmdraw@drawEdgeDrawOptions] (#1-\pmdraw@rowSep+\pmdraw{Tlevel},\pmdraw{Tlevel}) arc (270:360:{\pmdraw@rowSep-\pmdraw{Tlevel}});% Draw top arc + \else% If edge goes from top left to bottom right + \draw[apply style/.expand once=\pmdraw@drawTedgesDrawOptions,apply style/.expand once=\pmdraw@drawEdgeDrawOptions] (#2,0) arc (0:90:\pmdraw{Tlevel});% Draw bottom arch + \draw[apply style/.expand once=\pmdraw@drawTedgesDrawOptions,apply style/.expand once=\pmdraw@drawEdgeDrawOptions] (#2-\pmdraw{Tlevel},\pmdraw{Tlevel}) -- (#1+\pmdraw@rowSep-\pmdraw{Tlevel}, \pmdraw{Tlevel});% Draw straight line + \draw[apply style/.expand once=\pmdraw@drawTedgesDrawOptions,apply style/.expand once=\pmdraw@drawEdgeDrawOptions] (#1+\pmdraw@rowSep-\pmdraw{Tlevel},\pmdraw{Tlevel}) arc (270:180:{\pmdraw@rowSep-\pmdraw{Tlevel}});% Draw top arc + \fi% + \renewcommand{\pmdraw@ifTedgeHorizontal}{0}% Reset flag to default + \fi% + \renewcommand{\pmdraw@drawEdgeDrawOptions}{}% Reset draw options for edge +} +\let\pmdraw@drawTedgesDraw\pmdraw@drawTedgesDrawDefault% Draws transversal edge from #1 vertex in top row to #2 vertex in bottom row + +\newcommand{\pmdraw@drawUedgesDrawOptions}{}% Draw options for upper non-transversal edges +\newcommand{\pmdraw@drawUedgesDrawDefault}[2]{% Draws upper non-transversal edge from #1 vertex to #2 vertex, assumes #1<#2 - DEFAULT + \draw[apply style/.expand once=\pmdraw@drawUedgesDrawOptions,apply style/.expand once=\pmdraw@drawEdgeDrawOptions] (#1,\pmdraw@rowSep) arc (180:270:\pmdraw{edgeHeight});% Draw left arch + \draw[apply style/.expand once=\pmdraw@drawUedgesDrawOptions,apply style/.expand once=\pmdraw@drawEdgeDrawOptions] (#1+\pmdraw{edgeHeight},\pmdraw@rowSep-\pmdraw{edgeHeight}) -- (#2-\pmdraw{edgeHeight},\pmdraw@rowSep-\pmdraw{edgeHeight});% Draw straight line + \draw[apply style/.expand once=\pmdraw@drawUedgesDrawOptions,apply style/.expand once=\pmdraw@drawEdgeDrawOptions] (#2-\pmdraw{edgeHeight},\pmdraw@rowSep-\pmdraw{edgeHeight}) arc (270:360:\pmdraw{edgeHeight});% Draw right arc + \renewcommand{\pmdraw@drawEdgeDrawOptions}{}% Reset draw options for edge +} +\let\pmdraw@drawUedgesDraw\pmdraw@drawUedgesDrawDefault% Draws upper non-transversal edge from #1 vertex to #2 vertex, assumes #1<#2 + +\newcommand{\pmdraw@drawVertexOptions}{}% Draw options for vertices +\newcommand{\pmdraw@drawVertex}[2]{% Draws a vertex at (#1,#2) + \fill[apply style/.expand once=\pmdraw@drawVertexOptions] (#1,#2) circle (.17);% +} + +\newcommand{\pmdraw@edgeUncover}{1-}% Sets the uncover options of edge +\newcommand{\pmdraw@edgesAddedUncover}{1-}% Sets the uncover options of added edges +\newcommand{\pmdraw@edgesUncover}{1-}% Sets the uncover options of edges + +\newcommand{\pmdraw@hookAfterBrick}{}% Hook after drawing a brick +\newcommand{\pmdraw@hookAfterDiagram}{}% Hook after drawing a diagram +\newcommand{\pmdraw@hookBeforeBrick}{}% Hook before drawing a brick +\newcommand{\pmdraw@hookBeforeDiagram}{}% Hook before drawing a diagram + +\newcommand{\pmdraw@ifDiagWDots}{0}% Boolean if drawing a diagram with dots +\newcommand{\pmdraw@ifEdgesFirst}{0}% Boolean if drawing edges before vertices +\newcommand{\pmdraw@ifGrid}{0}% Boolean if displaying helper grid +\newcommand{\pmdraw@ifLabelsB}{0}% Boolean if displaying labels for vertices in bottom row +\newcommand{\pmdraw@ifLabelsT}{0}% Boolean if displaying labels for vertices in top row +\newcommand{\pmdraw@ifProdDiag}{0}% Boolean if drawing a product diagram +\newcommand{\pmdraw@ifTedgesFirst}{0}% Boolean if drawing transversal edges before non-transversal edges +\newcommand{\pmdraw@ifTedgeHorizontal}{0}% Boolean if transversal edge is drawn horizontally + +\newcommand{\pmdraw@NTedgesHeight}{-1000}% Height of non-transversal edges if manually set, a value of -1000 sets height automatically + +\newcommand{\pmdraw@reset}{% Resets user keys and other flags to default values after drawing diagram + \renewcommand{\pmdraw@diagSep}{1}% Resets vertical space between product diagrams + \renewcommand{\pmdraw@drawAedgesOptions}{}% Resets draw options for added edges in product diagram + \let\pmdraw@drawDots\pmdraw@drawDotsDefault% Resets drawing of dots between bricks + \renewcommand{\pmdraw@edgesAddedUncover}{1-}% Resets the uncover options of added edges + \renewcommand{\pmdraw@hookAfterDiagram}{}% Clears hook after drawing a diagram + \renewcommand{\pmdraw@hookBeforeDiagram}{}% Clears hook before drawing a diagram + \renewcommand{\pmdraw@ifGrid}{0}% Hides grid + \renewcommand{\pmdraw@ifDiagWDots}{0}% Reset if drawing a diagram with dots + \renewcommand{\pmdraw@rowSep}{2}% Resets vertical separation between rows of vertices in brick + \renewcommand{\pmdraw@tikz}{}% Resets tikz options + \renewcommand{\pmdraw@vertexSep}{0}% Resets vertical space between product diagrams + \setcounter{pmdraw@blankB}{0}% Resets number of blank vertices in bottom row to the left of brick + \setcounter{pmdraw@blankT}{0}% Resets number of blank vertices in top row to the left of brick + \setcounter{pmdraw@bottomShift}{0}% Resets shift on right end of bottom row of brick + \setcounter{pmdraw@topShift}{0}% Resets shift on right end of top row of brick + \setcounter{pmdraw@ifDiagWDotsFirst}{1}% Reset if drawing first brick of diagram + \setcounter{pmdraw@ifEdgesAdded}{0}% Resets boolean if hiding added edges +} + +\newcommand{\pmdraw@rowSep}{2}% Vertical separation between rows of vertices in brick + +\newcommand{\pmdraw@tikz}{}% Tikz options + +\newcommand{\pmdraw@verticesBottomUncover}{1-}% Sets the uncover options of bottom vertices +\newcommand{\pmdraw@verticesTopUncover}{1-}% Sets the uncover options of top vertices + +\newcommand{\pmdraw@vertexSep}{0}% Vertical separation between bottom row of top diagram and top row of bottom diagram in product diagram not for added edges + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% % +% Counters % +% - loosely ordered alphabetically % +% - includes default values where appropriate % +% % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\newcounter{pmdraw@blankB}% Number of blank vertices in bottom row to the left of brick +\newcounter{pmdraw@blankT}% Number of blank vertices in top row to the left of brick + +\newcounter{pmdraw@bottomTotal}% Size of bottom row of brick +\newcounter{pmdraw@bottomShift}% Shift on right end of bottom row of brick + +\newcounter{pmdraw@braceL}% Left starting vertex of brace +\newcounter{pmdraw@braceR}% Right terminating vertex of brace + +\newcounter{pmdraw@brickShift}% Shift required for bricks after dots in diagram with dots + +\newcounter{pmdraw@degreeB}% Degree (number of vertices) of bottom row of brick +\newcounter{pmdraw@degreeT}% Degree (number of vertices) of top row of brick + +\newcounter{pmdraw@ifDiagWDotsFirst}% In drawing with dots, boolean if drawing first brick of diagram +\setcounter{pmdraw@ifDiagWDotsFirst}{1} + +\newcounter{pmdraw@ifEdge}% Boolean if hiding edge +\setcounter{pmdraw@ifEdge}{0} +\newcounter{pmdraw@ifEdgesAdded}% Boolean if hiding added edges +\setcounter{pmdraw@ifEdgesAdded}{0} +\newcounter{pmdraw@ifEdges}% Boolean if hiding edges +\setcounter{pmdraw@ifEdges}{0} + +\newcounter{pmdraw@ifVerticesBottom}% Boolean if hiding bottom row of vertices +\setcounter{pmdraw@ifVerticesBottom}{0} +\newcounter{pmdraw@ifVerticesTop}% Boolean if hiding top row of vertices +\setcounter{pmdraw@ifVerticesTop}{0} + +\newcounter{pmdraw@labelStartB}% Starting value of labels of vertices in bottom row +\setcounter{pmdraw@labelStartB}{1} +\newcounter{pmdraw@labelStartT}% Starting value of labels of vertices in top row +\setcounter{pmdraw@labelStartT}{1} + +\newcounter{pmdraw@NTlevel}% Level corresponding to a height for a non-transversal edge + +\newcounter{pmdraw@topTotal}% Size of top row of brick +\newcounter{pmdraw@topShift}% Shift on right end of top row of brick + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% % +% Keys for bricks % +% - ordered as per manual % +% % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% To pass draw options to \draw command +% Verbatim copy from: +% https://tex.stackexchange.com/a/64237 +\tikzset{apply style/.code={\tikzset{#1}}} + +\define@key{pmdraw@brick}{degree}{% Sets degree (number of vertices per row) of diagram + \setcounter{pmdraw@degreeB}{#1}% Sets degree (number of vertices per row) for bottom row + \setcounter{pmdraw@degreeT}{#1}% Sets degree (number of vertices per row) for top row +} +\define@key{pmdraw@brick}{degree bottom}{% Sets degree (number of vertices per row) for bottom row + \setcounter{pmdraw@degreeB}{#1}% +} +\define@key{pmdraw@brick}{degree top}{% Sets degree (number of vertices per row) for top row + \setcounter{pmdraw@degreeT}{#1}% +} + +\define@key{pmdraw@brick}{blank bottom}{% Sets the number of blank vertices on left of bottom row + \setcounter{pmdraw@blankB}{#1}% +} +\define@key{pmdraw@brick}{blank top}{% Sets the number of blank vertices on left of top row + \setcounter{pmdraw@blankT}{#1}% +} + +\define@key{pmdraw@brick}{row sep}{% Sets vertical separation between rows of vertices in brick + \renewcommand{\pmdraw@rowSep}{#1}% +} + +\define@key{pmdraw@brick}{vertices}{% Sets the draw options of vertices + \renewcommand{\pmdraw@drawVertexOptions}{#1}% +} +\define@key{pmdraw@brick}{no vertex bottom 1}{% Sets 1st vertex to skip in bottom row + \renewcommand{\pmdraw@drawNoVertexBa}{#1}% +} +\define@key{pmdraw@brick}{no vertex bottom 2}{% Sets 2nd vertex to skip in bottom row + \renewcommand{\pmdraw@drawNoVertexBb}{#1}% +} +\define@key{pmdraw@brick}{no vertex bottom 3}{% Sets 3rd vertex to skip in bottom row + \renewcommand{\pmdraw@drawNoVertexBc}{#1}% +} +\define@key{pmdraw@brick}{no vertex bottom 4}{% Sets 4th vertex to skip in bottom row + \renewcommand{\pmdraw@drawNoVertexBd}{#1}% +} +\define@key{pmdraw@brick}{no vertex bottom 5}{% Sets 5th vertex to skip in bottom row + \renewcommand{\pmdraw@drawNoVertexBe}{#1}% +} +\define@key{pmdraw@brick}{no vertex bottom 6}{% Sets 6th vertex to skip in bottom row + \renewcommand{\pmdraw@drawNoVertexBf}{#1}% +} +\define@key{pmdraw@brick}{no vertex bottom 7}{% Sets 7th vertex to skip in bottom row + \renewcommand{\pmdraw@drawNoVertexBg}{#1}% +} +\define@key{pmdraw@brick}{no vertex bottom 8}{% Sets 8th vertex to skip in bottom row + \renewcommand{\pmdraw@drawNoVertexBh}{#1}% +} +\define@key{pmdraw@brick}{no vertex bottom 9}{% Sets 9th vertex to skip in bottom row + \renewcommand{\pmdraw@drawNoVertexBi}{#1}% +} +\define@key{pmdraw@brick}{no vertex top 1}{% Sets 1st vertex to skip in top row + \renewcommand{\pmdraw@drawNoVertexTa}{#1}% +} +\define@key{pmdraw@brick}{no vertex top 2}{% Sets 2nd vertex to skip in top row + \renewcommand{\pmdraw@drawNoVertexTb}{#1}% +} +\define@key{pmdraw@brick}{no vertex top 3}{% Sets 3rd vertex to skip in top row + \renewcommand{\pmdraw@drawNoVertexTc}{#1}% +} +\define@key{pmdraw@brick}{no vertex top 4}{% Sets 4th vertex to skip in top row + \renewcommand{\pmdraw@drawNoVertexTd}{#1}% +} +\define@key{pmdraw@brick}{no vertex top 5}{% Sets 5th vertex to skip in top row + \renewcommand{\pmdraw@drawNoVertexTe}{#1}% +} +\define@key{pmdraw@brick}{no vertex top 6}{% Sets 6th vertex to skip in top row + \renewcommand{\pmdraw@drawNoVertexTf}{#1}% +} +\define@key{pmdraw@brick}{no vertex top 7}{% Sets 7th vertex to skip in top row + \renewcommand{\pmdraw@drawNoVertexTg}{#1}% +} +\define@key{pmdraw@brick}{no vertex top 8}{% Sets 8th vertex to skip in top row + \renewcommand{\pmdraw@drawNoVertexTh}{#1}% +} +\define@key{pmdraw@brick}{no vertex top 9}{% Sets 9th vertex to skip in top row + \renewcommand{\pmdraw@drawNoVertexTi}{#1}% +} + +\define@key{pmdraw@brick}{vertices options}{% Sets the draw command of vertices + \renewcommand{\pmdraw@drawVertex}[2]{#1}% +} + +\define@key{pmdraw@brick}{labels}[]{% Draws labels for vertices + \renewcommand{\pmdraw@ifLabelsB}{1}% + \renewcommand{\pmdraw@ifLabelsT}{1}% +} +\define@key{pmdraw@brick}{labels bottom}[]{% Draws labels for bottom vertices + \renewcommand{\pmdraw@ifLabelsB}{1}% +} +\define@key{pmdraw@brick}{labels top}[]{% Draws labels for top vertices + \renewcommand{\pmdraw@ifLabelsT}{1}% +} + +\define@key{pmdraw@brick}{labels start}{% Sets starting number for vertex labels + \setcounter{pmdraw@labelStartT}{#1}% + \setcounter{pmdraw@labelStartB}{#1}% +} +\define@key{pmdraw@brick}{labels bottom start}{% Sets starting number for bottom vertex labels + \setcounter{pmdraw@labelStartB}{#1}% +} +\define@key{pmdraw@brick}{labels top start}{% Sets starting number for top vertex labels + \setcounter{pmdraw@labelStartT}{#1}% +} + +\define@key{pmdraw@brick}{no label bottom 1}{% Sets 1st label to skip in bottom row + \renewcommand{\pmdraw@drawNoLabelBa}{#1}% +} +\define@key{pmdraw@brick}{no label bottom 2}{% Sets 2nd label to skip in bottom row + \renewcommand{\pmdraw@drawNoLabelBb}{#1}% +} +\define@key{pmdraw@brick}{no label bottom 3}{% Sets 3rd label to skip in bottom row + \renewcommand{\pmdraw@drawNoLabelBc}{#1}% +} +\define@key{pmdraw@brick}{no label bottom 4}{% Sets 4th label to skip in bottom row + \renewcommand{\pmdraw@drawNoLabelBd}{#1}% +} +\define@key{pmdraw@brick}{no label bottom 5}{% Sets 5th label to skip in bottom row + \renewcommand{\pmdraw@drawNoLabelBe}{#1}% +} +\define@key{pmdraw@brick}{no label bottom 6}{% Sets 6th label to skip in bottom row + \renewcommand{\pmdraw@drawNoLabelBf}{#1}% +} +\define@key{pmdraw@brick}{no label bottom 7}{% Sets 7th label to skip in bottom row + \renewcommand{\pmdraw@drawNoLabelBg}{#1}% +} +\define@key{pmdraw@brick}{no label bottom 8}{% Sets 8th label to skip in bottom row + \renewcommand{\pmdraw@drawNoLabelBh}{#1}% +} +\define@key{pmdraw@brick}{no label bottom 9}{% Sets 9th label to skip in bottom row + \renewcommand{\pmdraw@drawNoLabelBi}{#1}% +} +\define@key{pmdraw@brick}{no label top 1}{% Sets 1st label to skip in top row + \renewcommand{\pmdraw@drawNoLabelTa}{#1}% +} +\define@key{pmdraw@brick}{no label top 2}{% Sets 2nd label to skip in top row + \renewcommand{\pmdraw@drawNoLabelTb}{#1}% +} +\define@key{pmdraw@brick}{no label top 3}{% Sets 3rd label to skip in top row + \renewcommand{\pmdraw@drawNoLabelTc}{#1}% +} +\define@key{pmdraw@brick}{no label top 4}{% Sets 4th label to skip in top row + \renewcommand{\pmdraw@drawNoLabelTd}{#1}% +} +\define@key{pmdraw@brick}{no label top 5}{% Sets 5th label to skip in top row + \renewcommand{\pmdraw@drawNoLabelTe}{#1}% +} +\define@key{pmdraw@brick}{no label top 6}{% Sets 6th label to skip in top row + \renewcommand{\pmdraw@drawNoLabelTf}{#1}% +} +\define@key{pmdraw@brick}{no label top 7}{% Sets 7th label to skip in top row + \renewcommand{\pmdraw@drawNoLabelTg}{#1}% +} +\define@key{pmdraw@brick}{no label top 8}{% Sets 8th label to skip in top row + \renewcommand{\pmdraw@drawNoLabelTh}{#1}% +} +\define@key{pmdraw@brick}{no label top 9}{% Sets 9th label to skip in top row + \renewcommand{\pmdraw@drawNoLabelTi}{#1}% +} + +\define@key{pmdraw@brick}{labels bottom draw}{% Sets the draw options for labels of bottom vertices + \renewcommand{\pmdraw@drawLabelBDrawOptions}{#1}% +} +\define@key{pmdraw@brick}{labels bottom node}{% Sets the node options for labels of bottom vertices + \renewcommand{\pmdraw@drawLabelBNodeOptions}{#1}% +} +\define@key{pmdraw@brick}{labels top draw}{% Sets the draw options for labels of top vertices + \renewcommand{\pmdraw@drawLabelTDrawOptions}{#1}% +} +\define@key{pmdraw@brick}{labels top node}{% Sets the node options for labels of top vertices + \renewcommand{\pmdraw@drawLabelTNodeOptions}{#1}% +} + +\define@key{pmdraw@brick}{labels bottom options}{% Sets the draw command of labels of bottom vertices + \renewcommand{\pmdraw@drawLabelBottom}[3]{#1}% +} +\define@key{pmdraw@brick}{labels top options}{% Sets the draw command of labels of top vertices + \renewcommand{\pmdraw@drawLabelTop}[3]{#1}% +} + +\define@key{pmdraw@brick}{no dots}[]{% Does not draw dots in bricks + \setcounter{pmdraw@ifDiagWDotsFirst}{1}% +} + +\define@key{pmdraw@brick}{dots draw}{% Sets the draw options for drawing of dots + \renewcommand{\pmdraw@drawDotsDrawOptions}{#1}% +} +\define@key{pmdraw@brick}{dots node}{% Sets the node options for drawing of dots + \renewcommand{\pmdraw@drawDotsNodeOptions}{#1}% +} + +\define@key{pmdraw@brick}{vertices bottom phantom}[]{% Does not draw bottom vertices + \setcounter{pmdraw@ifVerticesBottom}{1}% +} +\define@key{pmdraw@brick}{vertices top phantom}[]{% Does not draw top vertices + \setcounter{pmdraw@ifVerticesTop}{1}% +} + +\define@key{pmdraw@brick}{vertices bottom uncover}{% Sets the uncover options of bottom vertices + \renewcommand{\pmdraw@verticesBottomUncover}{#1}% +} +\define@key{pmdraw@brick}{vertices top uncover}{% Sets the uncover options of top vertices + \renewcommand{\pmdraw@verticesTopUncover}{#1}% +} + +\define@key{pmdraw@brick}{levels}[1]{% Sets number of horizontal levels for non-transversal edges and evenly spaces them + \tikzmath{% + \pmdraw{edgeSepU} = (0.5*\pmdraw@rowSep)/(#1 + 1);% Calculates vertical separation between each edge + \pmdraw{edgeSepL} = \pmdraw{edgeSepU};% Calculates vertical separation between each edge + }% +} +\define@key{pmdraw@brick}{levels bottom}{% Sets number of horizontal levels for lower non-transversal edges and evenly spaces them + \tikzmath{% + \pmdraw{edgeSepL} = (0.5*\pmdraw@rowSep)/(#1 + 1);% Calculates vertical separation between each edge + }% +} +\define@key{pmdraw@brick}{levels top}{% Sets number of horizontal levels for upper non-transversal edges and evenly spaces them + \tikzmath{% + \pmdraw{edgeSepU} = (0.5*\pmdraw@rowSep)/(#1 + 1);% Calculates vertical separation between each edge + }% +} + +\define@key{pmdraw@brick}{levels sep}{% Sets vertical separation of horizontal levels for non-transversal edges + \tikzmath{% + \pmdraw{edgeSepU} = #1;% + \pmdraw{edgeSepL} = \pmdraw{edgeSepU};% + }% +} +\define@key{pmdraw@brick}{levels sep bottom}{% Sets vertical separation of lower horizontal levels for non-transversal edges + \tikzmath{% + \pmdraw{edgeSepL} = #1;% + }% +} +\define@key{pmdraw@brick}{levels sep top}{% Sets vertical separation of upper horizontal levels for non-transversal edges + \tikzmath{% + \pmdraw{edgeSepU} = #1;% + }% +} + +\define@key{pmdraw@brick}{edges}{% Sets the draw options of all edges + \renewcommand{\pmdraw@drawUedgesDrawOptions}{#1}% + \renewcommand{\pmdraw@drawLedgesDrawOptions}{#1}% + \renewcommand{\pmdraw@drawTedgesDrawOptions}{#1}% +} +\define@key{pmdraw@brick}{edges non-transversal}{% Sets the draw options of non-transversal edges + \renewcommand{\pmdraw@drawUedgesDrawOptions}{#1}% + \renewcommand{\pmdraw@drawLedgesDrawOptions}{#1}% +} +\define@key{pmdraw@brick}{edges upper}{% Sets the draw options of upper non-transversal edges + \renewcommand{\pmdraw@drawUedgesDrawOptions}{#1}% +} +\define@key{pmdraw@brick}{edges lower}{% Sets the draw options of lower non-transversal edges + \renewcommand{\pmdraw@drawLedgesDrawOptions}{#1}% +} +\define@key{pmdraw@brick}{edges transversal}{% Sets the draw options of transversal edges + \renewcommand{\pmdraw@drawTedgesDrawOptions}{#1}% +} + +\define@key{pmdraw@brick}{edges first}[]{% Draws edges before vertices + \renewcommand{\pmdraw@ifEdgesFirst}{1}% +} +\define@key{pmdraw@brick}{transversals first}[]{% Draws transversal edges before non-transversal edges + \renewcommand{\pmdraw@ifTedgesFirst}{1}% +} + +\define@key{pmdraw@brick}{edges phantom}[]{% Does not draw edges + \setcounter{pmdraw@ifEdges}{1}% +} + +\define@key{pmdraw@brick}{edges uncover}{% Sets the uncover options of edges + \renewcommand{\pmdraw@edgesUncover}{#1}% +} + +\define@key{pmdraw@brick}{brace}{% Draws a brace + \setkeys{pmdraw@brace}{#1}% Processes details of brace + \pmdraw@drawBrace{\value{pmdraw@braceL}}{\value{pmdraw@braceR}}{\pmdraw@braceLabel}% Draws brace + \let\pmdraw@drawBrace\pmdraw@drawBraceDefault% Resets brace options if changed +} + +\define@key{pmdraw@brick}{brace draw}{% Sets the draw options for drawing of brace + \renewcommand{\pmdraw@drawBraceDrawOptions}{#1}% +} +\define@key{pmdraw@brick}{brace node}{% Sets the node options for drawing of brace + \renewcommand{\pmdraw@drawBraceNodeOptions}{#1}% +} + +\define@key{pmdraw@brick}{decorate before}{% Hook for decorations before brick is drawn + \renewcommand{\pmdraw@hookBeforeBrick}{#1}% +} +\define@key{pmdraw@brick}{decorate after}{% Hook for decorations after brick is drawn + \renewcommand{\pmdraw@hookAfterBrick}{#1}% +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% % +% Keys for edges % +% - ordered as per manual % +% % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\define@key{pmdraw@NTedges}{level}{% Sets level of non-transversal edge + \setcounter{pmdraw@NTlevel}{#1}% +} +\define@key{pmdraw@NTedges}{height}{% Sets manual height of non-transversal edge + \renewcommand{\pmdraw@NTedgesHeight}{#1}% +} +\define@key{pmdraw@NTedges}{edge draw}{% Sets the draw options for drawing of edge + \renewcommand{\pmdraw@drawEdgeDrawOptions}{#1}% +} +\define@key{pmdraw@NTedges}{options}{% Sets the draw command of non-transversal edge + \renewcommand{\pmdraw@drawUedgesDraw}[2]{#1}% + \renewcommand{\pmdraw@drawLedgesDraw}[2]{#1}% +} +\define@key{pmdraw@NTedges}{phantom}[]{% Does not draw edge + \setcounter{pmdraw@ifEdge}{1}% +} +\define@key{pmdraw@NTedges}{uncover}{% Sets the uncover options of edge + \renewcommand{\pmdraw@edgeUncover}{#1}% +} +\define@key{pmdraw@Tedges}{height}{% Sets manual height of transversal edge + \tikzmath{% + \pmdraw{Tlevel} = #1;% + }% + \renewcommand{\pmdraw@ifTedgeHorizontal}{1}% Flags manual height +} +\define@key{pmdraw@Tedges}{edge draw}{% Sets the draw options for drawing of edge + \renewcommand{\pmdraw@drawEdgeDrawOptions}{#1}% +} +\define@key{pmdraw@Tedges}{options}{% Sets the draw command of transversal edge + \renewcommand{\pmdraw@drawTedgesDraw}[2]{#1}% +} +\define@key{pmdraw@Tedges}{phantom}[]{% Does not draw edge + \setcounter{pmdraw@ifEdge}{1}% +} +\define@key{pmdraw@Tedges}{uncover}{% Sets the uncover options of edge + \renewcommand{\pmdraw@edgeUncover}{#1}% +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% % +% Keys for brace % +% - ordered as per manual % +% % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\define@key{pmdraw@brace}{left}{% Sets starting position of brace + \setcounter{pmdraw@braceL}{#1}% +} +\define@key{pmdraw@brace}{right}{% Sets terminating position of brace + \setcounter{pmdraw@braceR}{#1}% +} +\define@key{pmdraw@brace}{label}{% Sets label of brace + \renewcommand{\pmdraw@braceLabel}{#1}% +} +\define@key{pmdraw@brace}{above}[]{% Set flag to draw brace above diagram + \renewcommand{\pmdraw@ifProdDiag}{1}% +} +\define@key{pmdraw@brace}{options}{% Sets the draw command of brace + \renewcommand{\pmdraw@drawBrace}[3]{#1}% +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% % +% Keys for diagrams and product diagrams % +% - ordered as per manual % +% % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\define@key{pmdraw@diagram}{row sep}{% Sets vertical separation between rows of vertices in diagram + \renewcommand{\pmdraw@rowSep}{#1}% +} +\define@key{pmdraw@diagram}{tikz}{% Sets the tikz options + \renewcommand{\pmdraw@tikz}{#1}% +} +\define@key{pmdraw@diagram}{dots options}{% Sets the draw command of dots between bricks + \renewcommand{\pmdraw@drawDots}[2]{#1}% +} +\define@key{pmdraw@diagram}{grid}[]{% Flag for drawing coordinate grid + \renewcommand{\pmdraw@ifGrid}{1}% +} +\define@key{pmdraw@diagram}{decorate before}{% Hook before drawing diagrams + \renewcommand{\pmdraw@hookBeforeDiagram}{#1}% +} +\define@key{pmdraw@diagram}{decorate after}{% Hook after drawing diagrams + \renewcommand{\pmdraw@hookAfterDiagram}{#1}% +} + +\define@key{pmdraw@diagram}{diagram sep}{% Sets vertical separation between bottom row of top diagram and top row of bottom diagram in product diagram + \renewcommand{\pmdraw@diagSep}{#1}% +} +\define@key{pmdraw@diagram}{vertex sep}{% Sets vertical separation between bottom row of top diagram and top row of bottom diagram in product diagram not for added edges + \renewcommand{\pmdraw@vertexSep}{#1}% +} +\define@key{pmdraw@diagram}{edges added}{% Sets the draw options for drawing of added edges in product diagram + \renewcommand{\pmdraw@drawAedgesOptions}{#1}% +} +\define@key{pmdraw@diagram}{edges added phantom}[]{% Does not draw added edges + \setcounter{pmdraw@ifEdgesAdded}{1}% +} +\define@key{pmdraw@diagram}{edges added uncover}{% Sets the uncover options of added edges + \renewcommand{\pmdraw@edgesAddedUncover}{#1}% +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% % +% User commands % +% - loosely ordered alphabetically % +% % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\newcommand{\pmdBrick}[4][]{% Draws brick + % #1 Options + % #2 Upper non-transversal edges, as list [<options>]{<left vertex>}{<right vertex>}, eg [level=1]{2}{3} + % #3 Lower non-transversal edges, as list [<options>]{<left vertex>}{<right vertex>}, eg [level=1]{2}{3} + % #4 Transversals, as list [<options>]{<upper vertex>}{<lower vertex>}, eg [level=1]{2}{3} + \pmdDiagram{{[#1]{#2}{#3}{#4}}}% Uses complete diagram method to draw brick +} + +\newcommand{\pmdDiagram}[2][]{% Draws diagram + % #1 Options + % #2 List of bricks + \setkeys{pmdraw@diagram}{#1}% Processes options + \renewcommand{\pmdraw@ifDiagWDots}{1}% Flags that diagram has dots + \setcounter{pmdraw@brickShift}{0}% Reset shifting of individual bricks + \ifmmode% If drawing diagram in a maths equation + \,% Add space + \ifnum\pmdraw@ifGrid=1% If displaying helper grid + \begin{tikzpicture}[scale=.5,baseline=0.405cm,show grid=true,apply style/.expand once=\pmdraw@tikz]% + \else% If not displaying helper grid + \begin{tikzpicture}[scale=.5,baseline=0.405cm,apply style/.expand once=\pmdraw@tikz]% + \fi% + \pmdraw@hookBeforeDiagram% Hook before drawing diagrams + \pmdraw@bricksLoop% Commences loop for each brick to be drawn + #2% + \pmdEmpty% Terminates loop + \pmdraw@hookAfterDiagram% Hook after drawing diagrams + \end{tikzpicture}% + \,% Add space + \else% If drawing diagram in normal text + \raisebox{0.5cm}{% Raise diagram so bottom row is on text baseline + \ifnum\pmdraw@ifGrid=1% If displaying helper grid + \begin{tikzpicture}[scale=.5,baseline=0.405cm,show grid=true,apply style/.expand once=\pmdraw@tikz]% + \else% If not displaying helper grid + \begin{tikzpicture}[scale=.5,baseline=0.405cm,apply style/.expand once=\pmdraw@tikz]% + \fi% + \pmdraw@hookBeforeDiagram% Hook before drawing diagrams + \pmdraw@bricksLoop% Commences loop for each brick to be drawn + #2% + \pmdEmpty% Terminates loop + \pmdraw@hookAfterDiagram% Hook after drawing diagrams + \end{tikzpicture}% + }% + \fi% + \pmdraw@reset% Resets user keys and other flags to default values +} + +\newcommand{\pmdEmpty}{}% Indicates no edges, internally halts input loops, always is = {} + +\newcommand{\pmdProduct}[4][]{% Draws product diagram + % #1 Options + % #2 List of added edges + % #3 Top diagram as list of bricks + % #4 Bottom diagram as list of bricks + \setkeys{pmdraw@diagram}{#1}% Processes options + \ifmmode% If drawing diagram in a maths equation + \,% Add space + \ifnum\pmdraw@ifGrid=1% If displaying helper grid + \begin{tikzpicture}[scale=.5,baseline=-.3475cm,show grid=true,apply style/.expand once=\pmdraw@tikz]% + \else% If not displaying helper grid + \begin{tikzpicture}[scale=.5,baseline=-.3475cm,apply style/.expand once=\pmdraw@tikz]% + \fi% + \pmdraw@hookBeforeDiagram% Hook before drawing diagrams + \pmdraw@AedgesLoop% Commences loop for added edges to be drawn + #2% + \pmdEmpty% Terminates loop + \renewcommand{\pmdraw@ifDiagWDots}{1}% Flags that diagram has dot + \renewcommand{\pmdraw@ifProdDiag}{1}% Flags that diagram is product + \setcounter{pmdraw@brickShift}{0}% Reset shifting of individual bricks + \pmdraw@bricksLoop% Commences loop for each brick to be drawn + #3% + \pmdEmpty% Terminates loop + \renewcommand{\pmdraw@ifProdDiag}{0}% Resets flag that diagram is product + \setcounter{pmdraw@ifDiagWDotsFirst}{1}% Reset if drawing first brick of diagram + \setcounter{pmdraw@brickShift}{0}% Reset shifting of individual bricks + \begin{scope}[shift={(0,-\pmdraw@diagSep-\pmdraw@rowSep-\pmdraw@vertexSep)}]% Shift coordinates to be underneath top diagram + \pmdraw@bricksLoop% Commences loop for each brick to be drawn + #4% + \pmdEmpty% Terminates loop + \renewcommand{\pmdraw@ifDiagWDots}{0}% Reset if drawing a diagram with dots + \setcounter{pmdraw@ifDiagWDotsFirst}{1}% Reset if drawing first brick of diagram + \end{scope}% + \pmdraw@hookAfterDiagram% Hook after drawing diagrams + \end{tikzpicture}% + \,% Add space + \else% If drawing diagram in normal text + \raisebox{2cm}{% Raise diagram so bottom row is on text baseline + \ifnum\pmdraw@ifGrid=1% If displaying helper grid + \begin{tikzpicture}[scale=.5,baseline=0.405cm,show grid=true,apply style/.expand once=\pmdraw@tikz]% + \else% If not displaying helper grid + \begin{tikzpicture}[scale=.5,baseline=0.405cm,apply style/.expand once=\pmdraw@tikz]% + \fi% + \pmdraw@hookBeforeDiagram% Hook before drawing diagrams + \pmdraw@AedgesLoop% Commences loop for added edges to be drawn + #2% + \pmdEmpty% Terminates loop + \renewcommand{\pmdraw@ifDiagWDots}{1}% Flags that diagram has dot + \renewcommand{\pmdraw@ifProdDiag}{1}% Flags that diagram is product + \setcounter{pmdraw@brickShift}{0}% Reset shifting of individual bricks + \pmdraw@bricksLoop% Commences loop for each brick to be drawn + #3% + \pmdEmpty% Terminates loop + \renewcommand{\pmdraw@ifProdDiag}{0}% Resets flag that diagram is products + \setcounter{pmdraw@ifDiagWDotsFirst}{1}% Reset if drawing first brick of diagram + \setcounter{pmdraw@brickShift}{0}% Reset shifting of individual bricks + \begin{scope}[shift={(0,-\pmdraw@diagSep-\pmdraw@rowSep-\pmdraw@vertexSep)}]% Shift coordinates to be underneath top diagram + \pmdraw@bricksLoop% Commences loop for each brick to be drawn + #4% + \pmdEmpty% Terminates loop + \renewcommand{\pmdraw@ifDiagWDots}{0}% Reset if drawing a diagram with dots + \setcounter{pmdraw@ifDiagWDotsFirst}{1}% Reset if drawing first brick of diagram + \end{scope}% + \pmdraw@hookAfterDiagram% Hook after drawing diagrams diagram + \end{tikzpicture}% + }% + \fi% + \pmdraw@reset% Resets user keys and other flags to default values +} + +\newcommand{\pmdProductTriple}[6][]{% Draws triple product diagram + % #1 Options + % #2 List of top added edges + % #3 List of bottom added edges + % #4 Top diagram as list of bricks + % #5 Middle diagram as list of bricks + % #6 Bottom diagram as list of bricks + \setkeys{pmdraw@diagram}{#1}% Processes options + \ifmmode% If drawing diagram in a maths equation + \,% Add space + \ifnum\pmdraw@ifGrid=1% If displaying helper grid + \begin{tikzpicture}[scale=.5,baseline=-1.0975cm,show grid=true,apply style/.expand once=\pmdraw@tikz]% + \else% If not displaying helper grid + \begin{tikzpicture}[scale=.5,baseline=-1.0975cm,apply style/.expand once=\pmdraw@tikz]% + \fi% + \pmdraw@hookBeforeDiagram% Hook before drawing diagrams + \pmdraw@AedgesLoop% Commences loop for top added edges to be drawn + #2% + \pmdEmpty% Terminates loop + \renewcommand{\pmdraw@ifDiagWDots}{1}% Flags that diagram has dot + \renewcommand{\pmdraw@ifProdDiag}{1}% Flags that diagram is product + \setcounter{pmdraw@brickShift}{0}% Reset shifting of individual bricks + \pmdraw@bricksLoop% Commences loop for each top brick to be drawn + #4% + \pmdEmpty% Terminates loop + \renewcommand{\pmdraw@ifProdDiag}{0}% Resets flag that diagram is product + \setcounter{pmdraw@ifDiagWDotsFirst}{1}% Reset if drawing first brick of diagram + \setcounter{pmdraw@brickShift}{0}% Reset shifting of individual bricks + \begin{scope}[shift={(0,-\pmdraw@diagSep-\pmdraw@rowSep-\pmdraw@vertexSep)}]% Shift coordinates to be underneath top diagram + \pmdraw@AedgesLoop% Commences loop for bottom added edges to be drawn + #3% + \pmdEmpty% Terminates loop + \pmdraw@bricksLoop% Commences loop for each middle brick to be drawn + #5% + \pmdEmpty% Terminates loop + \setcounter{pmdraw@ifDiagWDotsFirst}{1}% Reset if drawing first brick of diagram + \setcounter{pmdraw@brickShift}{0}% Reset shifting of individual bricks + \begin{scope}[shift={(0,-\pmdraw@diagSep-\pmdraw@rowSep-\pmdraw@vertexSep)}]% Shift coordinates to be underneath middle diagram + \pmdraw@bricksLoop% Commences loop for each bottom brick to be drawn + #6% + \pmdEmpty% Terminates loop + \setcounter{pmdraw@brickShift}{0}% Reset shifting of individual bricks + \end{scope}% + \end{scope}% + \renewcommand{\pmdraw@ifDiagWDots}{0}% Reset if drawing a diagram with dots + \pmdraw@hookAfterDiagram% Hook after drawing diagrams + \end{tikzpicture}% + \,% Add space + \else% If drawing diagram in normal text + \raisebox{2cm}{% Raise diagram so bottom row is on text baseline + \ifnum\pmdraw@ifGrid=1% If displaying helper grid + \begin{tikzpicture}[scale=.5,baseline=-1.095cm,show grid=true,apply style/.expand once=\pmdraw@tikz]% + \else% If not displaying helper grid + \begin{tikzpicture}[scale=.5,baseline=-1.095cm,apply style/.expand once=\pmdraw@tikz]% + \fi% + \pmdraw@hookBeforeDiagram% Hook before drawing diagrams + \pmdraw@AedgesLoop% Commences loop for added edges to be drawn + #2% + \pmdEmpty% Terminates loop + \renewcommand{\pmdraw@ifDiagWDots}{1}% Flags that diagram has dot + \renewcommand{\pmdraw@ifProdDiag}{1}% Flags that diagram is product + \setcounter{pmdraw@brickShift}{0}% Reset shifting of individual bricks + \pmdraw@bricksLoop% Commences loop for each brick to be drawn + #4% + \pmdEmpty% Terminates loop + \renewcommand{\pmdraw@ifProdDiag}{0}% Resets flag that diagram is product + \setcounter{pmdraw@ifDiagWDotsFirst}{1}% Reset if drawing first brick of diagram + \setcounter{pmdraw@brickShift}{0}% Reset shifting of individual bricks + \begin{scope}[shift={(0,-\pmdraw@diagSep-\pmdraw@rowSep-\pmdraw@vertexSep)}]% Shift coordinates to be underneath top diagram + \pmdraw@AedgesLoop% Commences loop for bottom added edges to be drawn + #3% + \pmdEmpty% Terminates loop + \pmdraw@bricksLoop% Commences loop for each middle brick to be drawn + #5% + \pmdEmpty% Terminates loop + \setcounter{pmdraw@ifDiagWDotsFirst}{1}% Reset if drawing first brick of diagram + \setcounter{pmdraw@brickShift}{0}% Reset shifting of individual bricks + \begin{scope}[shift={(0,-\pmdraw@diagSep-\pmdraw@rowSep-\pmdraw@vertexSep)}]% Shift coordinates to be underneath middle diagram + \pmdraw@bricksLoop% Commences loop for each bottom brick to be drawn + #6% + \pmdEmpty% Terminates loop + \setcounter{pmdraw@brickShift}{0}% Reset shifting of individual bricks + \end{scope}% + \end{scope}% + \renewcommand{\pmdraw@ifDiagWDots}{0}% Reset if drawing a diagram with dots + \pmdraw@hookAfterDiagram% Hook after drawing diagrams + \end{tikzpicture}% + }% + \fi% + \pmdraw@reset% Resets user keys and other flags to default values +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% % +% For loop commands % +% - loosely ordered alphabetically % +% % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\newcommand{\pmdraw@AedgesLoop}{% Starts loop for added edges in product diagram + \@ifnextchar\pmdEmpty{}{% If not at end of list + \pmdraw@drawAedges% Draw each edge + }% +} +\newcommand{\pmdraw@bricksLoop}{% Starts loop to iterate over each brick in diagram + \@ifnextchar\pmdEmpty{}{% If not at end of list + \pmdraw@drawBrickInit% Draw each brick + }% +} +\newcommand{\pmdraw@LedgesLoop}{% Starts loop for lower non-transversal edges + \@ifnextchar\pmdEmpty{}{% If not at end of list + \pmdraw@drawLedges% Draw each edge + }% +} +\newcommand{\pmdraw@TedgesLoop}{% Starts loop for transversal edges + \@ifnextchar\pmdEmpty{}{% If not at end of list + \pmdraw@drawTedges% Draw each edge + }% +} +\newcommand{\pmdraw@UedgesLoop}{% Starts loop for upper non-transversal edges + \@ifnextchar\pmdEmpty{}{% If not at end of list + \pmdraw@drawUedges% Draw each edge + }% +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% % +% Draw commands % +% - loosely ordered alphabetically % +% % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\newcommand{\pmdraw@drawBottomVertices}{% Draws bottom row of vertices + \setcounter{pmdraw@bottomTotal}{\value{pmdraw@blankB}}% Store size of bottom row of vertices + \addtocounter{pmdraw@bottomTotal}{\value{pmdraw@degreeB}}% Store size of bottom row of vertices + \ifnum\value{pmdraw@ifDiagWDotsFirst}=1% If drawing first brick of diagram + \setcounter{pmdraw@ifDiagWDotsFirst}{0}% Mark that first brick has been drawn + \else% If not drawing first brick of diagram + \pmdraw@drawDots{0.5*\value{pmdraw@topShift}+0.5*\value{pmdraw@blankT}}{\pmdraw@rowSep}% Draw upper dots + \pmdraw@drawDots{0.5*\value{pmdraw@bottomShift}+0.5*\value{pmdraw@blankB}}{0}% Draw lower dots + \fi% + \ifnum\value{pmdraw@topTotal}>\value{pmdraw@bottomTotal}% If top row is longer than bottom row + \ifnum\pmdraw@ifDiagWDots=1% If drawing a diagram with dots + \addtocounter{pmdraw@brickShift}{\value{pmdraw@topTotal}}% Keep track of size of diagram + % Store shifts + \setcounter{pmdraw@topShift}{-\value{pmdraw@topTotal}}% + \addtocounter{pmdraw@topShift}{\value{pmdraw@topTotal}}% + \setcounter{pmdraw@bottomShift}{-\value{pmdraw@topTotal}}% + \addtocounter{pmdraw@bottomShift}{\value{pmdraw@bottomTotal}}% + \else% If drawing a diagram without dots + \setcounter{pmdraw@brickShift}{\value{pmdraw@topTotal}}% Keep track of size of diagram + \fi% + \else% If bottom row is longer than top row + \ifnum\pmdraw@ifDiagWDots=1% If drawing a diagram with dots + \addtocounter{pmdraw@brickShift}{\value{pmdraw@bottomTotal}}% Keep track of size of diagram + % Store shifts + \setcounter{pmdraw@topShift}{-\value{pmdraw@bottomTotal}}% + \addtocounter{pmdraw@topShift}{\value{pmdraw@topTotal}}% + \setcounter{pmdraw@bottomShift}{-\value{pmdraw@bottomTotal}}% + \addtocounter{pmdraw@bottomShift}{\value{pmdraw@bottomTotal}}% + \else% If drawing a diagram without dots + \setcounter{pmdraw@brickShift}{\value{pmdraw@bottomTotal}}% Keep track of size of diagram + \fi% + \fi% + \foreach \x in {1,...,\value{pmdraw@degreeB}} {% For each vertex in row + \ifnum\pmdraw@drawNoVertexBa=\x\else% If not skipping vertex + \ifnum\pmdraw@drawNoVertexBb=\x\else% If not skipping vertex + \ifnum\pmdraw@drawNoVertexBc=\x\else% If not skipping vertex + \ifnum\pmdraw@drawNoVertexBd=\x\else% If not skipping vertex + \ifnum\pmdraw@drawNoVertexBe=\x\else% If not skipping vertex + \ifnum\pmdraw@drawNoVertexBf=\x\else% If not skipping vertex + \ifnum\pmdraw@drawNoVertexBg=\x\else% If not skipping vertex + \ifnum\pmdraw@drawNoVertexBh=\x\else% If not skipping vertex + \ifnum\pmdraw@drawNoVertexBi=\x\else% If not skipping vertex + \pmdraw@drawVertex{\x + \value{pmdraw@blankB}}{0}% Draw lower vertex + \fi% + \fi% + \fi% + \fi% + \fi% + \fi% + \fi% + \fi% + \fi% + \ifnum\pmdraw@drawNoLabelBa=\x\else% If not skipping label + \ifnum\pmdraw@drawNoLabelBb=\x\else% If not skipping label + \ifnum\pmdraw@drawNoLabelBc=\x\else% If not skipping label + \ifnum\pmdraw@drawNoLabelBd=\x\else% If not skipping label + \ifnum\pmdraw@drawNoLabelBe=\x\else% If not skipping label + \ifnum\pmdraw@drawNoLabelBf=\x\else% If not skipping label + \ifnum\pmdraw@drawNoLabelBg=\x\else% If not skipping label + \ifnum\pmdraw@drawNoLabelBh=\x\else% If not skipping label + \ifnum\pmdraw@drawNoLabelBi=\x\else% If not skipping label + \ifnum\pmdraw@ifLabelsB=1% If drawing labels + \pmdraw@drawLabelBottom{\x + \value{pmdraw@blankT}}{0}{\thepmdraw@labelStartB}% Draw label + \fi% + \fi% + \fi% + \fi% + \fi% + \fi% + \fi% + \fi% + \fi% + \fi% + \stepcounter{pmdraw@labelStartB}% Update label counter + }% +} +\newcommand{\pmdraw@drawBrickInit}[1]{% Initialises the drawing of a brick + \ifnum\value{pmdraw@ifDiagWDotsFirst}=0% If not drawing first brick in diagram + \stepcounter{pmdraw@brickShift}% Makes space for dots to left of current brick + \fi% + \begin{scope}[shift={(\value{pmdraw@brickShift},0)}]% Shift brick to the right of already drawn bricks + \pmdraw@drawBrick#1% Draw brick + \end{scope}% + \pmdraw@bricksLoop% Restart for loop +} +\newcommand{\pmdraw@drawBrick}[4][]{% Draws a brick + % #1 Options + % #2 Upper non-transversal edges, as list [<options>]{<left vertex>}{<right vertex>}, eg [level=1]{2}{3} + % #3 Lower non-transversal edges, as list [<options>]{<left vertex>}{<right vertex>}, eg [level=1]{2}{3} + % #4 Transversals, as list [<options>]{<upper vertex>}{<lower vertex>}, eg [level=1]{2}{3} + \setkeys{pmdraw@brick}{levels,#1}% Processes options and set default levels + \pmdraw@hookBeforeBrick% Hook before drawing brick + \ifnum\pmdraw@ifEdgesFirst=0% If drawing vertices first + \@ifclassloaded{beamer}{% If in beamer + \uncover<\pmdraw@verticesTopUncover>{% Uncovers top vertices + \ifnum\value{pmdraw@ifVerticesTop}=0% If drawing top vertices + \pmdraw@drawTopVertices% Draw base diagram + \else% If hiding top vertices + \phantom{% + \pmdraw@drawTopVertices% Draw base diagram + }% + \fi% + }% + \uncover<\pmdraw@verticesBottomUncover>{% Uncovers bottom vertices + \ifnum\value{pmdraw@ifVerticesBottom}=0% If drawing bottom vertices + \pmdraw@drawBottomVertices% Draw base diagram + \else% If hiding top vertices + \phantom{% + \pmdraw@drawBottomVertices% Draw base diagram + }% + \fi% + }% + \uncover<\pmdraw@edgesUncover>{% Uncovers edges + \ifnum\value{pmdraw@ifEdges}=0% If drawing edges + \ifnum\pmdraw@ifTedgesFirst=0% If drawing non-transversals first + \pmdraw@UedgesLoop% Draws upper edges + #2% + \pmdEmpty% + \pmdraw@LedgesLoop% Draws lower edges + #3% + \pmdEmpty% + \pmdraw@TedgesLoop% Draws transversals + #4% + \pmdEmpty% + \else% If drawing transversal first + \pmdraw@TedgesLoop% Draws transversals + #4% + \pmdEmpty% + \pmdraw@UedgesLoop% Draws upper edges + #2% + \pmdEmpty% + \pmdraw@LedgesLoop% Draws lower edges + #3% + \pmdEmpty% + \fi% + \else% If hiding edges + \phantom{% + \ifnum\pmdraw@ifTedgesFirst=0% If drawing non-transversals first + \pmdraw@UedgesLoop% Draws upper edges + #2% + \pmdEmpty% + \pmdraw@LedgesLoop% Draws lower edges + #3% + \pmdEmpty% + \pmdraw@TedgesLoop% Draws transversals + #4% + \pmdEmpty% + \else% If drawing transversal first + \pmdraw@TedgesLoop% Draws transversals + #4% + \pmdEmpty% + \pmdraw@UedgesLoop% Draws upper edges + #2% + \pmdEmpty% + \pmdraw@LedgesLoop% Draws lower edges + #3% + \pmdEmpty% + \fi% + }% + \fi% + }% + }{% If not in beamer + \ifnum\value{pmdraw@ifVerticesTop}=0% If drawing top vertices + \pmdraw@drawTopVertices% Draw base diagram + \else% If hiding top vertices + \phantom{% + \pmdraw@drawTopVertices% Draw base diagram + }% + \fi% + \ifnum\value{pmdraw@ifVerticesBottom}=0% If drawing bottom vertices + \pmdraw@drawBottomVertices% Draw base diagram + \else% If hiding top vertices + \phantom{% + \pmdraw@drawBottomVertices% Draw base diagram + }% + \fi% + \ifnum\value{pmdraw@ifEdges}=0% If drawing edges + \ifnum\pmdraw@ifTedgesFirst=0% If drawing non-transversals first + \pmdraw@UedgesLoop% Draws upper edges + #2% + \pmdEmpty% + \pmdraw@LedgesLoop% Draws lower edges + #3% + \pmdEmpty% + \pmdraw@TedgesLoop% Draws transversals + #4% + \pmdEmpty% + \else% If drawing transversal first + \pmdraw@TedgesLoop% Draws transversals + #4% + \pmdEmpty% + \pmdraw@UedgesLoop% Draws upper edges + #2% + \pmdEmpty% + \pmdraw@LedgesLoop% Draws lower edges + #3% + \pmdEmpty% + \fi% + \else% If hiding edges + \phantom{% + \ifnum\pmdraw@ifTedgesFirst=0% If drawing non-transversals first + \pmdraw@UedgesLoop% Draws upper edges + #2% + \pmdEmpty% + \pmdraw@LedgesLoop% Draws lower edges + #3% + \pmdEmpty% + \pmdraw@TedgesLoop% Draws transversals + #4% + \pmdEmpty% + \else% If drawing transversal first + \pmdraw@TedgesLoop% Draws transversals + #4% + \pmdEmpty% + \pmdraw@UedgesLoop% Draws upper edges + #2% + \pmdEmpty% + \pmdraw@LedgesLoop% Draws lower edges + #3% + \pmdEmpty% + \fi% + }% + \fi% + }% + \else% If drawing edges first + \@ifclassloaded{beamer}{% If in beamer + \uncover<\pmdraw@edgesUncover>{% Uncovers edges + \ifnum\value{pmdraw@ifEdges}=0% If drawing edges + \ifnum\pmdraw@ifTedgesFirst=0% If drawing non-transversals first + \pmdraw@UedgesLoop% Draws upper edges + #2% + \pmdEmpty% + \pmdraw@LedgesLoop% Draws lower edges + #3% + \pmdEmpty% + \pmdraw@TedgesLoop% Draws transversals + #4% + \pmdEmpty% + \else% If drawing transversal first + \pmdraw@TedgesLoop% Draws transversals + #4% + \pmdEmpty% + \pmdraw@UedgesLoop% Draws upper edges + #2% + \pmdEmpty% + \pmdraw@LedgesLoop% Draws lower edges + #3% + \pmdEmpty% + \fi% + \else% If hiding edges + \phantom{% + \ifnum\pmdraw@ifTedgesFirst=0% If drawing non-transversals first + \pmdraw@UedgesLoop% Draws upper edges + #2% + \pmdEmpty% + \pmdraw@LedgesLoop% Draws lower edges + #3% + \pmdEmpty% + \pmdraw@TedgesLoop% Draws transversals + #4% + \pmdEmpty% + \else% If drawing transversal first + \pmdraw@TedgesLoop% Draws transversals + #4% + \pmdEmpty% + \pmdraw@UedgesLoop% Draws upper edges + #2% + \pmdEmpty% + \pmdraw@LedgesLoop% Draws lower edges + #3% + \pmdEmpty% + \fi% + }% + \fi% + }% + \uncover<\pmdraw@verticesTopUncover>{% Uncovers top vertices + \ifnum\value{pmdraw@ifVerticesTop}=0% If drawing top vertices + \pmdraw@drawTopVertices% Draw base diagram + \else% If hiding top vertices + \phantom{% + \pmdraw@drawTopVertices% Draw base diagram + }% + \fi% + }% + \uncover<\pmdraw@verticesBottomUncover>{% Uncovers bottm vertices + \ifnum\value{pmdraw@ifVerticesBottom}=0% If drawing bottom vertices + \pmdraw@drawBottomVertices% Draw base diagram + \else% If hiding top vertices + \phantom{% + \pmdraw@drawBottomVertices% Draw base diagram + }% + \fi% + }% + }{% If not in beamer + \ifnum\value{pmdraw@ifEdges}=0% If drawing edges + \ifnum\pmdraw@ifTedgesFirst=0% If drawing non-transversals first + \pmdraw@UedgesLoop% Draws upper edges + #2% + \pmdEmpty% + \pmdraw@LedgesLoop% Draws lower edges + #3% + \pmdEmpty% + \pmdraw@TedgesLoop% Draws transversals + #4% + \pmdEmpty% + \else% If drawing transversal first + \pmdraw@TedgesLoop% Draws transversals + #4% + \pmdEmpty% + \pmdraw@UedgesLoop% Draws upper edges + #2% + \pmdEmpty% + \pmdraw@LedgesLoop% Draws lower edges + #3% + \pmdEmpty% + \fi% + \else% If hiding edges + \phantom{% + \ifnum\pmdraw@ifTedgesFirst=0% If drawing non-transversals first + \pmdraw@UedgesLoop% Draws upper edges + #2% + \pmdEmpty% + \pmdraw@LedgesLoop% Draws lower edges + #3% + \pmdEmpty% + \pmdraw@TedgesLoop% Draws transversals + #4% + \pmdEmpty% + \else% If drawing transversal first + \pmdraw@TedgesLoop% Draws transversals + #4% + \pmdEmpty% + \pmdraw@UedgesLoop% Draws upper edges + #2% + \pmdEmpty% + \pmdraw@LedgesLoop% Draws lower edges + #3% + \pmdEmpty% + \fi% + }% + \fi% + \ifnum\value{pmdraw@ifVerticesTop}=0% If drawing top vertices + \pmdraw@drawTopVertices% Draw base diagram + \else% If hiding top vertices + \phantom{% + \pmdraw@drawTopVertices% Draw base diagram + }% + \fi% + \ifnum\value{pmdraw@ifVerticesBottom}=0% If drawing bottom vertices + \pmdraw@drawBottomVertices% Draw base diagram + \else% If hiding top vertices + \phantom{% + \pmdraw@drawBottomVertices% Draw base diagram + }% + \fi% + }% + \fi% + \pmdraw@hookAfterBrick% Hook after drawing brick + % Resets user keys and other flags to default values + \renewcommand{\pmdraw@drawBraceDrawOptions}{}% + \renewcommand{\pmdraw@drawBraceNodeOptions}{}% + \renewcommand{\pmdraw@drawDotsDrawOptions}{}% + \renewcommand{\pmdraw@drawDotsNodeOptions}{}% + \renewcommand{\pmdraw@drawLabelBDrawOptions}{}% + \renewcommand{\pmdraw@drawLabelBNodeOptions}{}% + \renewcommand{\pmdraw@drawLabelTDrawOptions}{}% + \renewcommand{\pmdraw@drawLabelTNodeOptions}{}% + \renewcommand{\pmdraw@drawLedgesDrawOptions}{}% + \renewcommand{\pmdraw@drawNoLabelBa}{-1}% + \renewcommand{\pmdraw@drawNoLabelBb}{-1}% + \renewcommand{\pmdraw@drawNoLabelBc}{-1}% + \renewcommand{\pmdraw@drawNoLabelBd}{-1}% + \renewcommand{\pmdraw@drawNoLabelBe}{-1}% + \renewcommand{\pmdraw@drawNoLabelBf}{-1}% + \renewcommand{\pmdraw@drawNoLabelBg}{-1}% + \renewcommand{\pmdraw@drawNoLabelBh}{-1}% + \renewcommand{\pmdraw@drawNoLabelBi}{-1}% + \renewcommand{\pmdraw@drawNoLabelTa}{-1}% + \renewcommand{\pmdraw@drawNoLabelTb}{-1}% + \renewcommand{\pmdraw@drawNoLabelTc}{-1}% + \renewcommand{\pmdraw@drawNoLabelTd}{-1}% + \renewcommand{\pmdraw@drawNoLabelTe}{-1}% + \renewcommand{\pmdraw@drawNoLabelTf}{-1}% + \renewcommand{\pmdraw@drawNoLabelTg}{-1}% + \renewcommand{\pmdraw@drawNoLabelTh}{-1}% + \renewcommand{\pmdraw@drawNoLabelTi}{-1}% + \renewcommand{\pmdraw@drawNoVertexBa}{-1}% + \renewcommand{\pmdraw@drawNoVertexBb}{-1}% + \renewcommand{\pmdraw@drawNoVertexBc}{-1}% + \renewcommand{\pmdraw@drawNoVertexBd}{-1}% + \renewcommand{\pmdraw@drawNoVertexBe}{-1}% + \renewcommand{\pmdraw@drawNoVertexBf}{-1}% + \renewcommand{\pmdraw@drawNoVertexBg}{-1}% + \renewcommand{\pmdraw@drawNoVertexBh}{-1}% + \renewcommand{\pmdraw@drawNoVertexBi}{-1}% + \renewcommand{\pmdraw@drawNoVertexTa}{-1}% + \renewcommand{\pmdraw@drawNoVertexTb}{-1}% + \renewcommand{\pmdraw@drawNoVertexTc}{-1}% + \renewcommand{\pmdraw@drawNoVertexTd}{-1}% + \renewcommand{\pmdraw@drawNoVertexTe}{-1}% + \renewcommand{\pmdraw@drawNoVertexTf}{-1}% + \renewcommand{\pmdraw@drawNoVertexTg}{-1}% + \renewcommand{\pmdraw@drawNoVertexTh}{-1}% + \renewcommand{\pmdraw@drawNoVertexTi}{-1}% + \renewcommand{\pmdraw@drawTedgesDrawOptions}{}% + \renewcommand{\pmdraw@drawUedgesDrawOptions}{}% + \renewcommand{\pmdraw@drawVertexOptions}{}% + \renewcommand{\pmdraw@hookBeforeBrick}{}% + \renewcommand{\pmdraw@hookAfterBrick}{}% + \renewcommand{\pmdraw@ifEdgesFirst}{0}% + \renewcommand{\pmdraw@ifLabelsB}{0}% + \renewcommand{\pmdraw@ifLabelsT}{0}% + \renewcommand{\pmdraw@ifTedgesFirst}{0}% + \renewcommand{\pmdraw@edgesUncover}{1-}% + \renewcommand{\pmdraw@verticesBottomUncover}{1-}% + \renewcommand{\pmdraw@verticesTopUncover}{1-}% + \let\pmdraw@drawLabelBottom\pmdraw@drawLabelBottomDefault% + \let\pmdraw@drawLabelTop\pmdraw@drawLabelTopDefault% + \let\pmdraw@drawLabelBottom\pmdraw@drawLabelBottomDefault% + \setcounter{pmdraw@blankB}{0}% + \setcounter{pmdraw@blankT}{0}% + \setcounter{pmdraw@labelStartB}{1}% + \setcounter{pmdraw@labelStartT}{1}% + \setcounter{pmdraw@ifEdges}{0}% + \setcounter{pmdraw@ifVerticesBottom}{0}% + \setcounter{pmdraw@ifVerticesTop}{0}% +} +\newcommand{\pmdraw@drawLedges}[3][]{% Draws lower non-transversal edge, #1 options, #2 L vertex, #3 R vertex + \setcounter{pmdraw@NTlevel}{1}% Store default level of edge + \setkeys{pmdraw@NTedges}{#1}% Processes options + \ifdim\pmdraw@NTedgesHeight pt=-1000pt% If using default heights + \tikzmath{% + \pmdraw{edgeHeight}=\value{pmdraw@NTlevel}*\pmdraw{edgeSepL};% Calculates height based on level of edge + }% + \else% If using manual heights + \tikzmath{% + \pmdraw{edgeHeight}=\pmdraw@NTedgesHeight;% Set manual height + }% + \fi% + \@ifclassloaded{beamer}{% If in beamer + \uncover<\pmdraw@edgeUncover>{% Uncovers edge + \ifnum\value{pmdraw@ifEdge}=0% If drawing edge + \pmdraw@drawLedgesDraw{#2}{#3}% Draw edge + \else% If hiding edge + \phantom{% + \pmdraw@drawLedgesDraw{#2}{#3}% Draw edge + }% + \fi% + }% + }{% If not in beamer + \ifnum\value{pmdraw@ifEdge}=0% If drawing edge + \pmdraw@drawLedgesDraw{#2}{#3}% Draw edge + \else% If hiding edge + \phantom{% + \pmdraw@drawLedgesDraw{#2}{#3}% Draw edge + }% + \fi% + }% + % Resets user keys and other flags to default values + \renewcommand{\pmdraw@NTedgesHeight}{-1000}% + \renewcommand{\pmdraw@edgeUncover}{1-}% + \setcounter{pmdraw@ifEdge}{0}% + \let\pmdraw@drawLedgesDraw\pmdraw@drawLedgesDrawDefault% + \pmdraw@LedgesLoop% Restart for loop +} +\newcommand{\pmdraw@drawTedges}[3][]{% Draws transversal edge, #1 options, #2 upper vertex, #3 lower vertex + \setkeys{pmdraw@Tedges}{#1}% Processes options + \@ifclassloaded{beamer}{% If in beamer + \uncover<\pmdraw@edgeUncover>{% Uncovers edge + \ifnum\value{pmdraw@ifEdge}=0% If drawing edge + \pmdraw@drawTedgesDraw{#2}{#3}% Draw edge + \else% If hiding edge + \phantom{% + \pmdraw@drawTedgesDraw{#2}{#3}% Draw edge + }% + \fi% + }% + }{% If not in beamer + \ifnum\value{pmdraw@ifEdge}=0% If drawing edge + \pmdraw@drawTedgesDraw{#2}{#3}% Draw edge + \else% If hiding edge + \phantom{% + \pmdraw@drawTedgesDraw{#2}{#3}% Draw edge + }% + \fi% + }% + % Resets user keys and other flags to default values + \renewcommand{\pmdraw@edgeUncover}{1-}% + \setcounter{pmdraw@ifEdge}{0}% + \let\pmdraw@drawTedgesDraw\pmdraw@drawTedgesDrawDefault% + \pmdraw@TedgesLoop% Restart for loop +} +\newcommand{\pmdraw@drawTopVertices}{% Draws top row of vertices + \setcounter{pmdraw@topTotal}{\value{pmdraw@blankT}}% Store size of top row of vertices + \addtocounter{pmdraw@topTotal}{\value{pmdraw@degreeT}}% Store size of top row of vertices + \foreach \x in {1,...,\value{pmdraw@degreeT}} {% For each vertex in row + \ifnum\pmdraw@drawNoVertexTa=\x\else% If not skipping vertex + \ifnum\pmdraw@drawNoVertexTb=\x\else% If not skipping vertex + \ifnum\pmdraw@drawNoVertexTc=\x\else% If not skipping vertex + \ifnum\pmdraw@drawNoVertexTd=\x\else% If not skipping vertex + \ifnum\pmdraw@drawNoVertexTe=\x\else% If not skipping vertex + \ifnum\pmdraw@drawNoVertexTf=\x\else% If not skipping vertex + \ifnum\pmdraw@drawNoVertexTg=\x\else% If not skipping vertex + \ifnum\pmdraw@drawNoVertexTh=\x\else% If not skipping vertex + \ifnum\pmdraw@drawNoVertexTi=\x\else% If not skipping vertex + \pmdraw@drawVertex{\x + \value{pmdraw@blankT}}{\pmdraw@rowSep}% Draw upper vertex + \fi% + \fi% + \fi% + \fi% + \fi% + \fi% + \fi% + \fi% + \fi% + \ifnum\pmdraw@drawNoLabelTa=\x\else% If not skipping label + \ifnum\pmdraw@drawNoLabelTb=\x\else% If not skipping label + \ifnum\pmdraw@drawNoLabelTc=\x\else% If not skipping label + \ifnum\pmdraw@drawNoLabelTd=\x\else% If not skipping label + \ifnum\pmdraw@drawNoLabelTe=\x\else% If not skipping label + \ifnum\pmdraw@drawNoLabelTf=\x\else% If not skipping label + \ifnum\pmdraw@drawNoLabelTg=\x\else% If not skipping label + \ifnum\pmdraw@drawNoLabelTh=\x\else% If not skipping label + \ifnum\pmdraw@drawNoLabelTi=\x\else% If not skipping label + \ifnum\pmdraw@ifLabelsT=1% If drawing labels + \pmdraw@drawLabelTop{\x + \value{pmdraw@blankT}}{\pmdraw@rowSep}{\thepmdraw@labelStartT}% Draw label + \fi% + \fi% + \fi% + \fi% + \fi% + \fi% + \fi% + \fi% + \fi% + \fi% + \stepcounter{pmdraw@labelStartT}% Update label counter + }% +} +\newcommand{\pmdraw@drawUedges}[3][]{% Draws upper non-transversal edge, #1 options, #2 L vertex, #3 R vertex + \setcounter{pmdraw@NTlevel}{1}% Store default level of edge + \setkeys{pmdraw@NTedges}{#1}% Processes options + \ifdim\pmdraw@NTedgesHeight pt=-1000pt% If using default heights + \tikzmath{% + \pmdraw{edgeHeight}=\value{pmdraw@NTlevel}*\pmdraw{edgeSepU};% Calculates height based on level of edge + }% + \else% If using manual heights + \tikzmath{% + \pmdraw{edgeHeight}=\pmdraw@rowSep-\pmdraw@NTedgesHeight;% Set manual height + }% + \fi% + \@ifclassloaded{beamer}{% If in beamer + \uncover<\pmdraw@edgeUncover>{% Uncovers edge + \ifnum\value{pmdraw@ifEdge}=0% If drawing edge + \pmdraw@drawUedgesDraw{#2}{#3}% Draw edge + \else% If hiding edge + \phantom{% + \pmdraw@drawUedgesDraw{#2}{#3}% Draw edge + }% + \fi% + }% + }{% If not in beamer + \ifnum\value{pmdraw@ifEdge}=0% If drawing edge + \pmdraw@drawUedgesDraw{#2}{#3}% Draw edge + \else% If hiding edge + \phantom{% + \pmdraw@drawUedgesDraw{#2}{#3}% Draw edge + }% + \fi% + }% + % Resets user keys and other flags to default values + \renewcommand{\pmdraw@NTedgesHeight}{-1000}% + \renewcommand{\pmdraw@edgeUncover}{1-}% + \setcounter{pmdraw@ifEdge}{0}% + \let\pmdraw@drawLedgesDraw\pmdraw@drawLedgesDrawDefault% + \let\pmdraw@drawUedgesDraw\pmdraw@drawUedgesDrawDefault% + \pmdraw@UedgesLoop% Restart for loop +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% % +% Grid creation % +% % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% This is a verbatim copy of: +% https://tex.stackexchange.com/a/467908 + +\newif\if@showgrid@grid +\newif\if@showgrid@left +\newif\if@showgrid@right +\newif\if@showgrid@below +\newif\if@showgrid@above +\tikzset{% + every show grid/.style={}, + show grid/.style={execute at end picture={\@showgrid{grid=true,#1}}},% + show grid/.default={true}, + show grid/.cd, + labels/.style={font={\sffamily\small},help lines}, + xlabels/.style={}, + ylabels/.style={}, + keep bb/.code={\useasboundingbox (current bounding box.south west) rectangle (current bounding box.north west);}, + true/.style={left,below}, + false/.style={left=false,right=false,above=false,below=false,grid=false}, + none/.style={left=false,right=false,above=false,below=false}, + all/.style={left=true,right=true,above=true,below=true}, + grid/.is if=@showgrid@grid, + left/.is if=@showgrid@left, + right/.is if=@showgrid@right, + below/.is if=@showgrid@below, + above/.is if=@showgrid@above, + false, +} + +\def\@showgrid#1{% + \begin{scope}[every show grid,show grid/.cd,#1] + \if@showgrid@grid + \begin{pgfonlayer}{background} + \draw [help lines] + (current bounding box.south west) grid + (current bounding box.north east); +% + \pgfpointxy{1}{1}% + \edef\xs{\the\pgf@x}% + \edef\ys{\the\pgf@y}% + \pgfpointanchor{current bounding box}{south west} + \edef\xa{\the\pgf@x}% + \edef\ya{\the\pgf@y}% + \pgfpointanchor{current bounding box}{north east} + \edef\xb{\the\pgf@x}% + \edef\yb{\the\pgf@y}% + \pgfmathtruncatemacro\xbeg{ceil(\xa/\xs)} + \pgfmathtruncatemacro\xend{floor(\xb/\xs)} + \if@showgrid@below + \foreach \X in {\xbeg,...,\xend} { + \node [below,show grid/labels,show grid/xlabels] at (\X,\ya) {\X}; + } + \fi + \if@showgrid@above + \foreach \X in {\xbeg,...,\xend} { + \node [above,show grid/labels,show grid/xlabels] at (\X,\yb) {\X}; + } + \fi + \pgfmathtruncatemacro\ybeg{ceil(\ya/\ys)} + \pgfmathtruncatemacro\yend{floor(\yb/\ys)} + \if@showgrid@left + \foreach \Y in {\ybeg,...,\yend} { + \node [left,show grid/labels,show grid/ylabels] at (\xa,\Y) {\Y}; + } + \fi + \if@showgrid@right + \foreach \Y in {\ybeg,...,\yend} { + \node [right,show grid/labels,show grid/ylabels] at (\xb,\Y) {\Y}; + } + \fi + \end{pgfonlayer} + \fi + \end{scope} +} +\tikzset{every show grid/.style={show grid/keep bb}}% Keep the original bounding box! + +\endinput
\ No newline at end of file diff --git a/graphics/pgf/contrib/pmdraw/pmdraw.tex b/graphics/pgf/contrib/pmdraw/pmdraw.tex new file mode 100644 index 0000000000..af516b18e6 --- /dev/null +++ b/graphics/pgf/contrib/pmdraw/pmdraw.tex @@ -0,0 +1,3895 @@ +\documentclass{ltxdoc} + +% *------------------------------* +% |2````````````````````````````3| +% |`````____````____`````````````| +% |````|MFMF\ /MFMF|````````````| +% |````|MF|MF\/MF|MF|````````````| +% |````|MF|\MFMF/|MF|_______`````| +% |````|MF|``````|MFMFMFMFMF|````| +% |````|MF|``````|MF|````````````| +% |````|MF|``````|MF|___`````````| +% |``````````````|MFMFMF|````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |6````````````````````````````2| +% *------------------------------* + +\usepackage{pmdraw} +\usepackage{xcolor} +\usepackage{fancyvrb} +\usepackage{hyperref} + +\begin{document} + +\hypersetup{colorlinks, linkcolor=blue, urlcolor=blue} + +\title{The \textsf{pmdraw} package\thanks{This document + corresponds to \textsf{pmdraw}~v1.5, 2024-10-07.}} +\author{Matthias Fresacher \\ \texttt{matthias.ypg37@slmail.me}} + +\maketitle + +\begin{abstract} +The \texttt{pmdraw} package allows you to draw elements of the diagram monoids, commonly referred to as diagrams. The package provides a lot of flexibility to draw most diagrams and can be customised as needed. +\end{abstract} + +\tableofcontents + +\newpage +\section{Introduction} + +\subsection{Motivation} + +Diagram monoids and their closely related algebras are well studied objects with applications in theoretical physics and representation theory in mathematics. The elements of these monoids are called diagrams because they can be drawn graphically as a graph following certain conventions. + +My PhD thesis examines properties of these diagram monoids and hence I needed to draw a large number of diagrams in a neat and consistent way. This thesis work formed the basis of this package with only customisability and the manual needed to be added to complete this package. + +\subsection{Acknowledgments} + +Most importantly, I thank James East, my PhD supervisor for allowing me to get a little sidetracked in my PhD research and develop and publish this package rather than work on my thesis like I should have. + +This package has at its core the basic drawing macro of a diagram as used by James East and Nik Ru\v{s}kuc in their 2022 publication {\it Classification of congruences of twisted partition monoids} in Advances in Mathematics. I thank them both for allowing me to build on their work. + +I thank everybody that has helped me proof read, spot bugs, provide feedback, suggest improvements or has otherwise contributed to this package. Those that are happy to be named are (in chronological order): +\begin{itemize} + \item Nik Ru\v{s}kuc +\end{itemize} + +This package heavily uses commands that can accept an arbitrary number of arguments as inputs. I thank \texttt{egreg} for their template upon which my commands are based (\url{https://tex.stackexchange.com/a/72915}). + +As this was my first time using keys, I thank David Carlisle for their very helpful example (\url{https://tex.stackexchange.com/a/542555}). + +As it turns out, passing my keys to the \verb`\draw` command of \texttt{tikz} is a little more tricky than one might expect. I thank Andrew Stacey for their solution (\url{https://tex.stackexchange.com/a/64237}). + +I thank Partha~D.~for their ready to use out of the box macro for adding grid lines to a \texttt{tikz} drawing (\url{https://tex.stackexchange.com/a/467908}). + +I also thank everybody on \url{https://tex.stackexchange.com} who has answered a questions or solved a problem. There are too many to list you all. Thank you. + +\section{Bugs and known problems} + +\subsection{Bugs} + +If you discover a bug, please be so kind and send me a minimum working example of the bug in action and I will work on fixing it. + +I would like this package to be as perfect as it can be but I will need your help with this as there simply are too many keys to test every combination or use case. + +The following are a list of currently known bugs that will be addressed: +\begin{enumerate} + \item When the radius of the arc for non-transversal edges is too large compared to the distance between the two nodes, the arcs overlap. The current solution is to manually specify a \texttt{level} or \texttt{height} that makes the arcs smaller. + \item Baseline adjustments are hard coded so when changing \texttt{scale}, \texttt{row sep} or text size, for example, the vertical position of diagrams is likely to be incorrect. The current solution is to manually adjust the \texttt{baseline} within the \texttt{tikz} key. + \item In a product diagram, if \texttt{row sep} is used in the bottom diagram, the spacing between diagrams is incorrect. +\end{enumerate} + +\subsection{Incompatibilities} + +The following are a list of known problems or incompatibilities that are not scheduled to be resolved anytime soon: +\begin{enumerate} + \item Whilst not strictly an incompatibility, when using \texttt{beamer}, frames have to be \texttt{fragile}. +\end{enumerate} + +\section{Usage} + +To use the package, one must understand that all diagrams are created from a basic building block called a brick. + +\subsection{Bricks} + +\DescribeMacro{brick} +A \texttt{brick} is a diagram that contains no dots. For example, +\begin{center} + \pmdBrick[ % Options + degree=5 + ]{ % Upper non-transversal edges + {1}{2} + {2}{5} + }{ % Lower non-transversal edges + {1}{2} + {3}{4} + }{ % Transversal edges + {1}{1} + {3}{4} + } +\end{center} +is a brick whilst +\begin{center} + \pmdDiagram{ + { % Brick 1 + [ % Options + degree=5 + ]{ % Upper non-transversal edges + {2}{3} + {4}{5} + }{ % Lower non-transversal edges + {2}{3} + {4}{5} + }{ % Transversal edges + {1}{1} + } + }{ % Brick 2 + [ % Options + degree=2 + ]{ % Upper non-transversal edges + {1}{2} + }{ % Lower non-transversal edges + {1}{2} + }{ % Transversal edges + \pmdEmpty + } + } + } +\end{center} +is not a brick. +\DescribeMacro{<brick>} +The syntax for a brick contains four components and is as follows: +\begin{center} + \texttt{<brick>~=~[<options>]\{<Uedges>\}\{<Ledges>\}\{<Tedges>\}} +\end{center} +where +\DescribeMacro{brick/<options>} +the \texttt{<options>} are described in Section~\ref{sec: brick/options}. + +\DescribeMacro{<Uedges>} +is a list of upper non-transversal edges. An upper non-transversal edges has three components \texttt{<Uedges>~=~[<options>]\{<Svertex>\}\{<Tvertex>\}} where +\DescribeMacro{Uedges/<options>}\DescribeMacro{Ledges/<options>} +the \texttt{<options>} are described in Section~\ref{sec: NT edge/options}, +\DescribeMacro{<Svertex>} +\texttt{\{<Svertex>\}} is the starting vertex and +\DescribeMacro{<Tvertex>} +\texttt{\{<Tvertex>\}} is the terminating vertex of the edge. Both \texttt{\{<Svertex>\}} and \texttt{\{<Tvertex>\}} are a \( x \)-coordinate and it is assumed that \( \texttt{\{<Svertex>\}} < \texttt{\{<Tvertex>\}} \). + +\DescribeMacro{list} +A \texttt{list} of upper non-transversal edges is simply each upper non-transversal edge written after the other. For example a list with one upper non-transversal edges is +\begin{verbatim} + {1}{2} +\end{verbatim} +whilst one with three upper non-transversal edges may be +\begin{verbatim} + {1}{2}[level=1]{3}{4}{5}{6} +\end{verbatim} +For ease of reading this will coded as +\begin{verbatim} + {1}{2} + [level=1]{3}{4} + {5}{6} +\end{verbatim} +\DescribeMacro{\pmdEmpty} +Should a list be empty, the command \verb`\pmdEmpty` should be used. + +\DescribeMacro{<Ledges>} +is a list of lower non-transversal edges. A lower non-transversal edges has the same three components as an upper non-transversal edge, namely \texttt{<Ledges>~=~[<options>]\{<Svertex>\}\{<Tvertex>\}}. + +\DescribeMacro{<Tedges>} +is a list of transversal edges. A transversal edges has three components \texttt{<Tedges>~=~[<options>]\{<Tvertex>\}\{<Bvertex>\}} where +\DescribeMacro{Tedges/<options>} +the \texttt{<options>} are described in Section~\ref{sec: T edge/options}, +\DescribeMacro{<Tvertex>} +\texttt{\{<Tvertex>\}} is the top vertex and +\DescribeMacro{<Bvertex>} +\texttt{\{<Bvertex>\}} is the bottom vertex of the edge. Both \texttt{\{<Tvertex>\}} and \texttt{\{<Bvertex>\}} are a \( x \)-coordinate. + +An example \texttt{<brick>} and the resultant diagram is: +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdBrick[ % Options + degree=5 +]{ % Upper non-transversal edges + {1}{2} + {2}{5} +}{ % Lower non-transversal edges + {1}{2} + {3}{4} + {4}{5} +}{ % Transversal edges + \pmdEmpty +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} +\pmdBrick[ % Options + degree=5 +]{ % Upper non-transversal edges + {1}{2} + {2}{5} +}{ % Lower non-transversal edges + {1}{2} + {3}{4} + {4}{5} +}{ % Transversal edges + \pmdEmpty +} + \end{minipage} + \end{minipage}% +\end{center} + +\subsection{Draw commands} + +This package has three draw commands. + +\DescribeMacro{\pmdBrick} +draws a brick and has the syntax \verb`\pmdBrick<brick>`. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdBrick[ % Options + degree=5 +]{ % Upper non-transversal edges + {1}{2} + {2}{5} +}{ % Lower non-transversal edges + {1}{2} + {3}{4} + {4}{5} +}{ % Transversal edges + \pmdEmpty +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} +\pmdBrick[ % Options + degree=5 +]{ % Upper non-transversal edges + {1}{2} + {2}{5} +}{ % Lower non-transversal edges + {1}{2} + {3}{4} + {4}{5} +}{ % Transversal edges + \pmdEmpty +} + \end{minipage} + \end{minipage}% +\end{center} + +\DescribeMacro{\pmdDiagram} +draws arbitrarily many bricks separated by dots and has the syntax +\begin{verbatim} +\pmdDiagram[<options>]{<bricks>} +\end{verbatim} +where +\DescribeMacro{diagram/<options>} +the \texttt{<options>} are described in Section~\ref{sec: diagram/options} and +\DescribeMacro{<bricks>} +\texttt{<bricks>} is a list of \texttt{<brick>}-s, with each brick enclosed in curly brackets. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdDiagram{ + { % Brick 1 + [ % Options + degree=2, + brace={ + left=1, + right=4, + label={n} + } + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{2} + } + }{ % Brick 2 + [ % Options + degree=1 + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + } + } +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} + \end{minipage} + \end{minipage}% +\end{center} +\begin{center} +\pmdDiagram{ + { % Brick 1 + [ % Options + degree=2, + brace={ + left=1, + right=4, + label={n} + } + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{2} + } + }{ % Brick 2 + [ % Options + degree=1 + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + } + } +} +\end{center} + +It should be noted that \verb`\pmdBrick` is simply a wrapper for a single brick that calls \verb`\pmdDiagram` with no diagram options. This means that, for example, the \texttt{grid} key is not available for \verb`\pmdBrick` and \verb`\pmdDiagram` must be used instead to access the \texttt{grid} key. + +For edges that go across multiple bricks, know that the coordinate positions of the vertices extends infinitely in both directions. If using default settings, the dots between bricks occupies one vertex position. To help with counting and identifying the correct coordinate position, the \texttt{grid} flag may also be used, see Section~\ref{sec: diagram/options all}. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdDiagram{ + { % Brick 1 + [ % Options + degree=3, + brace={ + left=2, + right=6, + label={n} + } + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{6} + {3}{5} + } + }{ % Brick 2 + [ % Options + degree=2 + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{-1} + {2}{-2} + } + } +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} + \end{minipage} + \end{minipage}% +\end{center} +\begin{center} +\pmdDiagram{ + { % Brick 1 + [ % Options + degree=3, + brace={ + left=2, + right=6, + label={n} + } + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{6} + {3}{5} + } + }{ % Brick 2 + [ % Options + degree=2 + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{-1} + {2}{-2} + } + } +} +\end{center} + +\DescribeMacro{\pmdProduct} +draws two diagrams on top of each other as is the case during multiplication or concatenation and has the syntax +\begin{verbatim} +\pmdProduct[<options>]{<Aedges>}{<Tbricks>}{<Bbricks>} +\end{verbatim} +where +\DescribeMacro{diagram/<options>} +the \texttt{<options>} are described in Section~\ref{sec: diagram/options}. + +\DescribeMacro{<Aedges>} +is a list of edges that are added during the concatenation process. An added edge has two components, namely \texttt{<Aedges>~=~\{<Svertex>\}\{<Tvertex>\}}, where \texttt{\{<Svertex>\}} is the starting vertex and \texttt{\{<Tvertex>\}} is the terminating vertex of the collection of added edges. Both \texttt{\{<Svertex>\}} and \texttt{\{<Tvertex>\}} are a \( x \)-coordinate and it is assumed that \( \texttt{\{<Svertex>\}} < \texttt{\{<Tvertex>\}} \). + +\DescribeMacro{<Tbricks>} +is a list of bricks that correspond to the top diagram, with each brick enclosed in curly brackets. + +\DescribeMacro{<Bbricks>} +is a list of bricks that correspond to the bottom diagram, with each brick enclosed in curly brackets. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdProduct{ % Added edges + {1}{5} + {7}{8} +}{ % Top diagram + { % Brick 1 + [ % Options + degree=5 + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{2} + {3}{3} + {4}{4} + {5}{5} + } + }{ % Brick 2 + [ % Options + degree=2 + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{2} + } + } +}{ % Bottom diagram + { % Brick 1 + [ % Options + degree=5 + ]{ % Upper non-transversal edges + {2}{3} + {4}{5} + }{ % Lower non-transversal edges + {2}{3} + {4}{5} + }{ % Transversal edges + {1}{1} + } + }{ % Brick 2 + [ % Options + degree=2 + ]{ % Upper non-transversal edges + {1}{2} + }{ % Lower non-transversal edges + {1}{2} + }{ % Transversal edges + \pmdEmpty + } + } +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} + \end{minipage} + \end{minipage}% +\end{center} +\begin{center} +\pmdProduct{ % Added edges + {1}{5} + {7}{8} +}{ % Top diagram + { % Brick 1 + [ % Options + degree=5 + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{2} + {3}{3} + {4}{4} + {5}{5} + } + }{ % Brick 2 + [ % Options + degree=2 + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{2} + } + } +}{ % Bottom diagram + { % Brick 1 + [ % Options + degree=5 + ]{ % Upper non-transversal edges + {2}{3} + {4}{5} + }{ % Lower non-transversal edges + {2}{3} + {4}{5} + }{ % Transversal edges + {1}{1} + } + }{ % Brick 2 + [ % Options + degree=2 + ]{ % Upper non-transversal edges + {1}{2} + }{ % Lower non-transversal edges + {1}{2} + }{ % Transversal edges + \pmdEmpty + } + } +} +\end{center} + +\DescribeMacro{\pmdProductTriple} +draws three diagrams on top of each other as is the case during multiplication or concatenation of three diagrams and has the syntax +\begin{verbatim} +\pmdProductTriple[<options>]{<ATedges>}{<ABedges>}{<Tbricks>}}{<Mbricks>}{<Bbricks>} +\end{verbatim} +where +\DescribeMacro{diagram/<options>} +the \texttt{<options>} are described in Section~\ref{sec: diagram/options}. + +\DescribeMacro{<ATedges>}\DescribeMacro{<ABedges>} +is a list of edges that are added during the concatenation process. \texttt{<ATedges>} is the list of edges between the top and middle diagrams, whilst \texttt{<ABedges>} is the list of edges between the middle and bottom diagrams. An added edge has two components, namely \texttt{<ATedges>~=~\{<Svertex>\}\{<Tvertex>\}} and \texttt{<ABedges>~=~\{<Svertex>\}\{<Tvertex>\}}, where \texttt{\{<Svertex>\}} is the starting vertex and \texttt{\{<Tvertex>\}} is the terminating vertex of the collection of added edges. Both \texttt{\{<Svertex>\}} and \texttt{\{<Tvertex>\}} are a \( x \)-coordinate and it is assumed that \( \texttt{\{<Svertex>\}} < \texttt{\{<Tvertex>\}} \). + +\DescribeMacro{<Tbricks>} +is a list of bricks that correspond to the top diagram, with each brick enclosed in curly brackets. + +\DescribeMacro{<Mbricks>} +is a list of bricks that correspond to the top diagram, with each brick enclosed in curly brackets. + +\DescribeMacro{<Bbricks>} +is a list of bricks that correspond to the bottom diagram, with each brick enclosed in curly brackets. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdProductTriple{ % Top added edges + {1}{5} + {7}{8} +}{ % Bottom added edges + {1}{5} + {7}{8} +}{ % Top diagram + { % Brick 1 + [ % Options + degree=5 + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{2} + {3}{3} + {4}{4} + {5}{5} + } + }{ % Brick 2 + [ % Options + degree=2 + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{2} + } + } +}{ % Middle diagram + % Continued on next page ... +\end{verbatim} + \end{minipage} + \end{minipage} +\end{center} +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} + % ... continued from previous page (note repeated line) +}{ % Middle diagram + { % Brick 1 + [ % Options + degree=5 + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{3} + {3}{2} + {4}{5} + {5}{4} + } + }{ % Brick 2 + [ % Options + degree=2 + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{2} + {2}{1} + } + } +}{ % Bottom diagram + { % Brick 1 + [ % Options + degree=5 + ]{ % Upper non-transversal edges + {2}{3} + {4}{5} + }{ % Lower non-transversal edges + {2}{3} + {4}{5} + }{ % Transversal edges + {1}{1} + } + }{ % Brick 2 + [ % Options + degree=2 + ]{ % Upper non-transversal edges + {1}{2} + }{ % Lower non-transversal edges + {1}{2} + }{ % Transversal edges + \pmdEmpty + } + } +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} + \end{minipage} + \end{minipage}% +\end{center} +\begin{center} +\pmdProductTriple{ % Top added edges + {1}{5} + {7}{8} +}{ % Bottom added edges + {1}{5} + {7}{8} +}{ % Top diagram + { % Brick 1 + [ % Options + degree=5 + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{2} + {3}{3} + {4}{4} + {5}{5} + } + }{ % Brick 2 + [ % Options + degree=2 + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{2} + } + } +}{ % Middle diagram + { % Brick 1 + [ % Options + degree=5 + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{3} + {3}{2} + {4}{5} + {5}{4} + } + }{ % Brick 2 + [ % Options + degree=2 + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{2} + {2}{1} + } + } +}{ % Bottom diagram + { % Brick 1 + [ % Options + degree=5 + ]{ % Upper non-transversal edges + {2}{3} + {4}{5} + }{ % Lower non-transversal edges + {2}{3} + {4}{5} + }{ % Transversal edges + {1}{1} + } + }{ % Brick 2 + [ % Options + degree=2 + ]{ % Upper non-transversal edges + {1}{2} + }{ % Lower non-transversal edges + {1}{2} + }{ % Transversal edges + \pmdEmpty + } + } +} +\end{center} + +\subsection{Brick options} \label{sec: brick/options} + +The following are all of the keys that are available for bricks. + +\subsubsection{Vertex options} + +\DescribeMacro{degree} +specifies the degree, that is, the number of vertices in the top and bottom row of the diagram. Must be a positive integer and must be provided unless using \texttt{degree top} and \texttt{degree bottom}. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdBrick[ % Options + degree=5 +]{ % Upper non-transversal edges + {1}{2} + {2}{5} +}{ % Lower non-transversal edges + {1}{2} + {3}{4} +}{ % Transversal edges + {1}{1} + {3}{4} +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} +\pmdBrick[ % Options + degree=5 +]{ % Upper non-transversal edges + {1}{2} + {2}{5} +}{ % Lower non-transversal edges + {1}{2} + {3}{4} +}{ % Transversal edges + {1}{1} + {3}{4} +} + \end{minipage} + \end{minipage}% +\end{center} + +\DescribeMacro{degree top} \DescribeMacro{degree bottom} +specifies the degree, that is, the number of vertices in the top (bottom) row of the diagram. Must be a positive integer and must be provided as a pair \texttt{degree top} and \texttt{degree bottom}. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdBrick[ % Options + degree top=5, + degree bottom=4 +]{ % Upper non-transversal edges + {1}{2} + {2}{5} +}{ % Lower non-transversal edges + {1}{2} + {3}{4} +}{ % Transversal edges + {1}{1} + {3}{4} +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} +\pmdBrick[ % Options + degree top=5, + degree bottom=4 +]{ % Upper non-transversal edges + {1}{2} + {2}{5} +}{ % Lower non-transversal edges + {1}{2} + {3}{4} +}{ % Transversal edges + {1}{1} + {3}{4} +} + \end{minipage} + \end{minipage}% +\end{center} + +\DescribeMacro{blank top} \DescribeMacro{blank bottom} +specifies the number of blank vertices to the left of the top (bottom) row of the diagram. Default is zero. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdBrick[ % Options + blank top=1, + degree top=4, + degree bottom=5 +]{ % Upper non-transversal edges + {2}{5} +}{ % Lower non-transversal edges + {1}{2} + {3}{4} +}{ % Transversal edges + {3}{4} +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} +\pmdBrick[ % Options + blank top=1, + degree top=4, + degree bottom=5 +]{ % Upper non-transversal edges + {2}{5} +}{ % Lower non-transversal edges + {1}{2} + {3}{4} +}{ % Transversal edges + {3}{4} +} + \end{minipage} + \end{minipage}% +\end{center} + +It should also be noted that the \texttt{blank top} and \texttt{blank bottom} can also be used to create more space between bricks and the dots between bricks by setting a large number. Likewise if set to \( -1 \) and the dots is redefined to not draw, the space between bricks can be removed altogether. See Examples~13-15. + +\DescribeMacro{row sep} +specifies the vertical separation between rows of vertices. Default is two. If using edge options such as \texttt{levels}, \texttt{row sep} must be given before \texttt{levels}. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdBrick[ % Options + degree=5, + row sep=4 +]{ % Upper non-transversal edges + {1}{2} + {2}{5} +}{ % Lower non-transversal edges + {1}{2} + {3}{4} +}{ % Transversal edges + {1}{1} + {3}{4} +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} +\pmdBrick[ % Options + degree=5, + row sep=4 +]{ % Upper non-transversal edges + {1}{2} + {2}{5} +}{ % Lower non-transversal edges + {1}{2} + {3}{4} +}{ % Transversal edges + {1}{1} + {3}{4} +} + \end{minipage} + \end{minipage}% +\end{center} + +\DescribeMacro{vertices} +passes through options to the \verb`\draw` command of vertices. The default is no argument. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdBrick[ % Options + degree=5, + vertices=blue +]{ % Upper non-transversal edges + {1}{2} + {2}{5} +}{ % Lower non-transversal edges + {1}{2} + {3}{4} +}{ % Transversal edges + {1}{1} + {3}{4} +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} +\pmdBrick[ % Options + degree=5, + vertices=blue +]{ % Upper non-transversal edges + {1}{2} + {2}{5} +}{ % Lower non-transversal edges + {1}{2} + {3}{4} +}{ % Transversal edges + {1}{1} + {3}{4} +} + \end{minipage} + \end{minipage}% +\end{center} + +\DescribeMacro{no vertex bottom 1} +\DescribeMacro{ \vdots} +\DescribeMacro{no vertex bottom 9} +\DescribeMacro{no vertex top 1} +\DescribeMacro{ \vdots} +\DescribeMacro{no vertex top 9} +specifies a vertex that is not drawn. Any of the nine available keys can be used in any order. It can be used to draw single vertices that are different to the others. If more than nine vertices need to be excluded, simply draw multiple bricks next to each other. The default is no argument. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdBrick[ % Options + degree=5, + no vertex top 1=2, + no vertex top 2=3, + no vertex bottom 1=4, + decorate after={ + \fill[red] (4,0) circle (.1); + } +]{ % Upper non-transversal edges + {1}{2} + {2}{5} +}{ % Lower non-transversal edges + {1}{2} + {3}{4} +}{ % Transversal edges + {1}{1} + {3}{4} +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} + \end{minipage} + \end{minipage}% +\end{center} +\begin{center} +\pmdBrick[ % Options + degree=5, + no vertex top 1=2, + no vertex top 2=3, + no vertex bottom 1=4, + decorate after={ + \fill[red] (4,0) circle (.1); + } +]{ % Upper non-transversal edges + {1}{2} + {2}{5} +}{ % Lower non-transversal edges + {1}{2} + {3}{4} +}{ % Transversal edges + {1}{1} + {3}{4} +} +\end{center} + +\DescribeMacro{vertices options} +allows for the redefinition of the command that draws the vertices. It has two arguments, the \( x \) and \( y \)-position of the vertex. The default is +\begin{verbatim} +\fill[apply style/.expand once=\pmdraw@drawVertexOptions] (#1,#2) circle (.17); +\end{verbatim} +An example use is +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdBrick[ % Options + degree=5, + vertices options={ + \draw[very thick] (#1,#2) circle (.25); + } +]{ % Upper non-transversal edges + {1}{2} + {2}{5} +}{ % Lower non-transversal edges + {1}{2} + {3}{4} +}{ % Transversal edges + {1}{1} + {3}{4} +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} + \end{minipage} + \end{minipage}% +\end{center} +\begin{center} +\pmdBrick[ % Options + degree=5, + vertices options={ + \draw[very thick] (#1,#2) circle (.25); + } +]{ % Upper non-transversal edges + {1}{2} + {2}{5} +}{ % Lower non-transversal edges + {1}{2} + {3}{4} +}{ % Transversal edges + {1}{1} + {3}{4} +} +\end{center} + +\DescribeMacro{labels}\DescribeMacro{labels top}\DescribeMacro{labels bottom} +flags that allow for the drawing of labels for the vertices. Use \texttt{labels} for labels on both the top and bottom or set individually. The default is no labels. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdBrick[ % Options + degree=5, + labels bottom +]{ % Upper non-transversal edges + {1}{2} + {2}{5} +}{ % Lower non-transversal edges + {1}{2} + {3}{4} +}{ % Transversal edges + {1}{1} + {3}{4} +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} +\pmdBrick[ % Options + degree=5, + labels bottom +]{ % Upper non-transversal edges + {1}{2} + {2}{5} +}{ % Lower non-transversal edges + {1}{2} + {3}{4} +}{ % Transversal edges + {1}{1} + {3}{4} +} + \end{minipage} + \end{minipage}% +\end{center} + +\DescribeMacro{labels start}\DescribeMacro{labels top start}\DescribeMacro{labels bottom start} +sets the starting value of the labels for the vertices. The default is one. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdBrick[ % Options + degree=5, + labels, + labels top start=3, + labels bottom start=-2 +]{ % Upper non-transversal edges + {1}{2} + {2}{5} +}{ % Lower non-transversal edges + {1}{2} + {3}{4} +}{ % Transversal edges + {1}{1} + {3}{4} +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} +\pmdBrick[ % Options + degree=5, + labels, + labels top start=3, + labels bottom start=-2 +]{ % Upper non-transversal edges + {1}{2} + {2}{5} +}{ % Lower non-transversal edges + {1}{2} + {3}{4} +}{ % Transversal edges + {1}{1} + {3}{4} +} + \end{minipage} + \end{minipage}% +\end{center} + +\DescribeMacro{no labels bottom 1} +\DescribeMacro{ \vdots} +\DescribeMacro{no labels bottom 9} +\DescribeMacro{no labels top 1} +\DescribeMacro{ \vdots} +\DescribeMacro{no labels top 9} +specifies a vertex for which no label is drawn. Any of the nine available keys can be used in any order. It can be used to insert single unique labels that are different to the others. If more than nine labels need to be excluded, simply draw multiple bricks next to each other. The default is no argument. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdBrick[ % Options + degree=5, + labels, + no label top 1=2, + no label top 2=3, + no label bottom 1=4, + decorate after={ + \draw (3,2) node[above=6pt,red] {\(x\)}; + } +]{ % Upper non-transversal edges + {1}{2} + {2}{5} +}{ % Lower non-transversal edges + {1}{2} + {3}{4} +}{ % Transversal edges + {1}{1} + {3}{4} +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} + \end{minipage} + \end{minipage}% +\end{center} +\begin{center} +\pmdBrick[ % Options + degree=5, + labels, + no label top 1=2, + no label top 2=3, + no label bottom 1=4, + decorate after={ + \draw (3,2) node[above=6pt,red] {\(x\)}; + } +]{ % Upper non-transversal edges + {1}{2} + {2}{5} +}{ % Lower non-transversal edges + {1}{2} + {3}{4} +}{ % Transversal edges + {1}{1} + {3}{4} +} +\end{center} + +\DescribeMacro{labels top draw}\DescribeMacro{labels top node}\DescribeMacro{labels bottom draw}\DescribeMacro{labels bottom node} +passes through options to the \verb`\draw` and \verb`node` command of the labels of vertices. The default is no argument. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdBrick[ % Options + degree=5, + labels, + labels top node=red, + labels bottom node={right=2pt} +]{ % Upper non-transversal edges + {1}{2} + {2}{5} +}{ % Lower non-transversal edges + {1}{2} + {3}{4} +}{ % Transversal edges + {1}{1} + {3}{4} +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} + \end{minipage} + \end{minipage}% +\end{center} +\begin{center} +\pmdBrick[ % Options + degree=5, + labels, + labels top node=red, + labels bottom node={right=2pt} +]{ % Upper non-transversal edges + {1}{2} + {2}{5} +}{ % Lower non-transversal edges + {1}{2} + {3}{4} +}{ % Transversal edges + {1}{1} + {3}{4} +} +\end{center} + +\DescribeMacro{labels top options}\DescribeMacro{labels bottom options} +allows for the redefinition of the command that draws the labels of the vertices. They have three arguments, the \( x \) and \( y \)-position of the vertex and the label value. The default for the top is +\begin{verbatim} +\draw[apply style/.expand once=\pmdraw@drawLabelTDrawOptions] (#1,#2) + node[above=6pt,apply style/.expand once=\pmdraw@drawLabelTNodeOptions] {\(#3\)}; +\end{verbatim} +and for the bottom +\begin{verbatim} +\draw[apply style/.expand once=\pmdraw@drawLabelBDrawOptions] (#1,#2) + node[below=6pt,apply style/.expand once=\pmdraw@drawLabelBNodeOptions] {\(#3'\)}; +\end{verbatim} +An example use is +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdBrick[ % Options + degree=5, + labels, + labels bottom options={ + \draw (#1,#2) node[below=6pt,blue] {\(#3''\)}; + } +]{ % Upper non-transversal edges + {1}{2} + {2}{5} +}{ % Lower non-transversal edges + {1}{2} + {3}{4} +}{ % Transversal edges + {1}{1} + {3}{4} +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} + \end{minipage} + \end{minipage}% +\end{center} +\begin{center} +\pmdBrick[ % Options + degree=5, + labels, + labels bottom options={ + \draw (#1,#2) node[below=6pt,blue] {\(#3''\)}; + } +]{ % Upper non-transversal edges + {1}{2} + {2}{5} +}{ % Lower non-transversal edges + {1}{2} + {3}{4} +}{ % Transversal edges + {1}{1} + {3}{4} +} +\end{center} + +\DescribeMacro{no dots} +The \texttt{no dots} flag removes the drawing of dots to the left of the current brick in diagrams. Default is to draw dots except for the first brick. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdDiagram{ + { % Brick 1 + [ % Options + degree=2, + brace={ + left=1, + right=4, + label={n} + } + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{2} + } + }{ % Brick 2 + [ % Options + degree=1, + no dots + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + } + } +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} + \end{minipage} + \end{minipage}% +\end{center} +\begin{center} +\pmdDiagram{ + { % Brick 1 + [ % Options + degree=2, + brace={ + left=1, + right=4, + label={n} + } + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{2} + } + }{ % Brick 2 + [ % Options + degree=1, + no dots + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + } + } +} +\end{center} + + +\DescribeMacro{dots draw}\DescribeMacro{dots node} +passes through options to the \verb`\draw` and \verb`node` command of the dots. The default is no argument. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdDiagram{ + { % Brick 1 + [ % Options + degree=2, + brace={ + left=1, + right=4, + label={n} + } + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{2} + } + }{ % Brick 2 + [ % Options + degree=1, + dots node=red + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + } + } +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} + \end{minipage} + \end{minipage}% +\end{center} +\begin{center} +\pmdDiagram{ + { % Brick 1 + [ % Options + degree=2, + brace={ + left=1, + right=4, + label={n} + } + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{2} + } + }{ % Brick 2 + [ % Options + degree=1, + dots node=red + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + } + } +} +\end{center} + +\DescribeMacro{vertices top phantom}\DescribeMacro{vertices bottom phantom} +These flags allow for all of the top or bottom vertices to be hidden using the \texttt{phantom} command. Simply wraps the vertex drawing macros with a \texttt{phantom} command. This hiding will also apply to the labels of that row (top or bottom) of vertices. To only hide a selected number of vertices, use seperate bricks. The default is false. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdBrick[ % Options + degree=5, + vertices top phantom, +]{ % Upper non-transversal edges + {1}{2} + {2}{5} +}{ % Lower non-transversal edges + {1}{2} + {3}{4} +}{ % Transversal edges + {1}{1} + {3}{4} +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} +\pmdBrick[ % Options + degree=5, + vertices top phantom +]{ % Upper non-transversal edges + {1}{2} + {2}{5} +}{ % Lower non-transversal edges + {1}{2} + {3}{4} +}{ % Transversal edges + {1}{1} + {3}{4} +} + \end{minipage} + \end{minipage}% +\end{center} + +\DescribeMacro{vertices top uncover}\DescribeMacro{vertices bottom uncover} +allows for all of the top or bottom vertices to be uncovered in a \texttt{beamer} presentation\footnote{Make sure to use a \texttt{fragile} frame.} using the command \verb`\uncover<n->{text}`. Simply passes the slide uncover information \verb`<n->` to the embedded \texttt{uncover} command within the vertex drawing macros. This uncover will also apply to the labels of that row (top or bottom) of vertices. To only uncover a selected number of vertices, use seperate bricks. The default is~\texttt{1-}. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdBrick[ % Options + degree=5, + vertices top uncover={2,4-7,9-}, + vertices bottom uncover={3-} +]{ % Upper non-transversal edges + {1}{2} + {2}{5} +}{ % Lower non-transversal edges + {1}{2} + {3}{4} +}{ % Transversal edges + {1}{1} + {3}{4} +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} +\pmdBrick[ % Options + degree=5, + vertices top uncover={2,4-7,9-}, + vertices bottom uncover={3-} +]{ % Upper non-transversal edges + {1}{2} + {2}{5} +}{ % Lower non-transversal edges + {1}{2} + {3}{4} +}{ % Transversal edges + {1}{1} + {3}{4} +} + \end{minipage} + \end{minipage}% +\end{center} + + +\subsubsection{Edge options} + +These options should be read in conjunction with Section~\ref{sec: edge/options}. + +\DescribeMacro{levels} +specifies how many horizontal levels there are for non-transversal edges. Default is one. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdBrick[ % Options + degree=5, + levels=3 +]{ % Upper non-transversal edges + [level=3]{1}{5} + [level=2]{1}{4} + [level=1]{2}{3} +}{ % Lower non-transversal edges + [level=3]{1}{5} + [level=2]{1}{4} + [level=1]{2}{3} +}{ % Transversal edges + \pmdEmpty +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} +\pmdBrick[ % Options + degree=5, + levels=3 +]{ % Upper non-transversal edges + [level=3]{1}{5} + [level=2]{1}{4} + [level=1]{2}{3} +}{ % Lower non-transversal edges + [level=3]{1}{5} + [level=2]{1}{4} + [level=1]{2}{3} +}{ % Transversal edges + \pmdEmpty +} + \end{minipage} + \end{minipage}% +\end{center} + +\DescribeMacro{levels top} \DescribeMacro{levels bottom} +specifies how many horizontal levels there are for upper (lower) non-transversal edges. Default is one. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdBrick[ % Options + degree=5, + levels top=3, + levels bottom=2 +]{ % Upper non-transversal edges + [level=3]{1}{5} + [level=2]{1}{4} + [level=1]{2}{3} +}{ % Lower non-transversal edges + [level=2]{1}{4} + [level=1]{2}{3} +}{ % Transversal edges + \pmdEmpty +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} +\pmdBrick[ % Options + degree=5, + levels top=3, + levels bottom=2 +]{ % Upper non-transversal edges + [level=3]{1}{5} + [level=2]{1}{4} + [level=1]{2}{3} +}{ % Lower non-transversal edges + [level=2]{1}{4} + [level=1]{2}{3} +}{ % Transversal edges + \pmdEmpty +} + \end{minipage} + \end{minipage}% +\end{center} + +\DescribeMacro{levels sep} +specifies the vertical separation between horizontal levels for non-transversal edges. Default is evenly spaced within the space available for the given number of \texttt{levels}. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdBrick[ % Options + degree=5, + levels=3, + levels sep=0.3 +]{ % Upper non-transversal edges + [level=3]{1}{5} + [level=2]{1}{4} + [level=1]{2}{3} +}{ % Lower non-transversal edges + [level=3]{1}{5} + [level=2]{1}{4} + [level=1]{2}{3} +}{ % Transversal edges + \pmdEmpty +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} +\pmdBrick[ % Options + degree=5, + levels=3, + levels sep=0.3 +]{ % Upper non-transversal edges + [level=3]{1}{5} + [level=2]{1}{4} + [level=1]{2}{3} +}{ % Lower non-transversal edges + [level=3]{1}{5} + [level=2]{1}{4} + [level=1]{2}{3} +}{ % Transversal edges + \pmdEmpty +} + \end{minipage} + \end{minipage}% +\end{center} + +\DescribeMacro{levels sep top} \DescribeMacro{levels sep bottom} +specifies the vertical separation between horizontal levels for upper (lower) non-transversal edges. Default is evenly spaced within the space available for the given number of \texttt{levels}. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdBrick[ % Options + degree=5, + levels=3, + levels sep top=0.4, + levels sep bottom=0.15 +]{ % Upper non-transversal edges + [level=3]{1}{5} + [level=2]{1}{4} + [level=1]{2}{3} +}{ % Lower non-transversal edges + [level=3]{1}{5} + [level=2]{1}{4} + [level=1]{2}{3} +}{ % Transversal edges + \pmdEmpty +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} +\pmdBrick[ % Options + degree=5, + levels=3, + levels sep top=0.4, + levels sep bottom=0.15 +]{ % Upper non-transversal edges + [level=3]{1}{5} + [level=2]{1}{4} + [level=1]{2}{3} +}{ % Lower non-transversal edges + [level=3]{1}{5} + [level=2]{1}{4} + [level=1]{2}{3} +}{ % Transversal edges + \pmdEmpty +} + \end{minipage} + \end{minipage}% +\end{center} + +\DescribeMacro{edges}\DescribeMacro{edges non-transversal}\DescribeMacro{edges upper}\DescribeMacro{edges lower}\DescribeMacro{edges transversal} +pass through options to the \verb`\draw` command of their respective edge types. The default is no argument. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdBrick[ % Options + degree=5, + edges upper=blue, + edges lower={red, dotted, very thick}, + edges transversal=dashed +]{ % Upper non-transversal edges + {1}{2} + {2}{5} +}{ % Lower non-transversal edges + {1}{2} + {3}{4} +}{ % Transversal edges + {1}{1} + {3}{4} +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} + \end{minipage} + \end{minipage}% +\end{center} +\begin{center} +\pmdBrick[ % Options + degree=5, + edges upper=blue, + edges lower={red, dotted, very thick}, + edges transversal=dashed +]{ % Upper non-transversal edges + {1}{2} + {2}{5} +}{ % Lower non-transversal edges + {1}{2} + {3}{4} +}{ % Transversal edges + {1}{1} + {3}{4} +} +\end{center} + +\DescribeMacro{edges first} +flag ensures edges are drawn before vertices. The default is vertices are drawn first. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdBrick[ % Options + degree=5, + edges lower={red, very thick}, + edges first +]{ % Upper non-transversal edges + {1}{2} + {2}{5} +}{ % Lower non-transversal edges + {1}{2} + {3}{4} +}{ % Transversal edges + {1}{1} + {3}{4} +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} +\pmdBrick[ % Options + degree=5, + edges lower={red, very thick}, + edges first +]{ % Upper non-transversal edges + {1}{2} + {2}{5} +}{ % Lower non-transversal edges + {1}{2} + {3}{4} +}{ % Transversal edges + {1}{1} + {3}{4} +} + \end{minipage} + \end{minipage}% +\end{center} + +\DescribeMacro{transversals first} +flag ensures transversal edges are drawn before non-transversal edges. The default is non-transversal edges are drawn first. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdBrick[ % Options + degree=5, + edges lower={red, very thick}, + transversals first +]{ % Upper non-transversal edges + {1}{2} + {2}{5} +}{ % Lower non-transversal edges + {1}{2} + {3}{4} +}{ % Transversal edges + {1}{1} + {3}{4} +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} +\pmdBrick[ % Options + degree=5, + edges lower={red, very thick}, + transversals first +]{ % Upper non-transversal edges + {1}{2} + {2}{5} +}{ % Lower non-transversal edges + {1}{2} + {3}{4} +}{ % Transversal edges + {1}{1} + {3}{4} +} + \end{minipage} + \end{minipage}% +\end{center} + +\DescribeMacro{edges phantom} +This flag allows for all edges to be hidden using the \texttt{phantom} command. Simply wraps the edge drawing macros with a \texttt{phantom} command. The default is false. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdBrick[ % Options + degree=5, + edges phantom +]{ % Upper non-transversal edges + {1}{2} + {2}{5} +}{ % Lower non-transversal edges + {1}{2} + {3}{4} +}{ % Transversal edges + {1}{1} + {3}{4} +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} +\pmdBrick[ % Options + degree=5, + edges phantom +]{ % Upper non-transversal edges + {1}{2} + {2}{5} +}{ % Lower non-transversal edges + {1}{2} + {3}{4} +}{ % Transversal edges + {1}{1} + {3}{4} +} + \end{minipage} + \end{minipage}% +\end{center} + +\DescribeMacro{edges uncover} +allows for all edges to be uncovered in a \texttt{beamer} presentation\footnote{Make sure to use a \texttt{fragile} frame.} using the command \verb`\uncover<n->{text}`. Simply passes the slide uncover information \verb`<n->` to the embedded \texttt{uncover} command within the edge drawing macros. The default is~\texttt{1-}. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdBrick[ % Options + degree=5, + edges uncover={2,4-7,9-} +]{ % Upper non-transversal edges + {1}{2} + {2}{5} +}{ % Lower non-transversal edges + {1}{2} + {3}{4} +}{ % Transversal edges + {1}{1} + {3}{4} +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} +\pmdBrick[ % Options + degree=5, + edges uncover={2,4-7,9-} +]{ % Upper non-transversal edges + {1}{2} + {2}{5} +}{ % Lower non-transversal edges + {1}{2} + {3}{4} +}{ % Transversal edges + {1}{1} + {3}{4} +} + \end{minipage} + \end{minipage}% +\end{center} + +\subsubsection{Brace} + +\DescribeMacro{brace} +specifies instructions for the drawing of a brace with the brace keys. These are described in Section~\ref{sec: brace}. The default is no brace is drawn. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdDiagram{ + { % Brick 1 + [ % Options + degree=2, + brace={ + left=1, + right=4, + label={n} + } + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{2} + } + }{ % Brick 2 + [ % Options + degree=1 + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + } + } +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} + \end{minipage} + \end{minipage}% +\end{center} +\begin{center} +\pmdDiagram{ + { % Brick 1 + [ % Options + degree=2, + brace={ + left=1, + right=4, + label={n} + } + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{2} + } + }{ % Brick 2 + [ % Options + degree=1 + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + } + } +} +\end{center} + +\DescribeMacro{brace draw}\DescribeMacro{brace node} +passes through options to the \verb`\draw` and \verb`node` command of the brace. Must be given before the \texttt{brace} key. The default is no argument. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdDiagram{ + { % Brick 1 + [ % Options + degree=2, + brace draw=thin, + brace node={pos=0.25}, + brace={ + left=1, + right=4, + label={n} + } + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{2} + } + }{ % Brick 2 + [ % Options + degree=1 + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + } + } +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} + \end{minipage} + \end{minipage}% +\end{center} +\begin{center} +\pmdDiagram{ + { % Brick 1 + [ % Options + degree=2, + brace draw=thin, + brace node={pos=0.25}, + brace={ + left=1, + right=4, + label={n} + } + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{2} + } + }{ % Brick 2 + [ % Options + degree=1 + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + } + } +} +\end{center} + +\subsubsection{Decorations} + +\DescribeMacro{decorate before}\DescribeMacro{decorate after} +provides a hook to draw additional \texttt{tikz} elements before and after the brick is drawn. The default is empty. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdBrick[ % Options + degree=5, + decorate after={ + \draw[ + very thick, + red, + rounded corners=5pt + ] (0.6, -0.4) rectangle (1.4, 2.4); + } +]{ % Upper non-transversal edges + {1}{2} + {2}{5} +}{ % Lower non-transversal edges + {1}{2} + {3}{4} +}{ % Transversal edges + {1}{1} + {3}{4} +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} + \end{minipage} + \end{minipage}% +\end{center} +\begin{center} +\pmdBrick[ % Options + degree=5, + decorate after={ + \draw[ + very thick, + red, + rounded corners=5pt + ] (0.6, -0.4) rectangle (1.4, 2.4); + } +]{ % Upper non-transversal edges + {1}{2} + {2}{5} +}{ % Lower non-transversal edges + {1}{2} + {3}{4} +}{ % Transversal edges + {1}{1} + {3}{4} +} +\end{center} + +These hooks can also be used for more sophisticated manipulation of diagrams be inserting not just \texttt{tikz} elements but arbitrary code before and after draw a brick. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdDiagram{ + { % Brick 1 + [ % Options + degree=4 + ]{ % Upper non-transversal edges + {2}{3} + }{ % Lower non-transversal edges + {2}{3} + }{ % Transversal edges + {1}{1} + {4}{4} + } + }{ % Brick 2 + [ % Options + degree=3, + decorate before={\begin{scope}[red,shift={(1,1)},rotate=30]}, + decorate after={\end{scope}} + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{2} + {2}{3} + {3}{1} + } + } +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} + \end{minipage} + \end{minipage}% +\end{center} +\begin{center} +\pmdDiagram{ + { % Brick 1 + [ % Options + degree=4 + ]{ % Upper non-transversal edges + {2}{3} + }{ % Lower non-transversal edges + {2}{3} + }{ % Transversal edges + {1}{1} + {4}{4} + } + }{ % Brick 2 + [ % Options + degree=3, + decorate before={\begin{scope}[red,shift={(1,1)},rotate=30]}, + decorate after={\end{scope}} + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{2} + {2}{3} + {3}{1} + } + } +} +\end{center} + +\subsubsection{Drawing order} \label{sec: order} + +For clarity, this is the default drawing order for a brick: +\begin{enumerate} + \item \texttt{decorate before} + \item Top row of vertices + \item Bottom row of vertices + \item Upper non-transversal edges + \item Lower non-transversal edges + \item Transversal edges + \item \texttt{decorate after} +\end{enumerate} + +This order can be altered using the \texttt{edges first} and \texttt{transversals first} flags. + +For the drawing order of a diagram and product diagram, see the \texttt{decorate before} and \texttt{decorate after} keys in Section~\ref{sec: diagram/options all}. + +\subsection{Edge options} \label{sec: edge/options} + +\subsubsection{Non-transversal edge options} \label{sec: NT edge/options} + +\DescribeMacro{level} +specifies the horizontal level of a non-transversal edges. Default is one. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdBrick[ % Options + degree=5, + levels=3 +]{ % Upper non-transversal edges + [level=3]{1}{5} + [level=2]{1}{4} + [level=1]{2}{3} +}{ % Lower non-transversal edges + [level=3]{1}{5} + [level=2]{1}{4} + [level=1]{2}{3} +}{ % Transversal edges + \pmdEmpty +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} +\pmdBrick[ % Options + degree=5, + levels=3 +]{ % Upper non-transversal edges + [level=3]{1}{5} + [level=2]{1}{4} + [level=1]{2}{3} +}{ % Lower non-transversal edges + [level=3]{1}{5} + [level=2]{1}{4} + [level=1]{2}{3} +}{ % Transversal edges + \pmdEmpty +} + \end{minipage} + \end{minipage}% +\end{center} + +\DescribeMacro{height} +specifies a manually set horizontal height of a non-transversal edges. Default is to use levels. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdBrick[ % Options + degree=5 +]{ % Upper non-transversal edges + {1}{5} + [height=1.75]{1}{4} +}{ % Lower non-transversal edges + [height=1.25]{1}{5} + {1}{4} +}{ % Transversal edges + \pmdEmpty +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} +\pmdBrick[ % Options + degree=5 +]{ % Upper non-transversal edges + {1}{5} + [height=1.75]{1}{4} +}{ % Lower non-transversal edges + [height=1.25]{1}{5} + {1}{4} +}{ % Transversal edges + \pmdEmpty +} + \end{minipage} + \end{minipage}% +\end{center} + +\DescribeMacro{edge draw} +passes through options to the \verb`\draw` command of the edge. The default is no argument. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdBrick[ % Options + degree=5 +]{ % Upper non-transversal edges + {1}{2} + [edge draw=red]{2}{3} + {4}{5} + }{ % Lower non-transversal edges + [edge draw=dotted]{1}{2} + {3}{4} +}{ % Transversal edges + \pmdEmpty +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} +\pmdBrick[ % Options + degree=5 +]{ % Upper non-transversal edges + {1}{2} + [edge draw=red]{2}{3} + {4}{5} +}{ % Lower non-transversal edges + [edge draw=dotted]{1}{2} + {3}{4} +}{ % Transversal edges + \pmdEmpty +} + \end{minipage} + \end{minipage}% +\end{center} + +\DescribeMacro{options} +allows for the redefinition of the command that draws the non-transversal edge. It has two arguments, the start and end \( x \)-position of the edge. The default for an upper non-transversal is +\begin{verbatim} + \draw[apply style/.expand once=\pmdraw@drawUedgesDrawOptions, + apply style/.expand once=\pmdraw@drawEdgeDrawOptions] + (#1,\pmdraw@rowSep) arc (180:270:\pmdraw{edgeHeight});% Draw left arch + \draw[apply style/.expand once=\pmdraw@drawUedgesDrawOptions, + apply style/.expand once=\pmdraw@drawEdgeDrawOptions] + (#1+\pmdraw{edgeHeight},\pmdraw@rowSep-\pmdraw{edgeHeight}) + -- (#2-\pmdraw{edgeHeight},\pmdraw@rowSep-\pmdraw{edgeHeight}); + % Draw straight line + \draw[apply style/.expand once=\pmdraw@drawUedgesDrawOptions, + apply style/.expand once=\pmdraw@drawEdgeDrawOptions] + (#2-\pmdraw{edgeHeight},\pmdraw@rowSep-\pmdraw{edgeHeight}) + arc (270:360:\pmdraw{edgeHeight});% Draw right arc + \renewcommand{\pmdraw@drawEdgeDrawOptions}{}% Reset draw options for edge +\end{verbatim} +and for a lower non-transversal +\begin{verbatim} + \draw[apply style/.expand once=\pmdraw@drawLedgesDrawOptions, + apply style/.expand once=\pmdraw@drawEdgeDrawOptions] + (#1,0) arc (180:90:\pmdraw{edgeHeight});% Draw left arch + \draw[apply style/.expand once=\pmdraw@drawLedgesDrawOptions, + apply style/.expand once=\pmdraw@drawEdgeDrawOptions] + (#1+\pmdraw{edgeHeight},\pmdraw{edgeHeight}) + -- (#2-\pmdraw{edgeHeight},\pmdraw{edgeHeight});% Draw straight line + \draw[apply style/.expand once=\pmdraw@drawLedgesDrawOptions, + apply style/.expand once=\pmdraw@drawEdgeDrawOptions] + (#2-\pmdraw{edgeHeight},\pmdraw{edgeHeight}) + arc (90:0:\pmdraw{edgeHeight});% Draw right arc + \renewcommand{\pmdraw@drawEdgeDrawOptions}{}% Reset draw options for edge +\end{verbatim} +An example use is +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdBrick[ % Options + degree=5 +]{ % Upper non-transversal edges + {1}{2} + {2}{5} +}{ % Lower non-transversal edges + [options={ + \draw[blue, very thick] (#1,0) -- (#2,0); + }]{1}{2} + {3}{4} +}{ % Transversal edges + {1}{1} + {3}{4} +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} + \end{minipage} + \end{minipage}% +\end{center} +\begin{center} +\pmdBrick[ % Options + degree=5 +]{ % Upper non-transversal edges + {1}{2} + {2}{5} +}{ % Lower non-transversal edges + [options={ + \draw[blue, very thick] (#1,0) -- (#2,0); + }]{1}{2} + {3}{4} +}{ % Transversal edges + {1}{1} + {3}{4} +} +\end{center} + +\DescribeMacro{phantom} +This flag allows for the edge to be hidden using the \texttt{phantom} command. Simply wraps the edge drawing macros with a \texttt{phantom} command. The default is false. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdBrick[ % Options + degree=5 +]{ % Upper non-transversal edges + [phantom]{1}{2} + {2}{5} +}{ % Lower non-transversal edges + [phantom]{1}{2} + {3}{4} +}{ % Transversal edges + {1}{1} + {3}{4} +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} +\pmdBrick[ % Options + degree=5 +]{ % Upper non-transversal edges + [phantom]{1}{2} + {2}{5} +}{ % Lower non-transversal edges + [phantom]{1}{2} + {3}{4} +}{ % Transversal edges + {1}{1} + {3}{4} +} + \end{minipage} + \end{minipage}% +\end{center} + +\DescribeMacro{uncover} +allows for that edge to be uncovered in a \texttt{beamer} presentation\footnote{Make sure to use a \texttt{fragile} frame.} using the command \verb`\uncover<n->{text}`. Simply passes the slide uncover information \verb`<n->` to the embedded \texttt{uncover} command within the edge drawing macros. This uncover is nested inside the \texttt{edges uncover} and hence the limitations of nested uncovers are present here. For example, an individual edge will not uncover until the \texttt{edges uncover} has been uncovered. In such instances only use individual uncovers for each edge. The default is~\texttt{1-}. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdBrick[ % Options + degree=5 +]{ % Upper non-transversal edges + [uncover={2,4-7,9-}]{1}{2} + {2}{5} +}{ % Lower non-transversal edges + [uncover={3-}]{1}{2} + {3}{4} +}{ % Transversal edges + {1}{1} + {3}{4} +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} +\pmdBrick[ % Options + degree=5 +]{ % Upper non-transversal edges + [uncover={2,4-7,9-}]{1}{2} + {2}{5} +}{ % Lower non-transversal edges + [uncover={3-}]{1}{2} + {3}{4} +}{ % Transversal edges + {1}{1} + {3}{4} +} + \end{minipage} + \end{minipage}% +\end{center} + +\subsubsection{Transversal edge options} \label{sec: T edge/options} + +\DescribeMacro{height} +draws transversal edges with a horizontal component and specifies the manually set horizontal height of the transversal edges. Default is to use non-horizontal transversal edges. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdDiagram{ + { % Brick 1 + [ % Options + degree top=5, + degree bottom=6 + ]{ % Upper non-transversal edges + {2}{3} + {4}{5} + }{ % Lower non-transversal edges + {3}{4} + {5}{6} + }{ % Transversal edges + [height=1]{10}{2} + {1}{1} + } + }{ % Brick 2 + [ % Options + degree top=3, + blank bottom=1, + degree bottom=2 + ]{ % Upper non-transversal edges + {1}{2} + }{ % Lower non-transversal edges + {2}{3} + }{ % Transversal edges + \pmdEmpty + } + } +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} + \end{minipage} + \end{minipage}% +\end{center} +\begin{center} +\pmdDiagram{ + { % Brick 1 + [ % Options + degree top=5, + degree bottom=6 + ]{ % Upper non-transversal edges + {2}{3} + {4}{5} + }{ % Lower non-transversal edges + {3}{4} + {5}{6} + }{ % Transversal edges + [height=1]{10}{2} + {1}{1} + } + }{ % Brick 2 + [ % Options + degree top=3, + blank bottom=1, + degree bottom=2 + ]{ % Upper non-transversal edges + {1}{2} + }{ % Lower non-transversal edges + {2}{3} + }{ % Transversal edges + \pmdEmpty + } + } +} +\end{center} + +\DescribeMacro{edge draw} +passes through options to the \verb`\draw` command of the edge. The default is no argument. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdBrick[ % Options + degree=5 +]{ % Upper non-transversal edges + {1}{2} + }{ % Lower non-transversal edges + {4}{5} + {3}{4} +}{ % Transversal edges + [edge draw=red]{1}{1} +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} +\pmdBrick[ % Options + degree=5 +]{ % Upper non-transversal edges + {1}{2} +}{ % Lower non-transversal edges + {4}{5} + {3}{4} +}{ % Transversal edges + [edge draw=red]{1}{1} + {3}{2} + [edge draw=dashed]{4}{5} +} + \end{minipage} + \end{minipage}% +\end{center} + +\DescribeMacro{options} +allows for the redefinition of the command that draws the transversal edge. It has two arguments, the \( x \)-position of the edge in the top row of vertices and the \( x \)-position of the edge in the bottom row of vertices. The default is +\begin{verbatim} + \ifnum\pmdraw@ifTedgeHorizontal=0% If drawing a straight line edge + \draw[apply style/.expand once=\pmdraw@drawTedgesDrawOptions, + apply style/.expand once=\pmdraw@drawEdgeDrawOptions] + (#1,\pmdraw@rowSep) -- (#2,0);% Draw straight line + \else% If transversal edge is drawn horizontally + \ifnum#1>#2% If edge goes from top right to bottom left + \draw[apply style/.expand once=\pmdraw@drawTedgesDrawOptions, + apply style/.expand once=\pmdraw@drawEdgeDrawOptions] (#2,0) arc + (180:90:\pmdraw{Tlevel});% Draw bottom arch + \draw[apply style/.expand once=\pmdraw@drawTedgesDrawOptions, + apply style/.expand once=\pmdraw@drawEdgeDrawOptions] + (#2+\pmdraw{Tlevel},\pmdraw{Tlevel}) -- + (#1-\pmdraw@rowSep+\pmdraw{Tlevel}, \pmdraw{Tlevel});% Draw straight line + \draw[apply style/.expand once=\pmdraw@drawTedgesDrawOptions, + apply style/.expand once=\pmdraw@drawEdgeDrawOptions] + (#1-\pmdraw@rowSep+\pmdraw{Tlevel},\pmdraw{Tlevel}) arc + (270:360:{\pmdraw@rowSep-\pmdraw{Tlevel}});% Draw top arc + \else% If edge goes from top left to bottom right + \draw[apply style/.expand once=\pmdraw@drawTedgesDrawOptions, + apply style/.expand once=\pmdraw@drawEdgeDrawOptions] + (#2,0) arc (0:90:\pmdraw{Tlevel});% Draw bottom arch + \draw[apply style/.expand once=\pmdraw@drawTedgesDrawOptions, + apply style/.expand once=\pmdraw@drawEdgeDrawOptions] + (#2-\pmdraw{Tlevel},\pmdraw{Tlevel}) -- + (#1+\pmdraw@rowSep-\pmdraw{Tlevel}, \pmdraw{Tlevel});% Draw straight line + \draw[apply style/.expand once=\pmdraw@drawTedgesDrawOptions, + apply style/.expand once=\pmdraw@drawEdgeDrawOptions] + (#1+\pmdraw@rowSep-\pmdraw{Tlevel},\pmdraw{Tlevel}) arc + (270:180:{\pmdraw@rowSep-\pmdraw{Tlevel}});% Draw top arc + \fi% + \renewcommand{\pmdraw@ifTedgeHorizontal}{0}% Reset flag to default + \fi% + \renewcommand{\pmdraw@drawEdgeDrawOptions}{}% Reset draw options for edge +\end{verbatim} +An example use is +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdDiagram{ + { % Brick 1 + [ % Options + degree top=5, + degree bottom=6 + ]{ % Upper non-transversal edges + {2}{3} + {4}{5} + }{ % Lower non-transversal edges + {3}{4} + {5}{6} + }{ % Transversal edges + [options={ + \draw (#2,0) -- (#2+1,1); % Draw bottom line + \draw (#2+1,1) -- (#1-1, 1); % Draw straight line + \draw (#1-1,1) -- (#1,2); % Draw top line + }]{10}{2} + {1}{1} + } + }{ % Brick 2 + [ % Options + degree top=3, + blank bottom=1, + degree bottom=2 + ]{ % Upper non-transversal edges + {1}{2} + }{ % Lower non-transversal edges + {2}{3} + }{ % Transversal edges + \pmdEmpty + } + } +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} + \end{minipage} + \end{minipage}% +\end{center} +\begin{center} +\pmdDiagram{ + { % Brick 1 + [ % Options + degree top=5, + degree bottom=6 + ]{ % Upper non-transversal edges + {2}{3} + {4}{5} + }{ % Lower non-transversal edges + {3}{4} + {5}{6} + }{ % Transversal edges + [options={ + \draw (#2,0) -- (#2+1,1); % Draw bottom line + \draw (#2+1,1) -- (#1-1, 1); % Draw straight line + \draw (#1-1,1) -- (#1,2); % Draw top line + }]{10}{2} + {1}{1} + } + }{ % Brick 2 + [ % Options + degree top=3, + blank bottom=1, + degree bottom=2 + ]{ % Upper non-transversal edges + {1}{2} + }{ % Lower non-transversal edges + {2}{3} + }{ % Transversal edges + \pmdEmpty + } + } +} +\end{center} + +\DescribeMacro{phantom} +This flag allows for the edge to be hidden using the \texttt{phantom} command. Simply wraps the edge drawing macros with a \texttt{phantom} command. The default is false. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdBrick[ % Options + degree=5 +]{ % Upper non-transversal edges + {1}{2} + {2}{5} +}{ % Lower non-transversal edges + {1}{2} + {3}{4} +}{ % Transversal edges + [phantom]{1}{1} + {3}{4} +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} +\pmdBrick[ % Options + degree=5 +]{ % Upper non-transversal edges + {1}{2} + {2}{5} +}{ % Lower non-transversal edges + {1}{2} + {3}{4} +}{ % Transversal edges + [phantom]{1}{1} + {3}{4} +} + \end{minipage} + \end{minipage}% +\end{center} + +\DescribeMacro{uncover} +allows for that edge to be uncovered in a \texttt{beamer} presentation\footnote{Make sure to use a \texttt{fragile} frame.} using the command \verb`\uncover<n->{text}`. Simply passes the slide uncover information \verb`<n->` to the embedded \texttt{uncover} command within the edge drawing macros. This uncover is nested inside the \texttt{edges uncover} and hence the limitations of nested uncovers are present here. For example, an individual edge will not uncover until the \texttt{edges uncover} has been uncovered. In such instances only use individual uncovers for each edge. The default is~\texttt{1-}. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdBrick[ % Options + degree=5 +]{ % Upper non-transversal edges + {1}{2} + {2}{5} +}{ % Lower non-transversal edges + {1}{2} + {3}{4} +}{ % Transversal edges + [uncover={2,4-7,9-}]{1}{1} + {3}{4} +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} +\pmdBrick[ % Options + degree=5 +]{ % Upper non-transversal edges + {1}{2} + {2}{5} +}{ % Lower non-transversal edges + {1}{2} + {3}{4} +}{ % Transversal edges + [uncover={2,4-7,9-}]{1}{1} + {3}{4} +} + \end{minipage} + \end{minipage}% +\end{center} + +\subsection{Brace} \label{sec: brace} + +\DescribeMacro{brick/brace} +As part of a diagram, it may be useful to draw a brace. The options of a brace are as follows: + +\DescribeMacro{left}\DescribeMacro{right} +specifies the \( x \)-position of the start/left and end/right of the brace. Both must be provided. + +\DescribeMacro{label} +specifies the label to be printed with the brace. Default is empty. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdDiagram{ + { % Brick 1 + [ % Options + degree=2, + brace={ + left=1, + right=4, + label={n} + } + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{2} + } + }{ % Brick 2 + [ % Options + degree=1 + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + } + } +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} + \end{minipage} + \end{minipage}% +\end{center} +\begin{center} +\pmdDiagram{ + { % Brick 1 + [ % Options + degree=2, + brace={ + left=1, + right=4, + label={n} + } + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{2} + } + }{ % Brick 2 + [ % Options + degree=1 + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + } + } +} +\end{center} + +\DescribeMacro{above} +The \texttt{above} flag draws the brace above the diagram. Default is below. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdDiagram{ + { % Brick 1 + [ % Options + degree=2, + brace={ + left=1, + right=4, + label={n}, + above + } + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{2} + } + }{ % Brick 2 + [ % Options + degree=1 + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + } + } +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} + \end{minipage} + \end{minipage}% +\end{center} +\begin{center} +\pmdDiagram{ + { % Brick 1 + [ % Options + degree=2, + brace={ + left=1, + right=4, + label={n}, + above + } + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{2} + } + }{ % Brick 2 + [ % Options + degree=1 + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + } + } +} +\end{center} + +\DescribeMacro{options} +allows for the redefinition of the command that draws the brace. It has three arguments, the \( x \)-position start and end of the brace, as well as the label of the brace. The default is +\begin{verbatim} + \ifnum\pmdraw@ifProdDiag=1 % If drawing a product diagram + % or if placing brace above diagram + \draw[ + very thick, + decorate, + decoration={calligraphic brace,amplitude=6pt}, + apply style/.expand once=\pmdraw@drawBraceDrawOptions + ] (#1-0.17,\pmdraw@rowSep+0.5) -- (#2+0.17,\pmdraw@rowSep+0.5) + node[ + pos=0.5, + above=6pt, + apply style/.expand once=\pmdraw@drawBraceNodeOptions + ] {\(#3\)}; % Draw brace on top of diagram + \else % If not drawing a product diagram or if placing brace below diagram + \draw[ + very thick, + decorate, + decoration={calligraphic brace,mirror,amplitude=6pt}, + apply style/.expand once=\pmdraw@drawBraceDrawOptions + ] (#1-0.17,-0.5) -- (#2+0.17,-0.5) + node[ + pos=0.5, + below=6pt, + apply style/.expand once=\pmdraw@drawBraceNodeOptions + ] {\(#3\)}; % Draw brace on bottom of diagram + \fi% +\end{verbatim} +it should be noted that the flag \verb`\pmdraw@ifProdDiag` is both used for when drawing a product diagram but also when placing the brace above the diagram as this clearly must be the default for the top diagram in a product diagram. +An example use is +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdDiagram{ + { % Brick 1 + [ % Options + degree=2, + brace={ + left=1, + right=4, + label={n}, + options={ + \draw[ + red, + very thick, + decorate, + decoration={calligraphic brace,mirror,amplitude=6pt} + ] (#1-0.17,-0.5) -- (#2+0.17,-0.5) + node[pos=0.25,below=6pt]{\(#3\)}; + } + } + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{2} + } + }{ % Brick 2 + [ % Options + degree=1 + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + } + } +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} + \end{minipage} + \end{minipage}% +\end{center} +\begin{center} +\pmdDiagram{ + { % Brick 1 + [ % Options + degree=2, + brace={ + left=1, + right=4, + label={n}, + options={ + \draw[ + red, + very thick, + decorate, + decoration={calligraphic brace,mirror,amplitude=6pt} + ] (#1-0.17,-0.5) -- (#2+0.17,-0.5) + node[pos=0.25,below=6pt]{\(#3\)}; + } + } + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{2} + } + }{ % Brick 2 + [ % Options + degree=1 + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + } + } +} +\end{center} + +\subsection{Diagram options} \label{sec: diagram/options} + +\subsubsection{For all (product) diagrams} \label{sec: diagram/options all} + +The following options can be used for both diagrams (\verb`\pmdDiagram`) and product diagrams (\verb`\pmdProduct`). + +\DescribeMacro{row sep} +same as \texttt{row sep} option in bricks but applied to all bricks within (product) diagram. + +\DescribeMacro{tikz} +passes through options to \texttt{tikz} environment. Specifically, the options in \verb`\begin{tikzpicture}[<options>]`. The default is no argument. However there are some default options passed to \texttt{tikz} automatically. These are an adjustment to the \texttt{baseline} depending on the current typesetting mode and a \texttt{grid} key if the grid is activated. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdDiagram[ % Options + tikz={scale=2} +]{ + { % Brick 1 + [ % Options + degree=2, + brace={ + left=1, + right=4, + label={n} + } + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{2} + } + }{ % Brick 2 + [ % Options + degree=1 + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + } + } +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} + \end{minipage} + \end{minipage}% +\end{center} +\begin{center} +\pmdDiagram[ % Options + tikz={scale=2} +]{ + { % Brick 1 + [ % Options + degree=2, + brace={ + left=1, + right=4, + label={n} + } + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{2} + } + }{ % Brick 2 + [ % Options + degree=1 + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + } + } +} +\end{center} + +\DescribeMacro{dots options} +allows for the redefinition of the command that draws dots between bricks. It has two arguments, the \( x \) and \( y \)-position of the dots. The default is +\begin{verbatim} + \draw[apply style/.expand once=\pmdraw@drawDotsDrawOptions] + (#1,#2) node[apply style/.expand once=\pmdraw@drawDotsNodeOptions] {\(\dots\)}; +\end{verbatim} +An example use is +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdDiagram[ % Options + dots options={ + \draw[red] (#1,#2) node {\(\dots\dots\)}; + } +]{ + { % Brick 1 + [ % Options + degree=2, + brace={ + left=1, + right=5, + label={n} + } + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{2} + } + }{ % Brick 2 + [ % Options + degree=1, + blank top=1, + blank bottom=1 + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {2}{2} + } + } +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} + \end{minipage} + \end{minipage}% +\end{center} +\begin{center} +\pmdDiagram[ % Options + dots options={ + \draw[red] (#1,#2) node {\(\dots\dots\)}; + } +]{ + { % Brick 1 + [ % Options + degree=2, + brace={ + left=1, + right=5, + label={n} + } + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{2} + } + }{ % Brick 2 + [ % Options + degree=1, + blank top=1, + blank bottom=1 + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {2}{2} + } + } +} +\end{center} + +\DescribeMacro{grid} +As it can get confusing where things are drawn and the different coordinate scopes between all the bricks and diagrams, the \texttt{grid} flag draws the base coordinate grid that the first drawn brick is based on. This should help with all coordinate related inquiries. Default is no grid. + +It should be noted that the \texttt{grid} key is not available for \verb`\pmdBrick` and \verb`\pmdDiagram` must be used instead when needing a grid for a single brick only. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdDiagram[ % Options + grid +]{ + { % Brick 1 + [ % Options + degree top=5, + degree bottom=6, + ]{ % Upper non-transversal edges + {2}{3} + {4}{5} + }{ % Lower non-transversal edges + {3}{4} + {5}{6} + }{ % Transversal edges + [height=1]{10}{2} + {1}{1} + } + }{ % Brick 2 + [ % Options + degree top=3, + blank bottom=1, + degree bottom= + ]{ % Upper non-transversal edges + {1}{2} + }{ % Lower non-transversal edges + {2}{3} + }{ % Transversal edges + \pmdEmpty + } + } +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} + \end{minipage} + \end{minipage}% +\end{center} +\begin{center} +\pmdDiagram[ % Options + grid +]{ + { % Brick 1 + [ % Options + degree top=5, + degree bottom=6 + ]{ % Upper non-transversal edges + {2}{3} + {4}{5} + }{ % Lower non-transversal edges + {3}{4} + {5}{6} + }{ % Transversal edges + [height=1]{10}{2} + {1}{1} + } + }{ % Brick 2 + [ % Options + degree top=3, + blank bottom=1, + degree bottom=2 + ]{ % Upper non-transversal edges + {1}{2} + }{ % Lower non-transversal edges + {2}{3} + }{ % Transversal edges + \pmdEmpty + } + } +} +\end{center} + +\DescribeMacro{decorate before}\DescribeMacro{decorate after} +same as \texttt{decorate before} and \texttt{decorate after} in bricks but these are drawn before (after) all bricks are drawn. For clarity, this is default drawing order for a diagram: +\begin{enumerate} + \item \texttt{diagram/decorate before} + \item Brick loop: + \begin{enumerate} + \item \texttt{brick/decorate before} + \item Draws brick + \item \texttt{brick/decorate after} + \end{enumerate} + \item \texttt{diagram/decorate after} +\end{enumerate} +And this is default drawing order for a product diagram: +\begin{enumerate} + \item \texttt{diagram/decorate before} + \item Draws added edges + \item Top diagram: + \begin{enumerate} + \item Brick loop: + \begin{enumerate} + \item \texttt{brick/decorate before} + \item Draws brick + \item \texttt{brick/decorate after} + \end{enumerate} + \end{enumerate} + \item Bottom diagram: + \begin{enumerate} + \item Brick loop: + \begin{enumerate} + \item \texttt{brick/decorate before} + \item Draws brick + \item \texttt{brick/decorate after} + \end{enumerate} + \end{enumerate} + \item \texttt{diagram/decorate after} +\end{enumerate} + +For the drawing order of a brick see Section~\ref{sec: order}. + +\subsubsection{For product diagrams only} \label{sec: prod only} + +The following options can only be used for product diagrams (\verb`\pmdProduct`). + +\DescribeMacro{diagram sep} +specifies the vertical separation between the bottom row of vertices in top diagram and the top row of vertices in bottom diagram. Also controls the length of the added edges. Default is one. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdProduct[ % Options + diagram sep=2 +]{ % Added edges + {1}{5} +}{ % Top diagram + { % Brick 1 + [ % Options + degree=5 + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{2} + {3}{3} + {4}{4} + {5}{5} + } + } +}{ % Bottom diagram + { % Brick 1 + [ % Options + degree=5 + ]{ % Upper non-transversal edges + {2}{3} + {4}{5} + }{ % Lower non-transversal edges + {2}{3} + {4}{5} + }{ % Transversal edges + {1}{1} + } + } +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} + \end{minipage} + \end{minipage}% +\end{center} +\begin{center} +\pmdProduct[ % Options + diagram sep=2 +]{ % Added edges + {1}{5} +}{ % Top diagram + { % Brick 1 + [ % Options + degree=5 + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{2} + {3}{3} + {4}{4} + {5}{5} + } + } +}{ % Bottom diagram + { % Brick 1 + [ % Options + degree=5 + ]{ % Upper non-transversal edges + {2}{3} + {4}{5} + }{ % Lower non-transversal edges + {2}{3} + {4}{5} + }{ % Transversal edges + {1}{1} + } + } +} +\end{center} + +\DescribeMacro{vertex sep} +increases the vertical separation between the bottom row of vertices in top diagram and the top row of vertices in bottom diagram without altering the length of the added edges. Useful for things when adjusting the \texttt{row sep} of the bottom diagram for example. Default is zero. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdProduct[ % Options + vertex sep=1 +]{ % Added edges + {1}{5} +}{ % Top diagram + { % Brick 1 + [ % Options + degree=5 + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{2} + {3}{3} + {4}{4} + {5}{5} + } + } +}{ % Bottom diagram + { % Brick 1 + [ % Options + degree=5, + row sep=3 + ]{ % Upper non-transversal edges + {2}{3} + {4}{5} + }{ % Lower non-transversal edges + {2}{3} + {4}{5} + }{ % Transversal edges + {1}{1} + } + } +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} + \end{minipage} + \end{minipage}% +\end{center} +\begin{center} +\pmdProduct[ % Options + vertex sep=1 +]{ % Added edges + {1}{5} +}{ % Top diagram + { % Brick 1 + [ % Options + degree=5 + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{2} + {3}{3} + {4}{4} + {5}{5} + } + } +}{ % Bottom diagram + { % Brick 1 + [ % Options + degree=5, + row sep=3 + ]{ % Upper non-transversal edges + {2}{3} + {4}{5} + }{ % Lower non-transversal edges + {2}{3} + {4}{5} + }{ % Transversal edges + {1}{1} + } + } +} +\end{center} + +\DescribeMacro{edges added} +passes through options to the \verb`\draw` command of the added edges. The default is no argument. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdProduct[ % Options + edges added={red,very thick} +]{ % Added edges + {1}{5} +}{ % Top diagram + { % Brick 1 + [ % Options + degree=5 + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{2} + {3}{3} + {4}{4} + {5}{5} + } + } +}{ % Bottom diagram + { % Brick 1 + [ % Options + degree=5 + ]{ % Upper non-transversal edges + {2}{3} + {4}{5} + }{ % Lower non-transversal edges + {2}{3} + {4}{5} + }{ % Transversal edges + {1}{1} + } + } +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} + \end{minipage} + \end{minipage}% +\end{center} +\begin{center} +\pmdProduct[ % Options + edges added={red,very thick} +]{ % Added edges + {1}{5} +}{ % Top diagram + { % Brick 1 + [ % Options + degree=5 + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{2} + {3}{3} + {4}{4} + {5}{5} + } + } +}{ % Bottom diagram + { % Brick 1 + [ % Options + degree=5 + ]{ % Upper non-transversal edges + {2}{3} + {4}{5} + }{ % Lower non-transversal edges + {2}{3} + {4}{5} + }{ % Transversal edges + {1}{1} + } + } +} +\end{center} + +\DescribeMacro{edges added phantom} +This flag allows for the added edges to be hidden using the \texttt{phantom} command. Simply wraps the edge drawing macros with a \texttt{phantom} command. The default is false. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdProduct[ % Options + edges added phantom +]{ % Added edges + {1}{5} +}{ % Top diagram + { % Brick 1 + [ % Options + degree=5 + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{2} + {3}{3} + {4}{4} + {5}{5} + } + } +}{ % Bottom diagram + { % Brick 1 + [ % Options + degree=5 + ]{ % Upper non-transversal edges + {2}{3} + {4}{5} + }{ % Lower non-transversal edges + {2}{3} + {4}{5} + }{ % Transversal edges + {1}{1} + } + } +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} + \end{minipage} + \end{minipage}% +\end{center} +\begin{center} +\pmdProduct[ % Options + edges added phantom +]{ % Added edges + {1}{5} +}{ % Top diagram + { % Brick 1 + [ % Options + degree=5 + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{2} + {3}{3} + {4}{4} + {5}{5} + } + } +}{ % Bottom diagram + { % Brick 1 + [ % Options + degree=5 + ]{ % Upper non-transversal edges + {2}{3} + {4}{5} + }{ % Lower non-transversal edges + {2}{3} + {4}{5} + }{ % Transversal edges + {1}{1} + } + } +} +\end{center} + +\DescribeMacro{edges added uncover} +allows for the added edges to be uncovered in a \texttt{beamer} presentation\footnote{Make sure to use a \texttt{fragile} frame.} using the command \verb`\uncover<n->{text}`. Simply passes the slide uncover information \verb`<n->` to the embedded \texttt{uncover} command within the added edge drawing macros. The default is~\texttt{1-}. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdProduct[ % Options + edges added uncover={2,4-7,9-} +]{ % Added edges + {1}{5} +}{ % Top diagram + { % Brick 1 + [ % Options + degree=5 + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{2} + {3}{3} + {4}{4} + {5}{5} + } + } +}{ % Bottom diagram + { % Brick 1 + [ % Options + degree=5 + ]{ % Upper non-transversal edges + {2}{3} + {4}{5} + }{ % Lower non-transversal edges + {2}{3} + {4}{5} + }{ % Transversal edges + {1}{1} + } + } +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} + \end{minipage} + \end{minipage}% +\end{center} +\begin{center} +\pmdProduct[ % Options + edges added uncover={2,4-7,9-} +]{ % Added edges + {1}{5} +}{ % Top diagram + { % Brick 1 + [ % Options + degree=5 + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{2} + {3}{3} + {4}{4} + {5}{5} + } + } +}{ % Bottom diagram + { % Brick 1 + [ % Options + degree=5 + ]{ % Upper non-transversal edges + {2}{3} + {4}{5} + }{ % Lower non-transversal edges + {2}{3} + {4}{5} + }{ % Transversal edges + {1}{1} + } + } +} +\end{center} + +\section{Future features/work} + +I have attempted to make most use cases easy to use with dedicated functionality that does not require significant \LaTeX\ knowledge whilst at the same time provide more advanced interfaces to allow for hopefully almost complete customisability for those who put in the effort. + +Having said that, please do let me know if there are features or improvements you will like to see added. + +The following are some of the aims for the future for this package: +\begin{enumerate} + \item Fix bugs. + \item Add warning and error messages to log. + \item Allow all brick keys to work as diagram keys that apply to all bricks in a diagram. This will require setting up a flag for each key so that the diagram key sets the brick key but the brick key is not reset after drawing the first brick. This process also will need to be able to handle when a single brick has a custom special different key value and that this is reset to the digram key value and not the global default key value. + \item Allow appropriate diagram keys to work as brick keys. Notably the \texttt{grid} key. + \item The creation of user profiles that allows for fast and efficient setting of default key values that are different to the package defaults. Hence within a diagram, there can be a number of different diagram styles that can be accessed with one command. That is, in the options for a diagram, have this profile key. + \item Have global settings so that all diagrams in a document have the specified options. + \item Allow for adjusting the horizontal spacing of vertices. Need to think about making that a simple scale factor so that integer interface for edge positions is the same but then hooks will have very messy coordinates or keep it as absolute coordinates with messy edges. Alternatively, do both, allowing the user to choose which option to do and somehow distinguish between the two in the background. + \item Create \texttt{pmdMirror} command that mirrors all upper non-transversals into lower non-transversals. + \item Create \texttt{invert} key for bricks, diagrams and product diagrams that inverts everything. Probably easiest done with a \texttt{scope} environment around everything and \texttt{yscale=-1}. + \item For product diagram, have interface where you input diagram instead of bricks so that you have access to diagram options. + \item Create a transversal edge key \texttt{identity} so that all edges in between the two values are straight vertical edges. Thus eliminating the need to write out each edge manually. + \item Create \texttt{shift} key for edges that shifts horizontal position. + \item Decouple the uncover of labels from \texttt{vertices top uncover}/\texttt{vertices bottom uncover}. + \item Decouple the phantom of labels from \texttt{vertices top phantom}/\texttt{vertices bottom phantom}. + \item For all of the keys in Section~\ref{sec: prod only}, create a top and bottom version to be used in \texttt{pmdProductTriple}. +\end{enumerate} + +\section{Examples} + +This section is simply a collection of example diagrams. The code for them can be found in the \texttt{examples} folder. Perhaps you will find them useful as a starting point for your diagrams or to see what this package is capable of. + +\usetikzlibrary{patterns} + +\foreach \example in {1,...,25}{ + \paragraph{Example~\example} + \begin{center} + \input{examples/example-\example} + \end{center} +} + +\end{document}
\ No newline at end of file diff --git a/graphics/pgf/contrib/polyomino/README.md b/graphics/pgf/contrib/polyomino/README.md new file mode 100644 index 0000000000..7f3c8023ad --- /dev/null +++ b/graphics/pgf/contrib/polyomino/README.md @@ -0,0 +1,25 @@ +# `polyomino` + +## Polyominoes using Ti*k*Z and LaTeX3 + +Version 1.0 (2024/08/01) + +This package is based on the package [Ti*k*Z](https://ctan.org/pkg/pgf) and can be used to draw polyominoes. It is possible to define custom styles, pics and grids. + +%% README.md +%% Copyright 2024 Matthias Floré +% +% This work may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3c +% 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.3c 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 Matthias Floré. +% +% This work consists of the files polyomino.pdf, polyomino.sty, +% polyomino.tex and README.md.
\ No newline at end of file diff --git a/graphics/pgf/contrib/polyomino/polyomino.pdf b/graphics/pgf/contrib/polyomino/polyomino.pdf Binary files differnew file mode 100644 index 0000000000..597c00c4db --- /dev/null +++ b/graphics/pgf/contrib/polyomino/polyomino.pdf diff --git a/graphics/pgf/contrib/polyomino/polyomino.sty b/graphics/pgf/contrib/polyomino/polyomino.sty new file mode 100644 index 0000000000..7a85590118 --- /dev/null +++ b/graphics/pgf/contrib/polyomino/polyomino.sty @@ -0,0 +1,286 @@ +%% polyomino.sty +%% Copyright 2024 Matthias Floré +% +% This work may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3c +% 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.3c 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 Matthias Floré. +% +% This work consists of the files polyomino.pdf, polyomino.sty, +% polyomino.tex and README.md. +\NeedsTeXFormat{LaTeX2e} +\RequirePackage{tikz} +\ProvidesExplPackage{polyomino}{2024/08/01}{1.0}{Polyominoes using TikZ and LaTeX3} + +%%> \subsection{Variables and variants} + +\bool_new:N \l__polyomino_grid_bool +\bool_new:N \l__polyomino_pic_bool + +\int_new:N \l__polyomino_col_int +\int_new:N \l__polyomino_dir_int +\int_new:N \l__polyomino_max_int +\int_new:N \l__polyomino_row_int +\int_new:N \l__polyomino_x_int +\int_new:N \l__polyomino_y_int + +\seq_new:N \l__polyomino_add_seq +\seq_new:N \l__polyomino_cols_seq + +\tl_new:N \l__polyomino_path_tl +\tl_new:N \l__polyomino_pic_tl + +\cs_generate_variant:Nn \tl_map_inline:nn { en } + +%%> \subsection{Pgfkeys} + +\pgfkeys + { + / polyomino /. is~family , + / polyomino /. search~also = / polyomino / p_2 , + / polyomino , + at /. initial = { ( 0 , 0 ) } , + empty~cell /. initial = . , + grid /. code = \bool_set:Nn \l__polyomino_grid_bool { \cs:w c_#1_bool \cs_end: } , + grid /. default = true , + grid = false , + grid~style /. style = { grid_style /. style = {#1} } , + grid_style /. style = {} , + row~sep /. initial = { , } , + } + +\pgfkeys + {%a separate key family so that the second argument of the key p only accepts keys which apply to a separate polyomino + / polyomino / p_2 /. is~family , + / polyomino / p_2 , + connected /. code = \bool_set_false:N \l__polyomino_pic_bool , + connected /. value~forbidden , + discrete /. code = \bool_set_true:N \l__polyomino_pic_bool , + discrete /. value~forbidden , + p /. style~2~args = { #1__style /. style = {#2} } ,%2 underscores to avoid the same name as for example the key style_style + pic /. code = + { + \bool_set_true:N \l__polyomino_pic_bool + \tl_set:Nn \l__polyomino_pic_tl {#1} + } , + style /. style = { style_style /. style = {#1} } , + style_style /. style = {} , + } + +%%> \subsection{The command \textbackslash polyomino} + +\NewDocumentCommand \polyomino { O {} m } + { + {%note the double braces {{...}} so that the contents is in a group and in particular, \pgfkeys is applied locally + \pgfkeys { / polyomino , #1 } + \int_zero:N \l__polyomino_col_int + \int_set:Nn \l__polyomino_row_int { 1 } + \seq_clear:N \l__polyomino_cols_seq + \tl_map_inline:en {#2} + %it is convenient that this ignores spaces in #2 + %e argument specifier for the case that #2 is given by a command or contains a command + { + \tl_if_eq:neTF {##1} { \pgfkeysvalueof { / polyomino / row~sep } } + { + \seq_put_right:NV \l__polyomino_cols_seq \l__polyomino_col_int + \int_incr:N \l__polyomino_row_int + \int_zero:N \l__polyomino_col_int + } + { + \int_incr:N \l__polyomino_col_int + \tl_clear_new:c { l__polyomino_\int_use:N \l__polyomino_row_int _\int_use:N \l__polyomino_col_int _tl } + \tl_if_eq:neF {##1} { \pgfkeysvalueof { / polyomino / empty~cell } } + { \tl_set:cn { l__polyomino_\int_use:N \l__polyomino_row_int _\int_use:N \l__polyomino_col_int _tl } {##1} } + \tl_gclear_new:c { g__polyomino_\int_use:N \l__polyomino_row_int _\int_use:N \l__polyomino_col_int _tl } + } + } + \seq_put_right:NV \l__polyomino_cols_seq \l__polyomino_col_int + \int_set:Nn \l__polyomino_max_int { \fp_eval:n { max ( \seq_use:Nn \l__polyomino_cols_seq { , } ) } } + \seq_map_indexed_inline:Nn \l__polyomino_cols_seq + { + \tl_clear_new:c { l__polyomino_##1_0_tl } + \int_step_inline:nnn { ##2 + 1 } { \l__polyomino_max_int + 1 } + { \tl_clear_new:c { l__polyomino_##1_####1_tl } } + } + \int_step_inline:nnn { 0 } { \l__polyomino_max_int + 1 } + { + \tl_clear_new:c { l__polyomino_0_##1_tl } + \tl_clear_new:c { l__polyomino_\int_eval:n { \l__polyomino_row_int + 1 }_##1_tl } + } + \pgfkeys + { + / tikz , + shift /. expanded = { \pgfkeysvalueof { / polyomino / at } } , + shift = { ( 0 , \seq_count:N \l__polyomino_cols_seq ) } + } + \seq_map_indexed_inline:Nn \l__polyomino_cols_seq + { + \int_step_inline:nn {##2} + { + \tl_if_empty:cF { l__polyomino_##1_####1_tl } + { + {%note the double braces {{...}} so that \pgfkeys is applied locally + \pgfkeys { / polyomino / p_2 , \cs:w l__polyomino_##1_####1_tl \cs_end: __style } + \bool_if:NTF \l__polyomino_pic_bool + { \pic [ / polyomino / p_2 / style_style ] at ( ####1 - 0.5 , 0.5 - ##1 ) { code = { \l__polyomino_pic_tl } } ; } + { + \seq_clear:N \l__polyomino_add_seq + \tl_if_eq:ccF { l__polyomino_##1_####1_tl } { l__polyomino_##1_\int_eval:n { ####1 - 1 }_tl } + { + \tl_if_empty:cT { g__polyomino_##1_####1_tl } + { + \int_set:Nn \l__polyomino_dir_int { 1 } + \int_set:Nn \l__polyomino_col_int {####1} + \int_set:Nn \l__polyomino_row_int {##1} + \int_set:Nn \l__polyomino_x_int {####1} + \int_set:Nn \l__polyomino_y_int { 1 - ##1 } + \tl_build_begin:N \l__polyomino_path_tl + \fp_do_until:nn { ####1 - 1 = \l__polyomino_x_int && 1 - ##1 = \l__polyomino_y_int } + { + %concerning \tl_build_put_right:Ne \l__polyomino_path_tl, + %for example (0,0)--(0,1)--(0,2) results in a larger file size than (0,0)--(0,2) + \tl_if_eq:ccTF + { l__polyomino_##1_####1_tl } + { + l__polyomino + _\int_eval:n + { \l__polyomino_row_int + \clist_item:nn { 0 , 1 , 0 , -1 } { \l__polyomino_dir_int } } + _\int_eval:n + { \l__polyomino_col_int + \clist_item:nn { 1 , 0 , -1 , 0 } { \l__polyomino_dir_int } } + _tl + } + { + \tl_if_eq:ccTF + { l__polyomino_##1_####1_tl } + { + l__polyomino + _\int_eval:n + { \l__polyomino_row_int + \clist_item:nn { -1 , 1 , 1 , -1 } { \l__polyomino_dir_int } } + _\int_eval:n + { \l__polyomino_col_int + \clist_item:nn { 1 , 1 , -1 , -1 } { \l__polyomino_dir_int } } + _tl + } + { + \tl_build_put_right:Ne \l__polyomino_path_tl + { -- ( \int_use:N \l__polyomino_x_int , \int_use:N \l__polyomino_y_int ) } + \int_add:Nn \l__polyomino_row_int + { \clist_item:nn { -1 , 1 , 1 , -1 } { \l__polyomino_dir_int } } + \int_add:Nn \l__polyomino_col_int + { \clist_item:nn { 1 , 1 , -1 , -1 } { \l__polyomino_dir_int } } + \int_compare:nNnTF { \l__polyomino_dir_int } = { 1 } + { \int_set:Nn \l__polyomino_dir_int { 4 } } + { \int_decr:N \l__polyomino_dir_int } + } + { + \int_add:Nn \l__polyomino_row_int + { \clist_item:nn { 0 , 1 , 0 , -1 } { \l__polyomino_dir_int } } + \int_add:Nn \l__polyomino_col_int + { \clist_item:nn { 1 , 0 , -1 , 0 } { \l__polyomino_dir_int } } + } + \tl_if_empty:cTF + { g__polyomino_\int_use:N \l__polyomino_row_int _\int_use:N \l__polyomino_col_int _tl } + { + \seq_put_right:Ne \l__polyomino_add_seq + { \int_use:N \l__polyomino_row_int _\int_use:N \l__polyomino_col_int } + } + { + \bool_set_true:N \l__polyomino_pic_bool + \int_set:Nn \l__polyomino_x_int { ####1 - 1 } + \int_set:Nn \l__polyomino_y_int { 1 - ##1 } + } + } + { + \tl_build_put_right:Ne \l__polyomino_path_tl + { -- ( \int_use:N \l__polyomino_x_int , \int_use:N \l__polyomino_y_int ) } + \int_compare:nNnTF { \l__polyomino_dir_int } = { 4 } + { \int_set:Nn \l__polyomino_dir_int { 1 } } + { \int_incr:N \l__polyomino_dir_int } + } + \bool_if:NF \l__polyomino_pic_bool + { + \int_add:Nn \l__polyomino_x_int { \clist_item:nn { 1 , 0 , -1 , 0 } { \l__polyomino_dir_int } } + \int_add:Nn \l__polyomino_y_int { \clist_item:nn { 0 , -1 , 0 , 1 } { \l__polyomino_dir_int } } + } + } + \tl_build_end:N \l__polyomino_path_tl + \bool_if:NF \l__polyomino_pic_bool + { \fill [ / polyomino / p_2 / style_style ] ( ####1 - 1 , 1 - ##1 ) \l__polyomino_path_tl -- cycle ; } + } + } + \tl_gset:cn { g__polyomino_##1_####1_tl } { c } + \seq_map_inline:Nn \l__polyomino_add_seq + { \tl_gset:cn { g__polyomino_########1_tl } { c } } + } + } + } + } + } + \bool_if:NT \l__polyomino_grid_bool + { + \int_step_inline:nn { \seq_count:N \l__polyomino_cols_seq - 1 } + { + \int_zero:N \l__polyomino_col_int + \int_zero:N \l__polyomino_x_int + \int_set:Nn \l__polyomino_y_int + { \int_min:nn { \seq_item:Nn \l__polyomino_cols_seq {##1} } { \seq_item:Nn \l__polyomino_cols_seq { ##1 + 1 } } } + \int_while_do:nNnn { \l__polyomino_x_int } < { \l__polyomino_y_int } + { + \bool_do_while:nn + { + \tl_if_eq_p:cc + { l__polyomino_##1_\int_use:N \l__polyomino_x_int _tl } + { l__polyomino_\int_eval:n { ##1 + 1 }_\int_use:N \l__polyomino_x_int _tl } + && + ! \tl_if_empty_p:c { g__polyomino_##1_\int_use:N \l__polyomino_x_int _tl } + && + \int_compare_p:nNn { \l__polyomino_x_int } < { \l__polyomino_y_int + 1 } + } + { \int_incr:N \l__polyomino_x_int } + \int_compare:nNnT { \l__polyomino_x_int } > { \l__polyomino_col_int + 1 } + { + \draw [ / polyomino / grid_style ] + ( \int_use:N \l__polyomino_col_int , -##1 ) -- ( \int_use:N \l__polyomino_x_int - 1 , -##1 ) ; + } + \int_set_eq:NN \l__polyomino_col_int \l__polyomino_x_int + } + } + \int_set:Nn \l__polyomino_x_int { \seq_count:N \l__polyomino_cols_seq } + \int_step_inline:nn { \l__polyomino_max_int - 1 } + { + \int_zero:N \l__polyomino_row_int + \int_zero:N \l__polyomino_y_int + \int_while_do:nNnn { \l__polyomino_y_int } < { \l__polyomino_x_int } + { + \bool_do_while:nn + { + \tl_if_eq_p:cc + { l__polyomino_\int_use:N \l__polyomino_y_int _##1_tl } + { l__polyomino_\int_use:N \l__polyomino_y_int _\int_eval:n { ##1 + 1 }_tl } + && + ! \tl_if_empty_p:c { g__polyomino_\int_use:N \l__polyomino_y_int _##1_tl } + && + \int_compare_p:nNn { \l__polyomino_y_int } < { \l__polyomino_x_int + 1 } + && + \int_compare_p:nNn {##1} < { \seq_item:Nn \l__polyomino_cols_seq { \l__polyomino_y_int } + 0 } + } + { \int_incr:N \l__polyomino_y_int } + \int_compare:nNnT { \l__polyomino_y_int } > { \l__polyomino_row_int + 1 } + { + \draw [ / polyomino / grid_style ] + ( ##1 , -\int_use:N \l__polyomino_row_int ) -- ( ##1 , 1 - \int_use:N \l__polyomino_y_int ) ; + } + \int_set_eq:NN \l__polyomino_row_int \l__polyomino_y_int + } + } + } + } + } + +\endinput
\ No newline at end of file diff --git a/graphics/pgf/contrib/polyomino/polyomino.tex b/graphics/pgf/contrib/polyomino/polyomino.tex new file mode 100644 index 0000000000..c512cec895 --- /dev/null +++ b/graphics/pgf/contrib/polyomino/polyomino.tex @@ -0,0 +1,278 @@ +%% polyomino.tex +%% Copyright 2024 Matthias Floré +% +% This work may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3c +% 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.3c 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 Matthias Floré. +% +% This work consists of the files polyomino.pdf, polyomino.sty, +% polyomino.tex and README.md. +\documentclass[a4paper,english,dvipsnames]{ltxdoc} +\usepackage[english]{babel} +\usepackage{graphicx} +\usepackage[a4paper,left=2.25cm,right=2.25cm,top=2.5cm,bottom=2.5cm,nohead]{geometry} +\usepackage{parskip} +\usepackage{iftex} +\ifluatex +\else +\usepackage[T1]{fontenc} +\usepackage[utf8]{inputenc} +\fi +\usepackage{mathtools} +\usepackage{amssymb} +\allowdisplaybreaks +\usepackage{pdflscape} +\usepackage{polyomino} +\input{pgfmanual-en-macros.tex} +\usepackage{codehigh} +\usepackage{fancyhdr} +\pagestyle{fancy} +\renewcommand{\headrulewidth}{0pt} +\fancyhead{} +\ExplSyntaxOn +\NewExpandableDocumentCommand \repeatnumber {} + { \prg_replicate:nn { \thepage } { * } } +\ExplSyntaxOff +\fancyfoot[C]{\IfRefUndefinedExpandable{Thesourcecode}{}{\begin{tikzpicture}[scale=0.9] +\polyomino[ + grid, + p={*}{style={teal,draw=black}} +]{\repeatnumber} +\end{tikzpicture}}} +\usepackage[nottoc]{tocbibind} +\usepackage{imakeidx} +\makeindex[program=makeindex,columns=2,intoc=true] +\indexsetup{othercode={\thispagestyle{fancy}}} +\AtEndPreamble{\hypersetup{% +linktoc=all, +pdfstartview=FitH, +colorlinks=true, +linkcolor=Mahogany, +citecolor=ForestGreen, +urlcolor=MidnightBlue, +bookmarksnumbered=true, +pdftitle={The polyomino package}, +pdfauthor={Matthias Floré}, +pdfsubject={Manual}, +pdfkeywords={polyomino}}} +\setcounter{tocdepth}{2} +\setcounter{secnumdepth}{2} +\title{The \texttt{polyomino} package\\[12pt]\large Polyominoes using \tikzname{} and \LaTeX3} +\author{Matthias Floré} +\date{Version 1.0 (2024/08/01)}%\\[12pt] +\begin{document} +\maketitle +\thispagestyle{fancy} +\begin{abstract} +\noindent This package is based on the package |tikz| (see \cite{TtTaPGFp}) and can be used to draw polyominoes. It is possible to define custom styles, pics and grids.% This is the manual for version . +\end{abstract} +\tableofcontents +\section{Usage} +The package |polyomino| can be used by putting the following in the preamble. +\begin{codeexample}[code only] +\usepackage{polyomino} +\end{codeexample} +The package |polyomino| loads the package |tikz|. +\section{The command \textbackslash polyomino} +\begin{command}{\polyomino\opt{\oarg{options}}\marg{polyomino specification}} +This command can be placed inside a |tikzpicture| environment. The \meta{polyomino specification} is a token list. Spaces in this list are ignored. With the initial settings, a |,| starts a new row. Otherwise each element in this list corresponds to a cell. An element can consist of multiple characters by surrounding it with braces. The \meta{options} can be given with the keys described in Section \ref{Keys}. +\begin{codeexample}[width=8cm] +\pgfkeys{ + /polyomino, + p={F}{style={blue,draw=black,ultra thick}}, + p={I}{style={brown,draw=black,ultra thick}}, + p={L}{style={cyan,draw=black,ultra thick}}, + p={N}{style={gray,draw=black,ultra thick}}, + p={P}{style={lime,draw=black,ultra thick}}, + p={T}{style={magenta,draw=black,ultra thick}}, + p={U}{style={olive,draw=black,ultra thick}}, + p={V}{style={orange,draw=black,ultra thick}}, + p={W}{style={pink,draw=black,ultra thick}}, + p={X}{style={purple,draw=black,ultra thick}}, + p={Y}{style={red,draw=black,ultra thick}}, + p={Z}{style={teal,draw=black,ultra thick}} +} +\begin{tikzpicture} +\polyomino[ + grid +]{ + UUUVVV, + UXUZZV, + XXXFZV, + IXFFZZ, + ILLFFT, + ILNTTT, + ILNWWT, + ILNNWW, + PPPNYW, + PPYYYY +} +\end{tikzpicture} +\end{codeexample} +The algorithm constructs the border of each polyomino. It does not consider holes determined by empty cells. Although it does detect a cell inside a polyomino which has a different style. This is illustrated in the example below. +\begin{codeexample}[width=10cm] +\begin{tikzpicture}[scale=0.8] +\polyomino[ + p={a}{style={gray,draw=black,thick}} +]{ + aaaaa, + a.a.a, + aaaaa +} +\polyomino[ + at={(0,-4)}, + p={a}{style={gray,draw=black,thick}}, + p={*}{style={white,draw=black,thick}} +]{ + aaaaa, + a*a*a, + aaaaa +} +\end{tikzpicture} +\end{codeexample} +\end{command} +\section{Keys}\label{Keys} +The keys in this Section can be given as \meta{options} to the command |\polyomino|. + +There are two key families: |/polyomino| and |/polyomino/p_2|. The key family |/polyomino| is intended for usage in documents whereas |/polyomino/p_2| is not. In the key family |/polyomino|, also keys from the key family |/polyomino/p_2| will be looked up. The second argument from the key |p| only accepts keys from the key family |/polyomino/p_2|. +\begin{key}{/polyomino/at=\marg{point} (initially (0,0))} +This key defines the bottom left coordinate of the polyomino. +\end{key} +\begin{key}{/polyomino/p\_2/connected} +This key sets the |pic| type (which is activated by the key |pic|) to false. This is the initial setting. +\end{key} +\begin{key}{/polyomino/p\_2/discrete} +This key sets the |pic| type (which is activated by the key |pic|) to true. +\end{key} +\begin{key}{/polyomino/empty cell=\marg{token list} (initially .)} +A cell corresponding to the \meta{token list} in the \meta{polyomino specification} will be left empty. + +A cell corresponding to the empty token list will always be left empty. +\end{key} +\begin{key}{/polyomino/grid=\opt{\meta{boolean}} (default true, initially false)} +If true then a grid is drawn. The grid does not apply to borders of polyominoes. The style of this grid is determined by the key |grid style|. A grid does not apply to a cell with a |pic|. +\end{key} +\begin{stylekey}{/polyomino/grid style=\marg{options} (initially \normalfont empty)} +This key determines the style of the grid. +\begin{codeexample}[width=6.5cm] +\begin{tikzpicture}[rotate=90] +\polyomino[ + grid, + grid style={gray,dash pattern=on 3mm off 4mm on 3mm off 0mm}, + p={L}{style={darkgray,draw=black}}, + p={P}{style={green,draw=black}}, + p={T}{style={violet,draw=black}}, + p={V}{style={yellow,draw=black}} +]{ + LTVVV, + LTTTV, + LTPPV, + LLPPP +} +\end{tikzpicture} +\end{codeexample} +\end{stylekey} +\begin{stylekey}{/polyomino/p\_2/p=\marg{name}\marg{options} (initially \normalfont empty)} +This key determines the style of the polyomino with \meta{name} in the \meta{polyomino specification}. + +The \meta{options} only accept keys from the key family |/polyomino/p_2|. + +In the example below, the polyominoes have the same shape but are differentiated by using different names. +\begin{codeexample}[width=10cm] +\begin{tikzpicture} +\pgfkeys{ + /polyomino, + p={a}{}, + p={b}{}, + style={fill=none,draw} +} +\def\example{ + aa, + ab, + ab, + bb +} +\polyomino{\example} +\polyomino[ + at={(2,0)} +]{\example} +\end{tikzpicture} +\end{codeexample} +\end{stylekey} +\begin{key}{/polyomino/p\_2/pic=\marg{code}} +The \meta{code} defines the |pic| which is used for each cell of the polyomino. + +A grid does not apply to a cell with a |pic|. +\begin{codeexample}[width=7cm] +\begin{tikzpicture} +\polyomino[ + empty cell=*, + grid, + p={a}{style={red,draw=black}}, + p={b}{style={blue,draw=black}}, + p={c}{style={orange,draw=black}}, + p={circle}{pic={\fill[green] (0,0) circle[radius=0.4];}}, + row sep=; +]{ + {} * * b {} c ; + a a b b {circle} c ; + {circle} a a b c c +} +\end{tikzpicture} +\end{codeexample} +\begin{codeexample}[width=5cm] +\begin{tikzpicture} +\polyomino[ + p={circle}{ + pic={\path[pic actions] (0,0) circle[radius=0.45];}, + style={right color=cyan,left color=red,draw,dashed} + }, + p={L}{ + pic={ + \fill[yellow!80!black] (-0.5,-0.5) rectangle +(1,1); + \fill[yellow!50,rounded corners] (-0.4,-0.4) rectangle +(0.8,0.8); + } + }, + p={square}{ + pic={\path[pic actions] (-0.45,-0.45) rectangle +(0.9,0.9);}, + style={fill=magenta,draw,rounded corners} + } +]{ + L {circle} {square} {square} , + L {circle} {circle} {square} , + L L {circle} {circle} +} +\end{tikzpicture} +\end{codeexample} +\end{key} +\begin{key}{/polyomino/row sep=\marg{token list} (initially ,)} +The \meta{token list} in the \meta{polyomino specification} will start a new row. +\end{key} +\begin{stylekey}{/polyomino/p\_2/style=\marg{options} (initially \normalfont empty)} +This key determines the style of the polyomino. +\end{stylekey} +\begin{thebibliography}{9} +\bibitem{TtTaPGFp} +Till Tantau, +\emph{The \tikzname{} and {\upshape\pgfname} Packages}, +Manual for version 3.1.10, +\url{https://ctan.org/pkg/pgf}, +2023. +\end{thebibliography} +\printindex +\newgeometry{left=2.25cm,right=2.25cm,top=2.25cm,bottom=2.25cm} +\pagestyle{plain} +\appendix +\begin{landscape} +\section{The source code}\label{Thesourcecode} +\dochighinput[language=latex/latex3]{polyomino.sty} +\end{landscape} +\end{document}
\ No newline at end of file diff --git a/graphics/pgf/contrib/prooftrees/README b/graphics/pgf/contrib/prooftrees/README deleted file mode 100644 index 687eddf510..0000000000 --- a/graphics/pgf/contrib/prooftrees/README +++ /dev/null @@ -1,39 +0,0 @@ -%% Copyright 2019 Clea F. Rees -% -% 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 Clea F. Rees. -% -% This work consists of all files listed in manifest.txt. - -This package supports drawing tableaux (proof trees) of the kind often used in -introductory logic classes, especially those aimed at students without strong -mathemtical backgrounds. Hodges (1991) is one example of a text which uses -this system. When teaching such a system it is especially useful to annotate -the tree with line numbers, justifications and explanations of branch -closures. - -prooftrees provides a single environment, prooftree, and a variety of tools -for annotating, customising and highlighting such trees. A cross-referencing -system is provided for trees which cite line numbers in justifications for -proof lines or branch closures. - -prooftrees is based on Forest and, hence, TikZ. The package requires version -2.1+ of Forest for expected results and will not work with version 1. - -The author is certain that some of her beliefs are false, but sure that her -belief that prooftrees has bugs is not among them. - -Clea F. Rees -ReesC21 <at> cardiff <dot> ac <dot> uk -2019/09/30 - -vim: set nospell: diff --git a/graphics/pgf/contrib/prooftrees/README.md b/graphics/pgf/contrib/prooftrees/README.md new file mode 100644 index 0000000000..dced983574 --- /dev/null +++ b/graphics/pgf/contrib/prooftrees/README.md @@ -0,0 +1,66 @@ +$Id: README.md 10529 2024-10-25 21:19:36Z cfrees $ + +# prooftrees + +A LaTeX package for drawing logical tableaux. + +## Licence + +Copyright 2016-2024 Clea F. Rees + +This work may be distributed and/or modified under the +conditions of the LaTeX Project Public License, either version 1.3c +of this license or (at your option) any later version. +The latest version of this license is in +https://www.latex-project.org/lppl.txt +and version 1.3c or later is part of all distributions of LaTeX +version 2008-05-04 or later. + +This work has the LPPL maintenance status `maintained'. + +The Current Maintainer of this work is Clea F. Rees. + +This file may only be distributed together with a copy of the package +prooftrees. You may however distribute the package prooftrees without +such generated files. + +This work consists of all files listed in manifest.txt. + +## Features + +This package supports drawing tableaux (proof trees) of the kind often used in +introductory logic classes, especially those aimed at students without strong +mathemtical backgrounds. Hodges (1991) is one example of a text which uses +this system. When teaching such a system it is especially useful to annotate +the tree with line numbers, justifications and explanations of branch +closures. + +prooftrees provides a single environment - either prooftree or tableau - and a +variety of tools for annotating, customising and highlighting such trees. A +cross-referencing system is provided for trees which cite line numbers in +justifications for proof lines or branch closures. + +prooftrees is based on Forest and, hence, TikZ. The package requires version +2.1+ of Forest for expected results and will not work with version 1. + +Version 0.9 adds out-of-the-box support for externalisation of tableaux using +memoize. + +## Code Repositories + +Code for the package is hosted at + https://codeberg.org/cfr/prooftrees +For convenience, the repository is mirrored at + https://github.com/cfr42/prooftrees + +## Contact Details + +Bug reports, feature requests etc. should be filed at + https://codeberg.org/cfr/prooftrees/issues + + +Clea F. Rees +Version 0.9 +2024-10-25 + +vim: et:tw=80: diff --git a/graphics/pgf/contrib/prooftrees/manifest.txt b/graphics/pgf/contrib/prooftrees/manifest.txt index e6116e22a9..0890ae8ff5 100644 --- a/graphics/pgf/contrib/prooftrees/manifest.txt +++ b/graphics/pgf/contrib/prooftrees/manifest.txt @@ -1,6 +1,13 @@ -Copyright 2023 Clea F. Rees +# Manifest for prooftrees -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. +Copyright (C) 2016-2024 Clea F. Rees + +This work may be distributed and/or modified under the conditions of the LaTeX +Project Public License, either version 1.3c of this license or (at your option) +any later version. The latest version of this license is in + https://www.latex-project.org/lppl.txt +and version 1.3 or later is part of all distributions of LaTeX version +2008-05-04 or later. This work has the LPPL maintenance status `maintained'. @@ -8,11 +15,40 @@ The Current Maintainer of this work is Clea F. Rees. This work consists of all files listed in manifest.txt. -prooftrees.sty -prooftrees.tex -prooftrees_biber.bib -manifest.txt -README +This file was automatically generated by `l3build manifest`. + +## Source files + + +### Package files + + +* manifest.txt +* README.md +* prooftrees_biber.bib +* prooftrees.sty +* prooftrees.tex + +### Development files + + +* build.lua +* manifest.lua +* tag.lua +* config-mem.lua +* prooftrees-memoize-t1.lvt +* prooftrees-memoize-t1.tlg +* prooftrees-conflicts-t1.lvt +* prooftrees-egs.lvt +* prooftrees-conflicts-t1.tlg +* prooftrees-egs.luatex.tlg +* prooftrees-egs.pdftex.tlg +* prooftrees-egs.xetex.tlg + + +## Derived files + + +### Typeset documentation -Derived files: -prooftrees.pdf +* prooftrees.pdf diff --git a/graphics/pgf/contrib/prooftrees/prooftrees.pdf b/graphics/pgf/contrib/prooftrees/prooftrees.pdf Binary files differindex 6535d91236..8aaabf2ef9 100644 --- a/graphics/pgf/contrib/prooftrees/prooftrees.pdf +++ b/graphics/pgf/contrib/prooftrees/prooftrees.pdf diff --git a/graphics/pgf/contrib/prooftrees/prooftrees.sty b/graphics/pgf/contrib/prooftrees/prooftrees.sty index c28a6c9688..ea15ae2748 100644 --- a/graphics/pgf/contrib/prooftrees/prooftrees.sty +++ b/graphics/pgf/contrib/prooftrees/prooftrees.sty @@ -1,23 +1,26 @@ -%% Copyright 2020 Clea F. Rees -% -% 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 Clea F. Rees. -% -% This work consists of all files listed in manifest.txt. +%% Copyright 2016-2024 Clea F. Rees %% +%% This work may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version 1.3c +%% of this license or (at your option) any later version. +%% The latest version of this license is in +%% https://www.latex-project.org/lppl.txt +%% and version 1.3c or later is part of all distributions of LaTeX +%% version 2008-05-04 or later. +%% +%% This work has the LPPL maintenance status `maintained'. +%% +%% The Current Maintainer of this work is Clea F. Rees. +%% +%% This file may only be distributed together with a copy of the package +%% prooftrees. +%% +%% This work consists of all files listed in manifest.txt. +%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \NeedsTeXFormat{LaTeX2e} \RequirePackage{svn-prov} -\ProvidesPackageSVN{$Id: prooftrees.sty 9103 2022-04-02 04:28:09Z cfrees $}[v0.8 \revinfo] -\RequirePackage{etoolbox} +\ProvidesPackageSVN{$Id: prooftrees.sty 10522 2024-10-23 16:31:08Z cfrees $}[v0.9 \revinfo] % define \prooftrees@enw to hold the name of the environment % default is to name the environment prooftree, this ensures backwards compatibility \newcommand*\prooftrees@enw{prooftree} @@ -27,7 +30,12 @@ \DeclareOption{tableau}{\renewcommand*\prooftrees@enw{tableau}} \DeclareOption*{\PassOptionsToPackage{\CurrentOption}{forest}} % if \prooftree is not yet defined, set the name to prooftree; otherwise, use tableau to avoid conflict with bussproofs (which uses 'prooftree' rather than 'bussproof' as one might expect) -\ifundef\prooftree{\renewcommand*\prooftrees@enw{prooftree}}{\renewcommand*\prooftrees@enw{tableau}} +\ifcsname prooftree\endcsname + \renewcommand*\prooftrees@enw{tableau}% +\else + \renewcommand*\prooftrees@enw{prooftree}% +\fi +% \ifundef\prooftree{\renewcommand*\prooftrees@enw{prooftree}}{\renewcommand*\prooftrees@enw{tableau}} % let users override the default prooftree in case they need to load bussproofs later \ProcessOptions \RequirePackage{forest}[2016/12/04] @@ -457,7 +465,7 @@ }{}, where={% >{O _O< O &&}{grouped}{1}{level}{proof tree rhifo}% - }{% this searches for certain kinds of structural asymmetry in the tree and attempts to move lines appropriately in such cases - the algorithm is intended to be relatively conservative (not in the sense of 'cautious' or 'safe' but in the sense of 'reflection of the overlapping consensus of reasonable users' / 'what would be rationally agreed behind the prooftrees veil of ignorance'; apologies for the inconvenience if you are an unreasonable user) + }{% this searches for certain kinds of structural asymmetry in the tree and attempts to move lines appropriately in such cases - the algorithm is intended to be relatively conservative (not in the sense of 'cautious' or 'safe' but in the sense of 'reflection of the overlapping consensus of reasonable users' / 'what would be rationally agreed behind the prooftrees veil of ignorance'; however, I should have realised I actually had 'the overlapping concensus of reasonable Beamer users' in mind rather than 'the overlapping consensus of reasonable users', so there is now an option to turn it off;apologies if this comment previously misclassified you as 'unreasonable'; apologies for the inconvenience if you are an unreasonable user) not tempboola, for root/.process={Ow1}{level}{% for level={##1}{% @@ -867,9 +875,9 @@ }, }, } -\environbodyname\prooftreebody +% \environbodyname\prooftreebody \bracketset{action character=@} -\NewEnviron{\prooftrees@enw}[1]{% \forest/\endforest from egreg's answer at http://tex.stackexchange.com/a/229608/ +\NewDocumentEnvironment{\prooftrees@enw}{ m +b }{% \forest/\endforest from egreg's answer at http://tex.stackexchange.com/a/229608/ \forest (% stages={% customised definition of stages - we don't use any custom stages, but we do use several custom keylists, where the processing order of these is critical @@ -896,7 +904,26 @@ )% proof tree,% apply the proof tree style, which sets keylists from both forest's defaults and our custom additions #1,% insert user's preamble, empty or otherwise - this allows the user both to override our defaults (e.g. by setting a non-empty proof statement or a custom format for line numbers) and to customise the tree using forest's facilities in the usual way - BUT customisations of the latter kind may or may not be effective, may or may not have undesirable - not to say chaotic - consequences, and may or may not cause compilation failures (structural changes, in particular, should be avoided completely) - [, name=proof statement @\prooftreebody]% - \endforest} + [, name=proof statement @#2]% + \endforest +}{} + +\ExplSyntaxOn +\cs_new_protected_nopar:Npn \__prooftrees_memoize:n #1 +{ + \mmzset{ + auto = { #1 } { memoize }, + } +} +\cs_generate_variant:Nn \__prooftrees_memoize:n { V } +\hook_gput_code:nnn { begindocument / before } { . } +{% paid â memoize bussproofs prooftree ... + \@ifpackageloaded{memoize}{ + \__prooftrees_memoize:V \prooftrees@enw + }{} +} +\ExplSyntaxOff + \endinput %% end prooftrees.sty + diff --git a/graphics/pgf/contrib/prooftrees/prooftrees.tex b/graphics/pgf/contrib/prooftrees/prooftrees.tex index 0b479838f9..2f9250201f 100644 --- a/graphics/pgf/contrib/prooftrees/prooftrees.tex +++ b/graphics/pgf/contrib/prooftrees/prooftrees.tex @@ -1,26 +1,36 @@ -%% Copyright 2023 Clea F. Rees -% -% 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 Clea F. Rees. -% -% This work consists of all files listed in manifest.txt. +\iffalse +%% Copyright 2016-2024 Clea F. Rees %% +%% This work may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version 1.3c +%% of this license or (at your option) any later version. +%% The latest version of this license is in +%% https://www.latex-project.org/lppl.txt +%% and version 1.3c or later is part of all distributions of LaTeX +%% version 2008-05-04 or later. +%% +%% This work has the LPPL maintenance status `maintained'. +%% +%% The Current Maintainer of this work is Clea F. Rees. +%% +%% This file may only be distributed together with a copy of the package +%% prooftrees. +%% +%% This work consists of all files listed in manifest.txt. +%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% arara: pdflatex: { synctex: true, shell: false } +% arara: biber +% arara: makeindex +% arara: pdflatex: { synctex: true, shell: false } % arara: pdflatex: { synctex: true, shell: false } % biber --output_format=bibtex --output_resolve prooftrees.bcf to generate .bib for upload % sed -i '/1977/s/DATE/YEAR' -%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\fi \pdfminorversion=7 \RequirePackage{svn-prov} -\ProvidesFileSVN{$Id: prooftrees.tex 9582 2023-06-18 01:00:05Z cfrees $}[v0.8 \revinfo] +\ProvidesFileSVN{$Id: prooftrees.tex 10525 2024-10-24 06:31:34Z cfrees $}[v0.9 \revinfo] \GetFileInfoSVN* \let\prooftreesdocversion\fileversion \let\prooftreesdocbase\filebase @@ -28,8 +38,30 @@ \let\prooftreesdocdate\filedate % BEGIN preamble \documentclass[10pt,british,a4paper,doc2]{ltxdoc} -\usepackage{babel,geometry,pageslts,fancyhdr,enumitem} -\usepackage[utf8]{inputenc} +\usepackage[extract=python]{memoize} +\mmzset{% + prefix={memos/}, + include context in ccmemo, + auto=\cref{multiref}, + auto=\Cref{multiref}, + auto=\labelcref{multiref}, + auto=\cpageref{multiref}, + auto=\labelcpageref{multiref}, + auto=\namecref{ref}, + auto=\nameCref{ref}, + auto=\namecrefs{ref}, + auto=\nameCrefs{ref}, + auto=\lcnamecrefs{ref}, + auto=\lcnamecrefs{ref}, + auto=\crefrange{refrange}, + auto=\cpagerefrange{refrange}, + auto=\Cpagerefrange{refrange}, + mkdir, +} +% \CodelineIndex +% \RecordChanges +% \EnableCrossrefs +\usepackage{babel,geometry,fancyhdr,enumitem} \usepackage{csquotes} \MakeAutoQuote{‘}{’} \MakeAutoQuote*{“}{”} @@ -41,7 +73,7 @@ \bibliography{prooftrees_biber.bib}% generate for upload (gweler uchod) \usepackage{etoolbox,verbatim,parskip,changepage,titling,makeidx} \usepackage[dvipsnames,svgnames,rgb,x11names]{xcolor} -\usepackage{prooftrees} +\usepackage[tableaux]{prooftrees} \usepackage{mathtools,turnstile,pifont} \newcommand*{\fycheck}{\text{\ding{52}}} \newcommand*{\fycross}{\text{\ding{56}}} @@ -60,7 +92,12 @@ }, } \usepackage{tcolorbox} -\tcbuselibrary{listings,xparse,breakable}% if you use skins, you need to disable externalisation for boxes which use the relevant options - gweler nodiadau/tex/tex.se/tcolorbox-coursepacket-exp.tex +\tcbuselibrary{listingsutf8}% if you use skins, you need to disable externalisation for boxes which use the relevant options - gweler nodiadau/tex/tex.se/tcolorbox-coursepacket-exp.tex +%%%%%%%%%%%%%%%% +% Sašo Živanović: https://github.com/sasozivanovic/memoize/issues/31#issuecomment-2424700001 +\csappto{tcb@shield@@externalize}{\ifdefined\memoizefalse\memoizefalse\fi} +\tcbset{shield externalize} +%%%%%%%%%%%%%%%% \usepackage[% loadHyperref=true, createIndexEntries=false, @@ -83,7 +120,7 @@ \raggedleft\PrintDescribeMacro{#1}\par \PrintLabelName[\macrolabelfont]{\macrolabelname}% }% - \expandafter\prooftrees@index{\macrolabelname}{\protect\verb \protect #1}\@esphack\ignorespaces} + \expandafter\prooftrees@index{\macrolabelname}{\protect\ttfamily\protect\string\protect#1}\@esphack\ignorespaces} \renewcommand*\Describe@Env[1]{\endgroup \marginpar{% \raggedleft\PrintDescribeMacro{#1}\par @@ -106,7 +143,7 @@ \renewcommand*\do[1]{\ifcyntafun ##1\else\\##1\fi\cyntafunfalse}% \cyntafuntrue \marginpar{% - \raggedleft\PrintDescribeMacro{ % peid â dileu'r gwagle hwn!! + \raggedleft\PrintDescribeMacro{ % paid â dileu'r gwagle hwn!! \expandafter\docsvlist{#2}% }\par \PrintLabelName[\macrolabelfont]{\csname #1labelname\endcsname}% @@ -184,6 +221,16 @@ commentstyle=\color{doc@commentcolor}, frame=none, } +\lstdefinestyle{lstsrc}{% + style=lstDemoStyleLaTeXCode, + stringstyle=\color{doc@stringcolor}, + keywordstyle=\color{doc@keywordcolor}, + commentstyle=\color{doc@commentcolor}, + texcsstyle=\color{doc@keywordcolor}, + frame=none, + numbers=left, + moretexcs={forestset,linenumberstyle,ifcsname,ProcessOptions,DeclareOption,ProvidesPackageSVN,bracketset,NewDocumentEnvironment,ExplSyntaxOn,mmzset,ExplSyntaxOff,forest,prooftrees@enw,foresteregister,foresteoption,forestregister,forestoption,PackageError,PackageWarning,PassOptionsToPackage,CurrentOption,@ifpackageloaded,endforest,draw}, +} \geometry{headheight=12pt,marginparwidth=45mm,hmarginratio=4:1,vscale=.8,hscale=.7,verbose} \newlength\tewadjust \setlength\tewadjust{\marginparwidth+\marginparsep-\paperwidth+\textwidth+\oddsidemargin+1in} @@ -269,20 +316,83 @@ Version \prooftreesdocversion{} \prooftreesdocinfo \end{center}% } +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\ExplSyntaxOn +% \NewDocumentCommand \ivals { +m } +% { +% { +% \clist_if_empty:nF { #1 } +% { +% \normalfont +% \itshape +% < \clist_use:nn { #1 } { >\texttt{,} ~ < } > +% } +% } +% } +\keys_define:nn { prooftrees / doc } +{ + unknown .code:n = { + \cs_if_free:cT { \l_keys_key_str } + { + \tl_gset:cn { \l_keys_key_str } { #1 } + } + }, +} +\NewDocumentCommand \prooftreesdocset { +m } +{ + \keys_set:nn { prooftrees / doc } { #1 } +} +\ExplSyntaxOff +\prooftreesdocset{% + bug={\href{https://codeberg.org/cfr/prooftrees/issues}{\textsc{bugtracker}}}, + codeberg={\href{https://codeberg.org/cfr/prooftrees}{\textsc{codeberg}}}, + github={\href{https://github.com/cfr42/prooftrees}{\textsc{github}}}, + ctan={\href{https://ctan.org/}{\textsc{ctan}}}, +} +% \newcommand*{\lpack}[1]{\textsf{#1}} +\title{\filebase} +\author{Clea F. Rees\thanks{% + Bug tracker: + \href{https://codeberg.org/cfr/prooftrees/issues}{\url{codeberg.org/cfr/prooftrees/issues}} + \textbar{} Code: + \href{https://codeberg.org/cfr/prooftrees}{\url{codeberg.org/cfr/prooftrees}} + \textbar{} Mirror: + \href{https://github.com/cfr42/prooftrees}{\url{github.com/cfr42/prooftrees}}% +}} +% \date{\fileversion~\filedate} +\date{\prooftreesdocdate}% +\title{\prooftreesdocbase}% +\ExplSyntaxOn +\hook_gput_code:nnn {shipout/lastpage} {.} +{ + \property_record:nn {t:lastpage}{abspage,page,pagenum} +} +\cs_new_protected_nopar:Npn \lastpage +{ + \property_ref:nn {t:lastpage}{page} +} +% \NewDocumentCommand \plarg {+m} {{\ttfamily (\ivals{#1})}} +\ExplSyntaxOff +% \NewDocumentCommand \istable{m}{\texttt{= \{}\ivals{#1}\texttt{\}}\par\noindent} +% \NewDocumentCommand \isstring{m}{\texttt{= ''}\meta{#1}\texttt{''}\par\noindent} +% \definecolor{strawberry}{rgb}{1.000,0.000,0.502} +% \definecolor{blueberry}{rgb}{0.000,0.000,1.000} +% \definecolor{moss}{rgb}{0.000,0.502,0.251} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \pagestyle{fancy} \fancyhf{} \fancyhf[lh]{\textit{\leftmark}} \fancyhf[rh]{\textit{\rightmark}} -\fancyhf[cf]{\textit{--- \thepage{} of \lastpageref*{LastPage} ---}} +\fancyhf[cf]{\textit{--- \thepage{} of \lastpage{} ---}} \fancypagestyle{fancyplain}{% \fancyhf{}% \fancyhf[lh]{\textit{\leftmark}}% \renewcommand*\headrulewidth{0pt}% - \fancyhf[cf]{\textit{--- \thepage{} of \lastpageref*{LastPage} ---}}} + \fancyhf[cf]{\textit{--- \thepage{} of \lastpage{} ---}}} \fancypagestyle{plain}{% \fancyhf{}% \renewcommand*\headrulewidth{0pt}% - \fancyhf[cf]{\textit{--- \thepage{} of \lastpageref*{LastPage} ---}}} + \fancyhf[cf]{\textit{--- \thepage{} of \lastpage{} ---}}} \patchcmd{\sectionmark}{\MakeUppercase}{}{\typeout{sectionmark patched OK!}}{\typeout{sectionmark patch failed!}} \patchcmd{\tableofcontents}{\MakeUppercase}{}{\typeout{sectionmark patched OK!}}{\typeout{sectionmark patch failed!}} \patchcmd{\tableofcontents}{\MakeUppercase\contentsname}{}{\typeout{sectionmark patched OK!}}{\typeout{sectionmark patch failed!}} @@ -297,9 +407,6 @@ % END preamble \begin{document} -\title{\prooftreesdocbase}% -\author{Clea F. Rees\texorpdfstring{\thanks{reesc21 <at> cardiff <dot> ac <dot> uk}}{}}% -\date{\prooftreesdocdate}% \newgeometry{headheight=12pt,scale=.8,marginparwidth=0pt,marginparsep=0pt}% \savegeometry{safonol}% \setlength\tewadjust{\marginparwidth+\marginparsep}% @@ -309,8 +416,9 @@ \bigskip \begin{abstract} - \noindent \keyname[pkg]{\pkg{prooftrees}} is a \LaTeXe{} package, based on \keyname[pkg]{\pkg{forest}}, designed to support the typesetting of proof trees in styles sometimes used in teaching introductory logic courses, especially those aimed at students without a strong background in mathematics. + \noindent \keyname[pkg]{\pkg{prooftrees}} is a \LaTeXe{} package, based on \keyname[pkg]{\pkg{forest}}, designed to support the typesetting of logical tableaux --- ‘proof trees’ or ‘truth trees’ --- in styles sometimes used in teaching introductory logic courses, especially those aimed at students without a strong background in mathematics. One textbook which uses proofs of this kind is \textcite{hodges-logic}. + Like \pkg{forest}, \pkg{prooftrees} supports \keyname[pkg]{\pkg{memoize}} out-of-the-box. \end{abstract} \bigskip @@ -318,7 +426,7 @@ \begin{adjustwidth}{-3em}{-5em} \centering \begin{minipage}[t]{.475\linewidth} - \begin{prooftree} + \begin{tableau} { to prove={S \liff \lnot T, T \liff \lnot R \sststile{\mathcal{L}}{} S \liff R}, highlight format={text=WildStrawberry}, @@ -387,10 +495,10 @@ ] ] ] - \end{prooftree}% + \end{tableau}% \end{minipage}\hfill \begin{minipage}[t]{.525\linewidth} - \begin{prooftree} + \begin{tableau} { to prove={(\exists x)((\forall y)(Py \Rightarrow (x = y)) \cdot Px) \sststile{\mathcal{L}_1}{} (\exists x)(\forall y)(Py \Leftrightarrow (x = y))}, line no sep=.35em, @@ -441,7 +549,7 @@ ] ] ] - \end{prooftree}% + \end{tableau}% \end{minipage}% \end{adjustwidth} \end{figure} @@ -512,7 +620,7 @@ The package supports a small number of options which can be configured to custom The code for a \pkg{prooftrees} proof tree is shown in \cref{ptdefaults}, together with the output obtained using the default settings. \begin{codcoeden}*[label=ptdefaults]{\pkg{prooftrees}: default settings} -\begin{prooftree} +\begin{tableau} { to prove={\{P \vee (Q \vee \lnot R), P \lif \lnot R, Q \lif \lnot R\} \sststile{}{} \lnot R} } @@ -528,7 +636,7 @@ The code for a \pkg{prooftrees} proof tree is shown in \cref{ptdefaults}, togeth [\lnot Q, close={:!u,!c}] [\lnot R, close={:not conc,!c}, just={$\lif$ Elim:last premise}]] [\lnot R, close={:not conc,!c}, move by=1, just={$\vee$ Elim:!u}]]]]]] -\end{prooftree} +\end{tableau} \end{codcoeden} More extensive configuration can be achieved by utilising \pkg{forest} \autocite{saso-forest-manual} and/or \TikZ{} \autocite{tantau-tikz-pgf-manual} directly. A sample of supported proof tree styles are shown in \cref{sample}. @@ -537,7 +645,7 @@ The package is \emph{\bfseries not} intended for the typesetting of proof trees \thispagestyle{plain}% \begin{coeden}[label=sample, floatplacement={!bp}, grow to left by=3em, grow to right by=3em]{\pkg{prooftrees}: sample output} \centering - \begin{prooftree} + \begin{tableau} { to prove={\{ P \lor (Q \lor \lnot R), P \lif \lnot R, Q \lif \lnot R \} \sststile{}{} \lnot R}, line no sep=.35em, @@ -566,9 +674,9 @@ The package is \emph{\bfseries not} intended for the typesetting of proof trees ] ] ] - \end{prooftree}\hfill + \end{tableau}\hfill {\renewcommand*\linenumberstyle[1]{#1)}% - \begin{prooftree} + \begin{tableau} { close with={\ensuremath{\ast}}, just format={text=gray, font=\itshape}, @@ -602,9 +710,9 @@ The package is \emph{\bfseries not} intended for the typesetting of proof trees ] ] ] - \end{prooftree}} + \end{tableau}} - \begin{prooftree} + \begin{tableau} { not line numbering, single branches, @@ -636,8 +744,8 @@ The package is \emph{\bfseries not} intended for the typesetting of proof trees ] ] ] - \end{prooftree}% - \hfill\begin{prooftree} + \end{tableau}% + \hfill\begin{tableau} { to prove={\{ P \lor (Q \lor \lnot R), P \lif \lnot R, Q \lif \lnot R \} \therefore \lnot R}, close with={\ensuremath{\times}}, @@ -668,9 +776,9 @@ The package is \emph{\bfseries not} intended for the typesetting of proof trees ] ] ] - \end{prooftree} + \end{tableau} - \begin{prooftree} + \begin{tableau} { to prove={(\exists x)(Lx \lor Mx) \sststile{}{} (\exists x) Lx \lor (\exists x) Mx}, highlight format={text=blue!50!cyan}, @@ -695,8 +803,8 @@ The package is \emph{\bfseries not} intended for the typesetting of proof trees ] ] ] - \end{prooftree}% - \hfill\begin{prooftree} + \end{tableau}% + \hfill\begin{tableau} { for tree={% plain content, @@ -717,7 +825,7 @@ The package is \emph{\bfseries not} intended for the typesetting of proof trees ] ] ] - \end{prooftree} + \end{tableau} \end{coeden} % END sec:raisondetre @@ -730,7 +838,7 @@ The package is \emph{\bfseries not} intended for the typesetting of proof trees \begin{itemize} \item All derivation rules yield equal numbers of \wff{}s on all branches. \begin{center} - \begin{prooftree} + \begin{tableau} { not line numbering, for tree={plain content}, @@ -740,7 +848,7 @@ The package is \emph{\bfseries not} intended for the typesetting of proof trees [\wff[\wff[\wff]][\wff[\wff, label={[text=Green3]right:{\fycheck}}]]] [\wff[\wff][\wff[\wff, label={[text=red]right:{\fycross}}]]] [\wff[\wff[\wff]][\wff[\phantom{\wff}, label={[text=red]right:{\fycross}}]]] - \end{prooftree} + \end{tableau} \end{center} If $\mathcal{L}$ fails to satisfy this condition, \pkg{prooftrees} is likely to violate the requirements of affected derivation rules by splitting branches ‘mid-inference’. \item No derivation rule yields \wff{}s on more than two branches. @@ -780,17 +888,17 @@ Suppose that we wish to typeset the proof tree for and we would like to typeset the entailment established by our proof at the top of the tree. Then we should begin like this: \begin{latexcode} -\begin{prooftree} +\begin{tableau} { to prove={(\exists x)((\forall y)(Py \lif x = y) \land Px) \sststile{}{} (\exists x)(\forall y)(Py \liff x = y)} } -\end{prooftree} +\end{tableau} \end{latexcode} That is all the preamble we want, so we move onto consider the \meta{tree specification}. \pkg{forest} uses square brackets to specify trees' structures. To typeset a proof, think of it as consisting of nested trees, trunks upwards, and work from the outside in and the trunks down (\cref{nythod}). \begin{coeden}[label=nythod]{Nested structure of proof tree} -\begin{prooftree} +\begin{tableau} { to prove={(\exists x)((\forall y)(Py \lif x = y) \land Px) \sststile{}{} (\exists x)(\forall y)(Py \liff x = y)}, just sep*=3, @@ -900,7 +1008,7 @@ To typeset a proof, think of it as consisting of nested trees, trunks upwards, a ] ] ] -\end{prooftree} +\end{tableau} \end{coeden} Starting with the outermost tree \nyth*{} and the topmost trunk, we replace the \bocsnyth{} with square brackets and enter the first \wff{} inside, adding \verb|just=Pr.| for the justification on the right and \verb|checked=a| so that the line will be marked as discharged with $a$ substituted for $x$. @@ -908,13 +1016,13 @@ We also use \pkg{forest}'s \keyname*[fopttoks]{name} to label the line for ease (Technically, it is the node rather than the line which is named, but, for our purposes, this doesn't matter. \pkg{forest} will create a name if we don't specify one, but it will not necessarily be one we would have chosen for ease of use!) \begin{latexcode} -\begin{prooftree} +\begin{tableau} { to prove={(\exists x)((\forall y)(Py \lif x = y) \land Px) \sststile{}{} (\exists x)(\forall y)(Py \liff x = y)} } [{(\exists x)((\forall y)(Py \lif x = y) \land Px)}, checked=a, just=Pr., name=pr ] -\end{prooftree} +\end{tableau} \end{latexcode} We can refer to this line later as \verb|pr|. @@ -923,7 +1031,7 @@ Its \bocsnyth{} goes inside that for \nyth[1], so the square brackets containing Again, we add the justification with \keyname[foptautotoks]{just}, but we use \verb|subs=a| rather than \verb|checked=a| as we want to mark substitution of $a$ for $x$ without discharging the line. Again, we use \keyname*[fopttoks]{name} so that we can refer to the line later as \verb|neg conc|. \begin{latexcode} -\begin{prooftree} +\begin{tableau} { to prove={(\exists x)((\forall y)(Py \lif x = y) \land Px) \sststile{}{} (\exists x)(\forall y)(Py \liff x = y)} } @@ -931,7 +1039,7 @@ Again, we use \keyname*[fopttoks]{name} so that we can refer to the line later a [{\lnot (\exists x)(\forall y)(Py \liff x = y)}, subs=a, just=Conc.~neg., name=neg conc ] ] -\end{prooftree} +\end{tableau} \end{latexcode} Turning to tree \nyth*{}, we again note that its \bocsnyth{} is nested within the previous two, so the square brackets for its \wff{} need to be nested within those for the previous \wff{}s. @@ -941,7 +1049,7 @@ This justification also refers to an earlier line in the proof. We could write this as \verb|just=1 $\exists\elim$|, but instead we use the name we assigned earlier with the referencing feature provided by \pkg{prooftrees}. To do this, we put the reference, \verb|pr| \emph{after} the rest of the justification, separating the two parts by a colon i.e.~\verb|$\exists\elim$:pr| and allow \pkg{prooftrees} to figure out the correct number. \begin{latexcode} -\begin{prooftree} +\begin{tableau} { to prove={(\exists x)((\forall y)(Py \lif x = y) \land Px) \sststile{}{} (\exists x)(\forall y)(Py \liff x = y)} } @@ -951,7 +1059,7 @@ To do this, we put the reference, \verb|pr| \emph{after} the rest of the justifi ] ] ] -\end{prooftree} +\end{tableau} \end{latexcode} Continuing in the same way, we surround each of the \wff{}s for \nyth*{}, \nyth*{}, \nyth*{} and \nyth*{} within square brackets nested within those surrounding the previous \wff{} since each of the trees is nested within the previous one. @@ -961,7 +1069,7 @@ For example, in the next line we add, we specify the justification as \verb|just \verb|!u| refers to the current line's parent line --- in this case, \verb|{(\forall y)(Py \lif a = y) \land Pa}, checked, just=$\exists\elim$:pr|. \verb|!uu| refers to the current line's parent line's parent line and so on. \begin{latexcode} -\begin{prooftree} +\begin{tableau} { to prove={(\exists x)((\forall y)(Py \lif x = y) \land Px) \sststile{}{} (\exists x)(\forall y)(Py \liff x = y)} } @@ -979,14 +1087,14 @@ For example, in the next line we add, we specify the justification as \verb|just ] ] ] -\end{prooftree} +\end{tableau} \end{latexcode} Reaching \nyth*{}, things get a little more complex since we now have not one, but \emph{two} \bocsnyth{} nested within \nyth[7]. This means that we need \emph{two} sets of square brackets for \nyth{} --- one for each of its two trees. Again, both of these should be nested within the square brackets for \nyth[7] but neither should be nested within the other because the trees for the two branches at \nyth{} are distinct. \begin{latexcode} -\begin{prooftree} +\begin{tableau} { to prove={(\exists x)((\forall y)(Py \lif x = y) \land Px) \sststile{}{} (\exists x)(\forall y)(Py \liff x = y)} } @@ -1008,14 +1116,14 @@ Again, both of these should be nested within the square brackets for \nyth[7] bu ] ] ] -\end{prooftree} +\end{tableau} \end{latexcode} At this point, we need to work separately or in parallel on each of our two branches since each constitutes its own tree. Turning to trees \nyth*{}, each needs to be nested within the relevant tree \nyth[8], since each \bocsnyth{} is nested within the applicable branch's tree. Hence, we nest square brackets for each of the \wff{}s at \nyth{} within the previous set. \begin{latexcode} -\begin{prooftree} +\begin{tableau} { to prove={(\exists x)((\forall y)(Py \lif x = y) \land Px) \sststile{}{} (\exists x)(\forall y)(Py \liff x = y)} } @@ -1041,7 +1149,7 @@ Hence, we nest square brackets for each of the \wff{}s at \nyth{} within the pre ] ] ] -\end{prooftree} +\end{tableau} \end{latexcode} We only have one tree \nyth*{} as there is no corresponding tree in the left-hand branch. @@ -1054,7 +1162,7 @@ We can use \verb|close={8,10}| for this or we can use the same referencing syste In either case, we again surrounding the argument with curly brackets to protect the comma. \verb|!c| refers to the current line --- something useful in many close annotations, but not helpful in specifying non-circular justifications. \begin{latexcode} -\begin{prooftree} +\begin{tableau} { to prove={(\exists x)((\forall y)(Py \lif x = y) \land Px) \sststile{}{} (\exists x)(\forall y)(Py \liff x = y)} } @@ -1082,13 +1190,13 @@ In either case, we again surrounding the argument with curly brackets to protect ] ] ] -\end{prooftree} +\end{tableau} \end{latexcode} This completes the main right-hand branch of the tree and we can focus solely on the remaining left-hand one. Tree \nyth*{} is straightforward --- we just need to nest it within the left-hand tree \nyth[9]. \begin{latexcode} -\begin{prooftree} +\begin{tableau} { to prove={(\exists x)((\forall y)(Py \lif x = y) \land Px) \sststile{}{} (\exists x)(\forall y)(Py \liff x = y)} } @@ -1118,14 +1226,14 @@ Tree \nyth*{} is straightforward --- we just need to nest it within the left-han ] ] ] -\end{prooftree} +\end{tableau} \end{latexcode} At this point, the main left-hand branch itself branches, so we have two trees \nyth*{}. Treating this in the same way as the earlier branch at \nyth[8], we use two sets of square brackets nested within those for tree \nyth{}, but with neither nested within the other. Since we also want to mark the leftmost branch as closed, we add \verb|close={:to Pb or not to Pb,!c}| in the same way as before. \begin{latexcode} -\begin{prooftree} +\begin{tableau} { to prove={(\exists x)((\forall y)(Py \lif x = y) \land Px) \sststile{}{} (\exists x)(\forall y)(Py \liff x = y)} } @@ -1159,12 +1267,12 @@ Since we also want to mark the leftmost branch as closed, we add \verb|close={:t ] ] ] -\end{prooftree} +\end{tableau} \end{latexcode} We complete our initial specification by nesting \nyth*{} within the appropriate tree \nyth[12], again marking closure appropriately. \begin{latexcode} -\begin{prooftree} +\begin{tableau} { to prove={(\exists x)((\forall y)(Py \lif x = y) \land Px) \sststile{}{} (\exists x)(\forall y)(Py \liff x = y)} } @@ -1200,12 +1308,12 @@ We complete our initial specification by nesting \nyth*{} within the appropriate ] ] ] -\end{prooftree} +\end{tableau} \end{latexcode} Compiling our code, we find that the line numbering is not quite right: -\begin{prooftree} +\begin{tableau} { to prove={(\exists x)((\forall y)(Py \lif x = y) \land Px) \sststile{}{} (\exists x)(\forall y)(Py \liff x = y)} } @@ -1241,7 +1349,7 @@ Compiling our code, we find that the line numbering is not quite right: ] ] ] -\end{prooftree} +\end{tableau} \pkg{prooftrees} warns us about this: \begin{latexcode} @@ -1258,7 +1366,7 @@ by \end{latexcode} giving us the following code: \begin{latexcode} -\begin{prooftree} +\begin{tableau} { to prove={(\exists x)((\forall y)(Py \lif x = y) \land Px) \sststile{}{} (\exists x)(\forall y)(Py \liff x = y)} } @@ -1294,11 +1402,11 @@ giving us the following code: ] ] ] -\end{prooftree} +\end{tableau} \end{latexcode} which produces our desired result: -\begin{prooftree} +\begin{tableau} { to prove={(\exists x)((\forall y)(Py \lif x = y) \land Px) \sststile{}{} (\exists x)(\forall y)(Py \liff x = y)} } @@ -1334,7 +1442,7 @@ which produces our desired result: ] ] ] -\end{prooftree} +\end{tableau} % END sec:ee @@ -1393,7 +1501,7 @@ The following diagram provides an overview of the configuration and anatomy of a Detailed documentation is provided in \cref{sec:ops} and \cref{sec:macros}. \forestset{declare count register={cau},cau'=0} -\begin{prooftree} +\begin{tableau} { to prove={proof statement}, for tree={% @@ -1472,7 +1580,7 @@ Detailed documentation is provided in \cref{sec:ops} and \cref{sec:macros}. \end{scope} } [[[[][]]]][[[[[]][[[]]]][[]]]]]]] -\end{prooftree} +\end{tableau} % END sec:anatomy @@ -1916,6 +2024,54 @@ For example, if for some reason you would like bold line numbers, try % END sec:macros +\section{Memoization}\label{sec:memoize} +% BEGIN sec:memoize + +Tableaux created by \pkg{prooftrees} cannot, in general, be externalised with \TikZ's \keyname[pkg]{\pkg{external}} library. +Since \keyname[pkg]{\pkg{pgf}}/\TikZ{}, in general, and \pkg{prooftrees}, in particular, can be rather slow to compile, this is a serious issue. +If you only have a two or three small tableaux, the compilation time will be negligible. +But if you have large, complex proofs or many smaller ones, compilation time will quickly become excessive. + +Version 0.9 does not cure the disease, but it does offer an extremely effective remedy for the condition. +While it does not make \pkg{prooftrees} any faster, it supports the \keyname[pkg]{\pkg{memoize}} package developed by \pkg{forest}'s author, Sašo Živanović \autocite*{saso-memoize-manual}. +Memoization is faster, more secure, more robust and easier to use than \TikZ's externalisation. +\begin{description} + \item[It is faster.] It does not require separate compilations for each memoized object, so it is comparatively fast even when memoizing. + \item[It is more secure.] It requires only restricted shell-escape, which almost all \TeX{} installations enable by default, so it is considerably more secure and can be utilised even where shell-escape is disabled. + \item[It is more robust.] It can successfully memoize code which defeats all ordinary mortals' attempts to externalize with the older \TikZ{} library. + \item[It is easier to use.] It requires less configuration and less intervention. + For example, it detects problematic code and aborts memoization automatically in many cases in which \TikZ's \pkg{external} would either cause a compilation error or silently produce nonsense output, forcing the user to manually disable the process for relevant code. +\end{description} + +There is always a ‘but’, but this is a pretty small ‘but’ as ‘but’s go. +\begin{description} + \item[But installation requires slightly more work.] To reap the full benefits, you want to use either the \texttt{perl} or the \texttt{python} ‘extraction’ method. + There is a third method, which does not require any special installation, but this lacks several of the advantages explained above and is not recommended. + + If you use \TeX{} Live, you have \texttt{perl} already, but you may need to install a couple of libraries. + \texttt{python} is not a prerequisite for \TeX{} Live but, if you happen to have it installed, you will probably only need an additional library to use this method. + + See \citetitle{saso-memoize-manual} \autocite{saso-memoize-manual} for further details. +\end{description} + +Once you have the prerequisites setup, all you need do is load \pkg{memoize} \emph{before} \pkg{prooftrees}. + +\begin{latexcode} +\usepackage[extraction method=perl]{memoize}% or python +\usepackage{prooftrees} +\end{latexcode} + +After a single compilation, your document will have expanded to include extra pages. +At this point, it will look pretty weird. +After the next compilation, your document will return to its normal self, the only difference being the speed with which it does so as all your memoized tableaux will simply be included, as opposed to recompiled. +Only when you alter the code for a tableau, delete the generated files, disable memoization or explicitly request it will the proof be recompiled. + +Memoization is compatible with both \pkg{prooftrees}'s cross-referencing system and \LaTeXe's cross-references, but the latter require an additional compilation. +In general, if a document element takes $n$ compilations to stabilise, it will take $n+1$ compilations to complete the memoization process. +See \citetitle{saso-memoize-manual} \autocite{saso-memoize-manual} for details. + +% END sec:memoize + \section{Compatibility}\label{sec:compat} % BEGIN sec:compat @@ -1933,6 +2089,13 @@ This allows you to use \env{tableau} for \pkg{prooftrees} trees and \env{prooftr \section{Version History}\label{sec:hanes} % BEGIN sec:hanes +\subsection{0.9}\label{subsec:0.9} +% BEGIN subsec:0.9 +Add support for \pkg{memoize} and utilise for documentation. + +Use \cs{NewDocumentEnvironment}, removing direct dependency on \pkg{environ}. +% END subsec:0.9 + \subsection{0.8} Add previously unnoticed dependency on \pkg{amstext}. Attempt to fix straying closure symbols evident in documentation and a \TeX\ SE question\footnote{\url{https://tex.stackexchange.com/q/619314/}.} @@ -1948,7 +2111,7 @@ See \cref{subsec:go}. The main point of this option is to allow automatic moves to be switched off if one teaches students to first apply all available non-branching rules for the tableau as a whole, as opposed to all non-branching rules for the sub-tree. The automatic algorithm is consistent with the latter, but not former, approach. The algorithm favours compact trees, which are more likely to fit on \pkg{beamer} slides. -Switching the algorithm off permits users to specify exactly how things should or should not be move. +Switching the algorithm off permits users to specify exactly how things should or should not be moved. Thanks to Peter Smith for prompting this. Fix bug reported at \href{https://tex.stackexchange.com/q/479263/39222}{tex.stackexchange.com/q/479263/39222}. @@ -2001,10 +2164,25 @@ First CTAN release. % END sec:hanes \printbibliography -\clearpage \loadgeometry{safonol}% \fancyheadoffset[lh]{0pt}% + \printindex + +\onecolumn +\appendix + +\section{Implementation}\label{sec:imp} + +{% + % \makeatletter + % \def\@xobeysp{\leavevmode\penalty100\ }% + % \makeatother + % \verbatiminput{prooftrees.sty}% +} +\lstinputlisting[style=lstsrc,numbers=left,inputencoding=utf8/latin1]{prooftrees.sty} + + \end{document} diff --git a/graphics/pgf/contrib/prooftrees/prooftrees_biber.bib b/graphics/pgf/contrib/prooftrees/prooftrees_biber.bib index 021c9d1cfd..0a3ab30332 100644 --- a/graphics/pgf/contrib/prooftrees/prooftrees_biber.bib +++ b/graphics/pgf/contrib/prooftrees/prooftrees_biber.bib @@ -31,3 +31,12 @@ TITLE = {Forest: A {PGF}/Ti\mkbibemph{k}{Z}-Based Package for Drawing Linguistic Trees}, } +@MANUAL{saso-memoize-manual, + AUTHOR = ZIVANOVIC-SASO, + URL = {https://www.ctan.org/pkg/memoize}, + DATE = {2023-10-10}, + EDITION = {1.0.0}, + KEYWORDS = {TeX,LaTeX,PGF,TikZ,Forest,Memoize}, + TITLE = {Memoize}, +} + diff --git a/graphics/pgf/contrib/spath3/README b/graphics/pgf/contrib/spath3/README.txt index dad3e28a92..b1104b7f4d 100644 --- a/graphics/pgf/contrib/spath3/README +++ b/graphics/pgf/contrib/spath3/README.txt @@ -1,6 +1,6 @@ ---------------------------------------------------------------- spath3 --- LaTeX3 functions for manipulating PGF soft paths -E-mail: loopspace@mathforge.org +E-mail: Andrew Stacey <loopspace@mathforge.org> Released under the LaTeX Project Public License v1.3c or later See http://www.latex-project.org/lppl.txt ---------------------------------------------------------------- diff --git a/graphics/pgf/contrib/spath3/spath3.pdf b/graphics/pgf/contrib/spath3/spath3.pdf Binary files differindex 9282e0adfe..6ade2656ac 100644 --- a/graphics/pgf/contrib/spath3/spath3.pdf +++ b/graphics/pgf/contrib/spath3/spath3.pdf diff --git a/graphics/pgf/contrib/spath3/spath3.tex b/graphics/pgf/contrib/spath3/spath3.tex index c8e9d65af7..897f5f7b3d 100644 --- a/graphics/pgf/contrib/spath3/spath3.tex +++ b/graphics/pgf/contrib/spath3/spath3.tex @@ -1,5 +1,5 @@ \RequirePackage{shellesc} -\immediate\write18{tex spath3_code.dtx} +%\immediate\write18{tex spath3_code.dtx} \documentclass{l3doc} \usepackage{tikz} \usetikzlibrary{ @@ -50,27 +50,29 @@ \title{The \textsf{spath3} Package: Documentation} \author{Andrew Stacey \\ \url{loopspace@mathforge.org}} - \date{\fileversion~from \filedate} +\date{\fileversion~from \filedate} - \begin{document} +\let\OriginalBar=| - \maketitle +\begin{document} + +\maketitle \tableofcontents - \section{Introduction} +\section{Introduction} - The \texttt{spath3} package was originally designed as a low-level package for manipulating the \emph{soft paths} defined by PGF/TikZ. - Soft paths form one stage of the stack of translations between what the author writes in the \texttt{tikzpicture} environments in their \LaTeX\ document and what is eventually written to the output file. - Most of the complicated processing has been done by the time a soft path is constructed, but it is still very definitely a \TeX\ object and there has not, for example, been any consideration as to what the eventual output file format is (such as PDF, DVI, or SVG). - So it is very amenable to being modified at this stage and this package provides a set of routines for doing so. +The \texttt{spath3} package was originally designed as a low-level package for manipulating the \emph{soft paths} defined by PGF/TikZ. +Soft paths form one stage of the stack of translations between what the author writes in the \texttt{tikzpicture} environments in their \LaTeX\ document and what is eventually written to the output file. +Most of the complicated processing has been done by the time a soft path is constructed, but it is still very definitely a \TeX\ object and there has not, for example, been any consideration as to what the eventual output file format is (such as PDF, DVI, or SVG). +So it is very amenable to being modified at this stage and this package provides a set of routines for doing so. - The original purpose was to provide a common core on which other packages would be built. - Indeed, the packages \texttt{calligraphy}, \texttt{knots}, and \texttt{penrose} all use this package. - However, over time I've found myself wanting to use the routines of this package at a higher level and so have designed some user-level interfaces. - This document documents those. +The original purpose was to provide a common core on which other packages would be built. +Indeed, the packages \texttt{calligraphy}, \texttt{knots}, and \texttt{tilings} all use this package. +However, over time I've found myself wanting to use the routines of this package at a higher level and so have designed some user-level interfaces. +This document documents those. - To clarify some terminology used in this document (and more generally, this package), I regard paths as being composed of \emph{segments} and \emph{components}. +To clarify some terminology used in this document (and more generally, this package), I regard paths as being composed of \emph{segments} and \emph{components}. A \emph{segment} is a minimal drawing piece. Thus it might be a straight line or a B\'ezier curve. A \emph{component} is a minimal connected section of the path. @@ -634,6 +636,24 @@ The ones that keep the middle need two parameters to specify the break points. \end{function} +\begin{function}{ + arrow shortening +} +\begin{syntax} +|arrow shortening| +|arrow shortening=|\marg{true{\OriginalBar}false} +\end{syntax} + +When an arrow is added to a path then the path is shortened so that the arrow tip is at the end of where the path should end up. +Placing an arrow, therefore, has two effects: modifying the path and rendering the arrow. +The former should happen before a soft path is manipulated, the latter afterwards. +This key allows for the necessary separation to occur. +Invoking it when the path is used disables the shortening at that juncture. + +Note that if the path (or its last segment) is very short then when the arrow is eventually placed it may end up pointing backwards. +Fixing this is on the \emph{ToDo} list! +\end{function} + \subsection{Exporting Paths} There are two keys to export a path. @@ -908,6 +928,21 @@ The intention with the second key is that it is similar to what happens with the \end{tikzpicture} \end{example} +\begin{example} +\begin{tikzpicture}[>=Latex, line width=5pt] +% Just a simple line +\draw (0,1) to[bend left] +(5,0); +% Same line but with arrows, also save the path +\draw[->.>, spath/save=arrow] (0,0) to[bend left] +(5,0); +% Let's redraw that path without the arrows - it's short! But also distorted +\draw[spath/use={arrow,transform={yshift=-1cm}}]; +% So if we redraw it with arrows it gets doubly shortened +\draw[->.>,spath/use={arrow,transform={yshift=-2cm}}]; +% If we disable the shortening, the arrows end up in the right place +\draw[->.>,spath/use={arrow,transform={yshift=-3cm}}, spath/arrow shortening=false]; +\end{tikzpicture} +\end{example} + \item Intersections. One of the main motivations for implementing the intersection routines was to provide a different way of drawing knots and links and similar diagrams. diff --git a/graphics/pgf/contrib/spath3/spath3_code.dtx b/graphics/pgf/contrib/spath3/spath3_code.dtx index 031c0e7bd3..3b0178db5a 100644 --- a/graphics/pgf/contrib/spath3/spath3_code.dtx +++ b/graphics/pgf/contrib/spath3/spath3_code.dtx @@ -5,7 +5,7 @@ %<*readme> ---------------------------------------------------------------- spath3 --- LaTeX3 functions for manipulating PGF soft paths -E-mail: loopspace@mathforge.org +E-mail: Andrew Stacey <loopspace@mathforge.org> Released under the LaTeX Project Public License v1.3c or later See http://www.latex-project.org/lppl.txt ---------------------------------------------------------------- @@ -27,7 +27,7 @@ As applications of its use, included are a package for drawing calligraphic path \preamble ---------------------------------------------------------------- spath3 --- Functions for manipulating PGF soft paths -E-mail: loopspace@mathforge.org +E-mail: Andrew Stacey <loopspace@mathforge.org> Released under the LaTeX Project Public License v1.3c or later See http://www.latex-project.org/lppl.txt ---------------------------------------------------------------- @@ -35,7 +35,7 @@ See http://www.latex-project.org/lppl.txt \endpreamble \postamble -Copyright (C) 2011-2021 by Andrew Stacey <loopspace@mathforge.org> +Copyright (C) 2011-2024 by Andrew Stacey <loopspace@mathforge.org> This work may be distributed and/or modified under the conditions of the LaTeX Project Public License (LPPL), either @@ -60,7 +60,7 @@ and the derived files spath3.ins, calligraphy.pdf knots.pdf spath3.pdf - README + README.txt \endpostamble \usedir{tex/latex/spath3} @@ -143,7 +143,7 @@ and the derived files spath3.ins, %</driver> % \fi % -% \CheckSum{10189} +% \CheckSum{10278} % % \CharacterTable % {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z @@ -171,6 +171,7 @@ and the derived files spath3.ins, % \changes{2.4}{2021/02/21}{Rejigged how the routines for using paths were implemented, added some more routines for joining paths.} % \changes{2.6}{2021/11/23}{Modified core routines to cope with a "true rectangle" path; added routines for splitting at a parametrised point.} % \changes{2.7}{2022/08/24}{Bug fixes} +% \changes{2.8}{2024/05/31}{Routine to disable arrow shortening, bug fixes} % % \DoNotIndex{\newcommand,\newenvironment} % @@ -198,7 +199,7 @@ and the derived files spath3.ins, % It was originally not really intended for use by end users but as a foundation on which other packages can be built. % However, over the years I've found myself using it at ever higher levels and so a set of interfaces has been designed using TikZ keys. % -% It also provides the engine that drives a few other packages, such as the \Verb+calligraphy+, \Verb+knot+, and \Verb+penrose+ packages. +% It also provides the engine that drives a few other packages, such as the \Verb+calligraphy+, \Verb+knot+, and \Verb+tilings+ (formerly, \Verb+penrose+) packages. % The first two of these are subpackages of this one. % The \Verb+calligraphy+ package simulates a calligraphic pen stroking a path. % The \Verb+knots+ package can be used to draw knot (and similar) diagrams. @@ -208,7 +209,7 @@ and the derived files spath3.ins, % \begin{itemize} % \item \Verb+calligraphy+ % \item \Verb+knots+ -% \item \Verb+penrose+ +% \item \Verb+tilings+ % \item \Verb+spath3+ (\emph{this} document is the code, there's another which focusses on usage) % \end{itemize} % @@ -259,7 +260,7 @@ and the derived files spath3.ins, \NeedsTeXFormat{LaTeX2e} \RequirePackage{expl3} \RequirePackage{pgf} -\ProvidesExplPackage {spath3} {2022/08/24} {2.7} {Functions for +\ProvidesExplPackage {spath3} {2024/05/31} {2.8} {Functions for manipulating PGF soft paths} \RequirePackage{xparse} % \end{macrocode} @@ -375,6 +376,13 @@ manipulating PGF soft paths} \bool_new:N \l_spath_movetorelevant_bool % \end{macrocode} % +% When manipulating soft paths, we might need to separate the shortening due to an arrow from when the path is rendered. +% +% \begin{macrocode} +\bool_new:N \l_spath_arrow_shortening_bool +\bool_set_true:N \l_spath_arrow_shortening_bool +% \end{macrocode} +% % The intersection routine can't happen inside a group so we need two token lists to hold the paths that we'll intersect. % % \begin{macrocode} @@ -457,7 +465,7 @@ manipulating PGF soft paths} { \tl_set:Nx \l_@@_tmpc_tl {\tl_head:N \l_@@_tmpa_tl} \tl_set:Nx \l_@@_tmpa_tl {\tl_tail:N \l_@@_tmpa_tl} - \tl_case:NnF \l_@@_tmpc_tl + \token_case_meaning:NnF \l_@@_tmpc_tl { \c_spath_moveto_tl { @@ -718,7 +726,7 @@ manipulating PGF soft paths} \int_set:Nn \l_@@_tmpa_int {0} \tl_map_inline:nn {#1} { \tl_set:Nn \l_@@_tmpa_tl {##1} - \tl_case:NnT \l_@@_tmpa_tl + \token_case_meaning:NnT \l_@@_tmpa_tl { \c_spath_lineto_tl {} \c_spath_curveto_tl {} @@ -763,7 +771,7 @@ manipulating PGF soft paths} \int_set:Nn \l_@@_tmpa_int {0} \tl_map_inline:nn {#1} { \tl_set:Nn \l_@@_tmpa_tl {##1} - \tl_case:Nn \l_@@_tmpa_tl + \token_case_meaning:Nn \l_@@_tmpa_tl { \c_spath_moveto_tl { @@ -910,7 +918,7 @@ manipulating PGF soft paths} } { \tl_set:Nx \l_@@_tmpb_tl {\tl_head:N \l_@@_tmpa_tl} - \tl_case:Nn \l_@@_tmpb_tl + \token_case_meaning:Nn \l_@@_tmpb_tl { \c_spath_moveto_tl { @@ -1102,7 +1110,7 @@ manipulating PGF soft paths} } { \tl_set:Nx \l_@@_tmpb_tl {\tl_head:N \l_@@_tmpa_tl} - \tl_case:Nn \l_@@_tmpb_tl + \token_case_meaning:Nn \l_@@_tmpb_tl { \c_spath_moveto_tl { @@ -1229,7 +1237,7 @@ manipulating PGF soft paths} \tl_set:Nx \l_@@_tmpc_tl {\tl_head:N \l_@@_tmpa_tl} \bool_set_false:N \l_@@_rect_bool - \tl_case:NnTF \l_@@_tmpc_tl + \token_case_meaning:NnTF \l_@@_tmpc_tl { \c_spath_moveto_tl { @@ -1679,8 +1687,8 @@ manipulating PGF soft paths} \tl_clear:N \l_@@_tmpa_tl \tl_put_right:Nn \l_@@_tmpa_tl { \ExplSyntaxOn - \tl_clear_new:N #1 - \tl_set:Nn #1 {#2} + \tl_gclear_new:N #1 + \tl_gset:Nn #1 {#2} \ExplSyntaxOff } \protected@write\@auxout{}{ @@ -3054,6 +3062,35 @@ manipulating PGF soft paths} } \cs_generate_variant:Nn \spath_gbake_shorten:N {c} % \end{macrocode} +% +% Shortening the path when it is baked can cause issues with arrows. +% Putting an arrow in a path definition affects the path because the path gets shortened so that the arrow ends where the path was meant to end. +% So an arrow affects the path definition, but the arrow is not itself part of the path so if an arrow is used when the path is defined and again when the path is used, the path will be shortened twice which might not be what is intended. +% Therefore it is useful to have a way to disable the shortening and place an arrow tip at the actual end of the line. +% The following code achieves that. +% +% Save the original command that computes the arrow shortening. +% \begin{macrocode} +\cs_set_eq:Nc \@@_pgf_arrow_compute_shortening:n {pgf@arrow@compute@shortening} +% \end{macrocode} +% +% After \verb+\pgf@arrow@compute@shortening+ then \verb+\pgf@xa+ is the amount to shorten the line by, so we will be setting that to 0pt. +% Then \verb+\pgf@xb+ is the length of the arrow head which is used to position the arrow and so before zeroing \verb+\pgf@xa+ we subtract it from \verb+\pgf@xb+ so that the arrow is placed so that its back point is at the current position. +% +% \begin{macrocode} +\cs_new_nopar:Npn \@@_arrow_compute_shortening:n #1 +{ + \@@_pgf_arrow_compute_shortening:n {#1} + \bool_if:NF \l_spath_arrow_shortening_bool + { + \dim_sub:cn {pgf@xb} {\dim_use:c {pgf@xa}} + \dim_zero:c {pgf@xa} + } +} + +\cs_set_eq:cN {pgf@arrow@compute@shortening} \@@_arrow_compute_shortening:n +% \end{macrocode} +% % \end{macro} % % \begin{macro}[internal]{ @@ -3209,7 +3246,7 @@ manipulating PGF soft paths} \tl_set:Nx \l_@@_tmpc_tl {\tl_head:N \l_@@_tmpa_tl} \tl_set:Nx \l_@@_tmpa_tl {\tl_tail:N \l_@@_tmpa_tl} - \tl_case:NnF \l_@@_tmpc_tl + \token_case_meaning:NnF \l_@@_tmpc_tl { \c_spath_closepath_tl { @@ -3930,7 +3967,7 @@ manipulating PGF soft paths} } { \tl_set:Nx \l_@@_tmpc_tl {\tl_head:N \l_@@_tmpa_tl} - \tl_case:NnF \l_@@_tmpc_tl + \token_case_meaning:NnF \l_@@_tmpc_tl { \c_spath_curvetoa_tl { @@ -4225,7 +4262,7 @@ manipulating PGF soft paths} { \tl_set:Nx \l_@@_tmpf_tl {\tl_head:N \l_@@_tmpe_tl} \tl_set:Nx \l_@@_tmpe_tl {\tl_tail:N \l_@@_tmpe_tl } - \tl_case:Nn \l_@@_tmpf_tl + \token_case_meaning:Nn \l_@@_tmpf_tl { \c_spath_lineto_tl { @@ -4279,7 +4316,7 @@ manipulating PGF soft paths} } { - \tl_case:Nn \l_@@_tmpf_tl + \token_case_meaning:Nn \l_@@_tmpf_tl { \c_spath_lineto_tl { @@ -5018,7 +5055,7 @@ manipulating PGF soft paths} \tl_clear:N \l_@@_tmpc_tl - \tl_case:Nn \l_@@_tmpb_tl + \token_case_meaning:Nn \l_@@_tmpb_tl { \c_spath_moveto_tl { @@ -5263,7 +5300,7 @@ manipulating PGF soft paths} \tl_clear:N \l_@@_tmpc_tl - \tl_case:Nn \l_@@_tmpb_tl + \token_case_meaning:Nn \l_@@_tmpb_tl { \c_spath_moveto_tl { @@ -6383,7 +6420,7 @@ manipulating PGF soft paths} \tl_map_inline:nn {#1} { \tl_set:Nn \l_@@_tmpb_tl {##1} - \tl_case:NnF \l_@@_tmpb_tl + \token_case_meaning:NnF \l_@@_tmpb_tl { \c_spath_moveto_tl { @@ -6516,10 +6553,14 @@ manipulating PGF soft paths} \cs_new_protected_nopar:Npn \spath_protocol_path:n #1 { \spath_minbb:Nn \l_@@_tmpa_tl {#1} - \exp_last_unbraced:NV \pgf@protocolsizes\l_@@_tmpa_tl + \dim_set:Nn \l_@@_tmpa_dim {\tl_item:Nn \l_@@_tmpa_tl {1}} + \dim_set:Nn \l_@@_tmpb_dim {\tl_item:Nn \l_@@_tmpa_tl {2}} + \pgf@protocolsizes\l_@@_tmpa_dim\l_@@_tmpb_dim \spath_maxbb:Nn \l_@@_tmpa_tl {#1} - \exp_last_unbraced:NV \pgf@protocolsizes\l_@@_tmpa_tl + \dim_set:Nn \l_@@_tmpa_dim {\tl_item:Nn \l_@@_tmpa_tl {1}} + \dim_set:Nn \l_@@_tmpb_dim {\tl_item:Nn \l_@@_tmpa_tl {2}} + \pgf@protocolsizes\l_@@_tmpa_dim\l_@@_tmpb_dim } \cs_generate_variant:Nn \spath_protocol_path:n {V} % \end{macrocode} @@ -6880,7 +6921,7 @@ manipulating PGF soft paths} } } { - \msg_warning:nnn { spath3 } { missing soft path } { #2 } + \msg_warning:nnx { spath3 } { missing soft path } { #2 } } \tl_use:N \l_@@_check_tl } @@ -9027,12 +9068,8 @@ manipulating PGF soft paths} % This puts a conditional around the \texttt{spot weld} key because when figuring out a knot drawing then we will initially want to render it without the spot weld to keep the number of components constant. % % \begin{macrocode} - draft~ mode/.is~ choice, - draft~ mode/true/.code={ - \bool_set_true:N \l_@@_draft_bool - }, - draft~ mode/false/.code={ - \bool_set_false:N \l_@@_draft_bool + draft~ mode/.code={ + \@@_set_bool:Nn \l_@@_draft_bool {#1} }, maybe~ spot~ weld/.code={ \bool_if:NF \l_@@_draft_bool @@ -9113,6 +9150,12 @@ manipulating PGF soft paths} }, % \end{macrocode} % +% \begin{macrocode} + arrow~ shortening/.code={ + \@@_set_bool:Nn \l_spath_arrow_shortening_bool {#1} + }, +% \end{macrocode} +% % For single argument commands which take a path as their argument, set the default to be \Verb+current+ so that they use the current path. % % \begin{macrocode} @@ -9616,7 +9659,7 @@ manipulating PGF soft paths} \dim_set:Nn \l_@@_tmpb_dim {\tl_item:Nn \l_@@_tmpa_tl {3}} \tl_set:Nx \l_@@_tmpb_tl {\tl_item:Nn \l_@@_tmpa_tl {4}} - \tl_case:NnF \l_@@_tmpb_tl + \token_case_meaning:NnF \l_@@_tmpb_tl { \c_spath_lineto_tl { @@ -9668,7 +9711,7 @@ manipulating PGF soft paths} \dim_set:Nn \l_@@_tmpb_dim {\tl_item:Nn \l_@@_tmpa_tl {-1}} \tl_set:Nx \l_@@_tmpb_tl {\tl_item:Nn \l_@@_tmpa_tl {-3}} - \tl_case:NnF \l_@@_tmpb_tl + \token_case_meaning:NnF \l_@@_tmpb_tl { \c_spath_lineto_tl { @@ -10411,6 +10454,15 @@ manipulating PGF soft paths} } } +\cs_new_nopar:Npn \knot_show_strand:n #1 +{ + \bool_if:NT \l_@@_debugging_bool + { + \iow_term:n {===Knot~ debug: #1===} + \spath_show:v {knot #1} + } +} + \cs_generate_variant:Nn \knot_debug:n {x} % \end{macrocode} % \end{macro} @@ -10592,6 +10644,7 @@ manipulating PGF soft paths} knot~ diagram/only~ when~ rendering/.try, only~ when~ rendering/.try, } + \knot_show_strand:n {strand #1} \spath_tikz_path:Vv \l_@@_tmpa_tl {knot strand #1} \group_end: \endpgfscope @@ -10629,6 +10682,7 @@ manipulating PGF soft paths} } { \tl_clear:N \l_@@_tmpa_tl + \spath_remove_empty_components:c {knot strand #1} \spath_initialpoint:Nv \l_@@_tmpa_tl {knot strand #1} \tl_put_left:NV \l_@@_tmpa_tl \c_spath_moveto_tl \spath_segments_to_seq:Nv \l_@@_segments_seq {knot strand #1} @@ -10649,7 +10703,7 @@ manipulating PGF soft paths} { \knot_debug:n {knot~ split~ self~ intersects} \tl_set:Nx \l_@@_tmpc_tl {\tl_item:nn {#1} {4}} - \tl_case:NnF \l_@@_tmpc_tl + \token_case_meaning:NnF \l_@@_tmpc_tl { \c_spath_curvetoa_tl { @@ -11271,6 +11325,7 @@ manipulating PGF soft paths} \int_set_eq:NN \l_@@_component_start_int \g_@@_filaments_int \int_incr:N \l_@@_component_start_int \tl_set_eq:Nc \l_@@_tmpa_tl {l_@@_options_strand #1} + \spath_remove_empty_components:c {knot strand #1} \spath_segments_to_seq:Nv \l_@@_segments_seq {knot strand #1} \seq_map_function:NN \l_@@_segments_seq \knot_save_filament:N } @@ -11284,7 +11339,7 @@ manipulating PGF soft paths} { \knot_debug:n {knot~ save~ filament} \tl_set:Nx \l_@@_tmpb_tl {\tl_item:nn {#1} {4}} - \tl_case:NnF \l_@@_tmpb_tl + \token_case_meaning:NnF \l_@@_tmpb_tl { \c_spath_moveto_tl { diff --git a/graphics/pgf/contrib/spath3/spath3_code.pdf b/graphics/pgf/contrib/spath3/spath3_code.pdf Binary files differindex f773a0b534..840b7842d3 100644 --- a/graphics/pgf/contrib/spath3/spath3_code.pdf +++ b/graphics/pgf/contrib/spath3/spath3_code.pdf diff --git a/graphics/pgf/contrib/sunpath/README.md b/graphics/pgf/contrib/sunpath/README.md new file mode 100644 index 0000000000..108f45025d --- /dev/null +++ b/graphics/pgf/contrib/sunpath/README.md @@ -0,0 +1,60 @@ +# `sunpath` -- Draw Sun Path # + + +(C) 2024 Hồng-Phúc Bùi + + +## Description ## + +This package provides tool to draw a sunpath chart like this: + +![sunpath chart](https://raw.githubusercontent.com/hpb-htw/sunpath/refs/heads/master/sunpath.track.svg) + +## Licence ## + + +This package may be distributed and/or modified under the conditions of the +LaTeX Project Public License (LPPL), either version 1.3c of this +License or any later version. The latest version +of this license is in the file https://www.latex-project.org/lppl.txt + +## Build and Install (for Distributor) ## + + +* To build the style file `sunpath.sty` just run **one** of + +``` +latex sunpath.ins +pdflatex sunpath.ins +xelatex sunpath.ins +lualatex sunpath.ins +``` + +then you can copy `sunpath.sty` to your local `texmf` tree, where latex can find it. + +* To create PDF Document manual you must use `lualatex` via `l3build doc`: + +``` +l3build doc +``` + +You also need the TikZ-library hobby to create the curve. + +``` +\usetikzlibrary{hobby} +``` + +(`lualatex` because of my name, really ego right! It needs unicode to be typeset correctly.) + +## Development ## + + +I try to use latex3 as much as posible. You can use + +``` +l3build doc +``` + +to create the style file and documentation files at once. You can also (like I also do) use `make` +to call repeatly tasks. + diff --git a/graphics/pgf/contrib/sunpath/horizontal-coordinate.pdf b/graphics/pgf/contrib/sunpath/horizontal-coordinate.pdf Binary files differnew file mode 100644 index 0000000000..676516d93d --- /dev/null +++ b/graphics/pgf/contrib/sunpath/horizontal-coordinate.pdf diff --git a/graphics/pgf/contrib/sunpath/horizontal-coordinate.tex b/graphics/pgf/contrib/sunpath/horizontal-coordinate.tex new file mode 100644 index 0000000000..2d121e761e --- /dev/null +++ b/graphics/pgf/contrib/sunpath/horizontal-coordinate.tex @@ -0,0 +1,183 @@ +\documentclass[tikz]{standalone} + +\usepackage{fontspec} +\usepackage{mathtools} +\usepackage{unicode-math} +\usepackage{siunitx} + +\newcommand{\az}{\ensuremath{\Phi}} +\newcommand{\el}{\ensuremath{\theta}} + +% Tikz Style +\usepackage{tikz} + +\usetikzlibrary{decorations.markings} +\usetikzlibrary{arrows.meta} + +\usepackage{pgfplots} +\pgfplotsset{ + compat=1.18 + ,width=15cm + ,lua debug +} + +\definecolor{celestial}{rgb}{1,0,1}%{0.0, 0.51, 0.5} +\definecolor{elevation}{rgb}{0,1,0}%{0.6, 0.4, 0.8} +\definecolor{horizon}{rgb}{0,0,1}%{0.54, 0.81, 0.94} +\definecolor{sun}{rgb}{0.83, 0.0, 0.25} + +\tikzstyle{help circle} = [dashed, thick] +\tikzstyle{coordinate curve} = [ultra thick] +\tikzstyle{sun position} = [color=sun,ultra thick] +\tikzstyle{navi direction} = [font=\sffamily\Large] +\tikzstyle{coordinate angle} = [font=\Large] +\tikzstyle{base plane} = [font=\sffamily] + +\begin{document} +\begin{tikzpicture} +\begin{axis}[view={5}{5} + ,axis lines=none, + ,plot box ratio={1 1 1} + ,xlabel=$x$ + ,ylabel=$y$ + ,zlabel=$z$ + ,xmin=-1.4 + ,xmax=1.4 +% ,ymin=-1.2 +% ,ymax=1.2 +% ,zmin=-1.2 +% ,zmax=1.2 + ,declare function={ +% Sun position + azimuth=-110; % Positive = westward from north + elevation = 65; % Positive = from Horizon to Zenith + sunx = cos(azimuth)*cos(elevation); + suny = sin(azimuth)*cos(elevation); + sunz = sin(elevation); +% Text Az coordinates + textazx = cos(3/5*azimuth); + textazy = sin(3/5*azimuth); + textazz = 0; +% Text El coordinates + textelx = cos(azimuth)*cos(elevation/2); + textely = sin(azimuth)*cos(elevation/2); + textelz = sin(elevation/2); +% Celestial Meridian + ucx = 1; + ucy = 0; + ucz = 0; +% + vcx = 0; + vcy = 0; + vcz = 1; + celestialx(\t) = cos(\t)*ucx + sin(\t)*vcx; + celestialy(\t) = cos(\t)*ucy + sin(\t)*vcy; + celestialz(\t) = cos(\t)*ucz + sin(\t)*vcz; +% Horizon => Azimut + uhx = 1; + uhy = 0; + uhz = 0; +% + vhx = 0; + vhy = 1; + vhz = 0; + horizonx(\t) = cos(\t)*uhx + sin(\t)*vhx; + horizony(\t) = cos(\t)*uhy + sin(\t)*vhy; + horizonz(\t) = cos(\t)*uhz + sin(\t)*vhz; +% Elevation + uex = cos(azimuth); + uey = sin(azimuth); + uez = 0; +% + vex = 0; + vey = 0; + vez = 1; + elevationx(\t) = cos(\t)*uex + sin(\t)*vex; + elevationy(\t) = cos(\t)*uey + sin(\t)*vey; + elevationz(\t) = cos(\t)*uez + sin(\t)*vez; + } +] +% +\draw[->] (0,0,0) -- (1.1,0,0) node[anchor=west,navi direction] {North}; +\draw[->] (0,0,0) -- (0,-1.5,0) node[anchor=north,navi direction] {East}; +\draw[->] (0,0,0) -- (0,0,1.1) node[anchor=south,navi direction] {Zenith}; +\node at ( 0.71, 0,0.71)[anchor=west,outer sep=1ex,base plane] {Meridian}; %0.71 app sqrt(2)/2 +\node at (-0.71, 0.71,0) [anchor=south,base plane] {Horizon}; +% Plot the Meridian through Nord +\addplot3 [ + domain=0:360, + samples=60, + samples y=1, + variable=t, + celestial,help circle +] ( + {celestialx(t)}, + {celestialy(t)}, + {celestialz(t)} +); +% Plot the horizon circle +\addplot3 [ + domain=0:360, + samples=60, + samples y=1, + variable=t, + horizon,help circle +] ( + {horizonx(t)}, + {horizony(t)}, + {horizonz(t)} +); +% Plot the azimuth curve +\addplot3 [ + domain=0:azimuth+0.5, + samples=60, + samples y=1, + variable=t, + horizon,coordinate curve, + postaction={decorate}, + decoration={markings, + mark=at position 0.55 with {\arrow{Latex[round]}} + } +] ( + {horizonx(t)}, + {horizony(t)}, + {horizonz(t)} +); +% Plot the great circle through the sun +\addplot3 [ + domain=0:360, + samples=60, + samples y=1, + variable=t, + elevation,help circle +] ( + {elevationx(t)}, + {elevationy(t)}, + {elevationz(t)} +); +% Plot the elevation curve +\addplot3 [ + domain=0.5:elevation, + samples=60, + samples y=1, + variable=t, + elevation,coordinate curve, + postaction={decorate}, + decoration={markings, + mark=at position 0.5 with {\arrow{Latex[round]}} + } +] ( + {elevationx(t)}, + {elevationy(t)}, + {elevationz(t)} +) ; +\draw [-{Latex[round]}, sun position] (0,0,0) -- (sunx, suny, sunz) node[anchor=south east,inner sep=0] {$\odot$}; +\draw [sun position, thin](0,0,0) -- (uex, uey, 0); +\node at (textazx, textazy, textazz) [anchor=north,coordinate angle] {\az}; +\node at (textelx, textely, textelz) [anchor=east ,coordinate angle] {\el}; +\end{axis} +\end{tikzpicture} + +\end{document} + + diff --git a/graphics/pgf/contrib/sunpath/releasenote.txt b/graphics/pgf/contrib/sunpath/releasenote.txt new file mode 100644 index 0000000000..e13301084a --- /dev/null +++ b/graphics/pgf/contrib/sunpath/releasenote.txt @@ -0,0 +1,2 @@ +* [breaking change] Rename prefix draw to sp in exposed command +* [intern] let build.lua also check release date diff --git a/graphics/pgf/contrib/sunpath/sunpath.article.pdf b/graphics/pgf/contrib/sunpath/sunpath.article.pdf Binary files differnew file mode 100644 index 0000000000..0f68980307 --- /dev/null +++ b/graphics/pgf/contrib/sunpath/sunpath.article.pdf diff --git a/graphics/pgf/contrib/sunpath/sunpath.article.tex b/graphics/pgf/contrib/sunpath/sunpath.article.tex new file mode 100644 index 0000000000..0904568fec --- /dev/null +++ b/graphics/pgf/contrib/sunpath/sunpath.article.tex @@ -0,0 +1,39 @@ +\documentclass{article} + +\usepackage{fontspec} +\usepackage{luaotfload} +\usepackage{tikz} +\usepackage{graphicx} +\usepackage{float} + +\usepackage{sunpath} + +\usetikzlibrary{hobby} % this library let one connect points to curve. + +\newcommand{\TikZ}{Ti\textit{k}Z} + +\title{ + \textsf{sunpath} -- Draw Sun Path\\ + (Test Compatibility only) +}% +% +\author{% + Hồng-Phúc Bùi% +} + + + +\begin{document} +% +\parindent0pt +% +\maketitle +\tableofcontents + +\section{Object} + +This file tests if this package can be used within a \texttt{article} class. + +\input{sunpath.docpart.tex} + +\end{document} diff --git a/graphics/pgf/contrib/sunpath/sunpath.docpart.tex b/graphics/pgf/contrib/sunpath/sunpath.docpart.tex new file mode 100644 index 0000000000..810bc8c6b9 --- /dev/null +++ b/graphics/pgf/contrib/sunpath/sunpath.docpart.tex @@ -0,0 +1,447 @@ +\section{Documentation} + +\subsection{Context and Terms} +The position of the sun from perspective of an observer is defined by two parameters: + +\begin{itemize} + \item the azimuth $\Phi$, which tells the observer, how far (in degree) he must turn around from the North direction, + \item the altitude $\theta$, which tells the observer, how height (in degree) about the horizon he must look to see the sun. +\end{itemize} +The azimuth can take a value in the interval $[0,360)$. +The altitude can take a value in the interval $[0,90]$, whereas 0 is the horizon, 90 is the zenith. +We do not care so much about how far is the sun, so we normalize this distance to 1. + + +The figure~\ref{fig:hz-coordinate} shows these parameter. +The coordinate system, which takes the position of the observer as the centre, +and the observer's local horizon as the fundamental plane, +is called horizontal coordinate system.\footnote{dt.: topozentrisches Koordinatensystem} + +\begin{figure}[H] +\centering +\includegraphics[scale=0.75]{horizontal-coordinate.pdf} +\caption{Horizontal coordinate system} +\label{fig:hz-coordinate} +\end{figure} + +In this package, the cardinal points have specifics values of azimuth as following: + +\begin{tabular}{c c c c} +North & East & South & West \\ +0° & 90° & 180° & 270° +\end{tabular} + + +The projection of the sun on the horizon plane is a point, which can be defined by two parameters: +\begin{itemize} +\item the angle $\Phi$, +\item the distance $r = \cos(\theta)$ from the centre to the sun. +\end{itemize} + +Figure~\ref{fig:sun-projection} shows the projection of the sun on the horizontal plane. +If we track the position of sun on the horizontal plane changes from time to time, we will get a curve. +This curve is called the sun path. +A chart which shows position of the sun from time to time is called a sun path chart. +Of course there are many type of sun path chart. +This package provides tools to plot sun path on the horizontal plane. + +\begin{figure}[H] +\centering +\begin{tikzpicture}[spradius=3] +\spcrosshair +\spaltitudecircle{{0}} +\spgeodirection[0pt] +\path[draw=red,fill=red](sunpath cs:azi=110,alt=66) circle[radius=2pt] ; +\end{tikzpicture} +\caption{Projection of the sun on the horizon plane} +\label{fig:sun-projection} +\end{figure} + + +\subsection{Draw a Sun path chart} + +Figure~\ref{fig:sun-projection} is a very rudimentary sun path chart. +There is neither scalar, nor time on the chart. +A more usable Sun path chart may look like one in the figure~\ref{fig:full-sun-path-chart}. +In this section we will create this chart. + + +\begin{figure}[H] +\centering +\begin{tikzpicture} +\spcrosshair +\spaltitudecircle{{0,10,...,80,85}} +\spazimuthline{{0,10,...,360}}{85}{70} +\spazimuthline{{0,5,...,360}}{80}{0} + +\spazimuthtick + +\spgeodirection +\spaltitudelabel{{10,20,...,80,85}} +\spazimuthlabel{{0,15,...,350}} + +\path[draw=red,fill=red](sunpath cs:azi=110,alt=66) circle[radius=2pt] node[below] {{9:30}}; +\end{tikzpicture} +\caption{A Sun path chart} +\label{fig:full-sun-path-chart} +\end{figure} + +\subsubsection{Outlines} + +User has to place \verb:\usepackage{sunpath}: in the preamble part of the document. + +The chart is a \TikZ-picture, so we need a \texttt{tikzpicture}-environment. +We can also customize the distance from the centre of the chart to the horizon line by setup the option \texttt{spradius}. +By default it is 5.5 in PGF xy coordinate. +In this example we make it a little bigger: + +\marginpar{\texttt{spradius}} +\begin{verbatim} +\begin{tikzpicture}[spradius=6] +\end{tikzpicture} +\end{verbatim} + +We also need the crosshair, the horizon line --in this type of sun path chart it is a circle--, +the fours geographic direction. +This can be done by adding more commands into the \texttt{tikzpicture} + +\begin{verbatim} +\begin{tikzpicture}[spradius=6] +\spcrosshair +\spaltitudecircle{{0}} +\spgeodirection +\end{tikzpicture} +\end{verbatim} + +\marginpar{\texttt{drawcrosshair\\ drawgeodirection\\ drawaltitudecircle}} +\begin{tikzpicture}[spradius=6] +\spcrosshair +\spaltitudecircle{{0}} +\spgeodirection +\end{tikzpicture} + + +Man has to pay attention to the double curry brackets in the command \texttt{drawaltitudecircle}. +The outer brackets delimit the argument of the command. +The argument of the command is a valid \TikZ-range, which is used in a \verb:\foreach: command, +so it has be placed in between a pair of curry bracket. +That is the inner brackets. + + +\subsubsection{Scalar and labels} + + +As the name of the commando says, we can also draw more than the horizon line by adding some values of altitude in the range of the argument of the command \verb|\spaltitudecircle|. +For example \verb:\spaltitudecircle{{0,10,...,80,85}}: draws 10 circles of altitude. + +\marginpar{\texttt{drawaltitudecircle}} +\begin{verbatim} +\begin{tikzpicture}[spradius=6] +\spcrosshair +\spaltitudecircle{{0,10,...,80,85}} +\spgeodirection +\end{tikzpicture} +\end{verbatim} + +\begin{tikzpicture}[spradius=6] +\spcrosshair +\spaltitudecircle{{0,10,...,80,85}} +\spgeodirection +\end{tikzpicture} + + +We can use the command \verb:\drawazumuthline{r}{h}{l}: to draw azimuth lines in range \verb:r:, +from the higher altitude \verb:h: to the lower altitude \verb:l:. + +For example + +\begin{itemize} + \item \verb:\spazimuthline{{0,10,...,360}}{85}{70}: draws every 10° azimuth from the 85° altitude to to 70° altitude. + \item \verb:\spazimuthline{{0,5,...,360}}{80}{0}: draws every 5° azimuth from the 80° altitude to to 0° altitude. +\end{itemize} + +\begin{verbatim} +\begin{tikzpicture}[spradius=6] +\spcrosshair +\spaltitudecircle{{0,10,...,80,85}} +\spazimuthline{{0,10,...,360}}{85}{70} +\spazimuthline{{0,5,...,360}}{80}{0} + +\spgeodirection +\end{tikzpicture} +\end{verbatim} + +\marginpar{\texttt{drawazimuthline}} +\begin{tikzpicture}[spradius=6] +\spcrosshair +\spaltitudecircle{{0,10,...,80,85}} +\spazimuthline{{0,10,...,360}}{85}{70} +\spazimuthline{{0,5,...,360}}{80}{0} + +\spgeodirection +\end{tikzpicture} + +To draw azimuth ticks outside the horizon line, we can use +\verb:\spazimuthtick:. +This command expects for now no argument. + +\begin{verbatim} +\begin{tikzpicture}[spradius=6] +\spcrosshair +\spaltitudecircle{{0,10,...,80,85}} +\spazimuthline{{0,10,...,360}}{85}{70} +\spazimuthline{{0,5,...,360}}{80}{0} +\spazimuthtick + +\spgeodirection +\end{tikzpicture} +\end{verbatim} + +\marginpar{\texttt{drawazimuthtick}} +\begin{tikzpicture}[spradius=6] +\spcrosshair +\spaltitudecircle{{0,10,...,80,85}} +\spazimuthline{{0,10,...,360}}{85}{70} +\spazimuthline{{0,5,...,360}}{80}{0} +\spazimuthtick + +\spgeodirection +\end{tikzpicture} + + +To draw labels of azimuth lines and altitude circles in the chart, we can use the commands + +\verb:\spaltitudelabel{r}: and + +\verb:\spazimuthlabel{r}:. + +\begin{tikzpicture}[spradius=6] +\spcrosshair +\spaltitudecircle{{0,10,...,80,85}} +\spazimuthline{{0,10,...,360}}{85}{70} +\spazimuthline{{0,5,...,360}}{80}{0} +\spazimuthtick + +\spaltitudelabel{{10,20,...,80,85}} +\spazimuthlabel{{0,15,...,350}} +\spgeodirection +\end{tikzpicture} + +That it's, now we have a nice chart, on which we can draw positions of the sun from time to time. + +\subsubsection{Position of the sun} + +We can easily plot the position of the sun in the chart with the coordinate \texttt{sunpath}, +if the azimuth and the altitude are given. +For example, to plot the position of the sun with 150° Azimuth and 22° Altitude, +we just use the \texttt{path} command as following: + +\verb|\path[fill=red,draw=red] (sunpath cs:azi=150,alt=22);| + +The result would be + +\begin{verbatim} +% ... +\path[fill=red,draw=red] (sunpath cs:azi=150,alt=35) circle[radius=2pt]; +\spaltitudelabel{{10,20,...,80,85}}[160] +% ... +\end{verbatim} + +\marginpar{\texttt{sunpath cs}} +\begin{tikzpicture}[spradius=6] +\spcrosshair +\spaltitudecircle{{0,10,...,80,85}} +\spazimuthline{{0,10,...,360}}{85}{70} +\spazimuthline{{0,5,...,360}}{80}{0} +\spazimuthtick + +\path[fill=red,draw=red] (sunpath cs:azi=150,alt=35) circle[radius=2pt]; + +\spaltitudelabel{{10,20,...,80,85}}[160] +\spazimuthlabel{{0,15,...,350}} +\spgeodirection +\end{tikzpicture} + +The command \verb:\spaltitudelabel: can also take an optional argument to set altitude label on other azimuth. +This can be useful if the labels cover distract important points on chart. +In this chart it is set to be 160°. So one can easily read the azimuth of the sun on the chart. + +We can also connect the position of the sun to a path, for example with the positions given in the following table + +{\ttfamily +\begin{tabular}{c c c} +Time & Azimuth & Altitude \\ +07:44 & 98.968673 & -0.208672 \\ +08:00 & 102.009695 & 2.035492 \\ +10:00 & 126.513583 & 19.499874 \\ +12:00 & 156.854847 & 31.593335 \\ +14:00 & 192.292832 & 33.425294 \\ +16:00 & 224.708002 & 24.034984 \\ +18:00 & 250.626597 & 7.619801 \\ +18:53 & 260.810553 & -0.244637 \\ +\end{tabular} +} + +we can get a sun path like this: + +\begin{tikzpicture}[spradius=6] +\tikzset{ + sunpath curve/.style={draw,fill=red}, + sunpath point/.style={radius=2pt,draw=red}, + sunpath node/.style={below,inner sep=0.5pt,outer sep=4.5pt,fill=white} +} +\spcrosshair +\spaltitudecircle{{0,10,...,80,85}} +\spazimuthline{{0,10,...,360}}{85}{70} +\spazimuthline{{0,5,...,360}}{80}{0} +\spazimuthtick + +\path[sunpath curve] + (sunpath cs:azi=98.968673,alt=-0.208672) circle[sunpath point] node[sunpath node]{ { 07:44 } } +--(sunpath cs:azi=102.009695,alt=2.035492) circle[sunpath point] node[sunpath node]{ { 08:00 } } +--(sunpath cs:azi=126.513583,alt=19.499874) circle[sunpath point] node[sunpath node]{ { 10:00 } } +--(sunpath cs:azi=156.854847,alt=31.593335) circle[sunpath point] node[sunpath node]{ { 12:00 } } +--(sunpath cs:azi=192.292832,alt=33.425294) circle[sunpath point] node[sunpath node]{ { 14:00 } } +--(sunpath cs:azi=224.708002,alt=24.034984) circle[sunpath point] node[sunpath node]{ { 16:00 } } +--(sunpath cs:azi=250.626597,alt=7.619801) circle[sunpath point] node[sunpath node]{ { 18:00 } } +--(sunpath cs:azi=260.810553,alt=-0.244637) circle[sunpath point] node[sunpath node]{ { 18:53 } } +; + +\spaltitudelabel{{10,20,...,80,85}} +\spazimuthlabel{{0,15,...,350}} +\spgeodirection +\end{tikzpicture} + +But this chart is not nice. +If the data is machine readable, we can generate all stuffs of the chart automatically. +This chart below is generated from the table above. +Just use your favourite programming language to process sun data. + +\begin{tikzpicture}[spradius=6] +\tikzset{ + sun path curve/.style={draw=red!20,thick}, + sun point/.style={radius=2pt,draw=red,fill=red}, + sun label/.style={below,fill=white,outer sep=4pt,text=red}, +} +\spcrosshair +\spaltitudecircle{{0,10,...,80,85}} +\spazimuthline{{0,10,...,360}}{85}{70} +\spazimuthline{{0,5,...,360}}{80}{0} +\spazimuthtick + +\coordinate (P0) at (sunpath cs:azi=98.968673,alt=-0.208672); +\coordinate (P1) at (sunpath cs:azi=102.009695,alt=2.035492); +\coordinate (P2) at (sunpath cs:azi=126.513583,alt=19.499874); +\coordinate (P3) at (sunpath cs:azi=156.854847,alt=31.593335); +\coordinate (P4) at (sunpath cs:azi=192.292832,alt=33.425294); +\coordinate (P5) at (sunpath cs:azi=224.708002,alt=24.034984); +\coordinate (P6) at (sunpath cs:azi=250.626597,alt=7.619801); +\coordinate (P7) at (sunpath cs:azi=260.810553,alt=-0.244637); +\path[sun point] (P0) circle; +\path[sun point] (P1) circle; +\path[sun point] (P2) circle; +\path[sun point] (P3) circle; +\path[sun point] (P4) circle; +\path[sun point] (P5) circle; +\path[sun point] (P6) circle; +\path[sun point] (P7) circle; +\node[sun label,anchor=270-98.968673] at (P0) {07:44}; +\node[sun label,anchor=270-102.009695] at (P1) {08:00}; +\node[sun label,anchor=270-126.513583] at (P2) {10:00}; +\node[sun label,anchor=270-156.854847] at (P3) {12:00}; +\node[sun label,anchor=270-192.292832] at (P4) {14:00}; +\node[sun label,anchor=270-224.708002] at (P5) {16:00}; +\node[sun label,anchor=270-250.626597] at (P6) {18:00}; +\node[sun label,anchor=270-260.810553] at (P7) {18:53}; +\path[sun path curve] (P0) to [curve through={ (P1) .. (P2) .. (P3) .. (P4) .. (P5) .. (P6) }] (P7) ; + +\spaltitudelabel{{10,20,...,80,85}}[170] +\spazimuthlabel{{0,15,...,350}} +\spgeodirection +\end{tikzpicture} + +\vfill\newpage +The part, which makes the chart nicer, is there: + +\begin{verbatim} +%... +\coordinate (P0) at (sunpath cs:azi=98.968673,alt=-0.208672); +\coordinate (P1) at (sunpath cs:azi=102.009695,alt=2.035492); +\coordinate (P2) at (sunpath cs:azi=126.513583,alt=19.499874); +\coordinate (P3) at (sunpath cs:azi=156.854847,alt=31.593335); +\coordinate (P4) at (sunpath cs:azi=192.292832,alt=33.425294); +\coordinate (P5) at (sunpath cs:azi=224.708002,alt=24.034984); +\coordinate (P6) at (sunpath cs:azi=250.626597,alt=7.619801); +\coordinate (P7) at (sunpath cs:azi=260.810553,alt=-0.244637); +\path[sun point] (P0) circle; +\path[sun point] (P1) circle; +\path[sun point] (P2) circle; +\path[sun point] (P3) circle; +\path[sun point] (P4) circle; +\path[sun point] (P5) circle; +\path[sun point] (P6) circle; +\path[sun point] (P7) circle; +\node[sun label,anchor=270-98.968673] at (P0) {07:44}; +\node[sun label,anchor=270-102.009695] at (P1) {08:00}; +\node[sun label,anchor=270-126.513583] at (P2) {10:00}; +\node[sun label,anchor=270-156.854847] at (P3) {12:00}; +\node[sun label,anchor=270-192.292832] at (P4) {14:00}; +\node[sun label,anchor=270-224.708002] at (P5) {16:00}; +\node[sun label,anchor=270-250.626597] at (P6) {18:00}; +\node[sun label,anchor=270-260.810553] at (P7) {18:53}; +\path[sun path curve] (P0) to [curve through={ + (P1) .. (P2) .. (P3) .. (P4) .. (P5) .. (P6) + }] + (P7) ; +%... +\end{verbatim} + +To set the altitude scale (and also the altitude lines) equidistance, just use the option \verb|altitude mapping=equidistance|. +The chart above with same data looks like the chart below with this option. + +\marginpar{\texttt{altitude mapping}} \texttt{ = equidistance} + +\begin{tikzpicture}[spradius=6,altitude mapping=equidistance] +\tikzset{ + sun path curve/.style={draw=red!20,thick}, + sun point/.style={radius=2pt,draw=red,fill=red}, + sun label/.style={below,fill=white,outer sep=4pt,text=red}, +} +\spcrosshair +\spaltitudecircle{{0,10,...,80,85}} +\spazimuthline{{0,10,...,360}}{85}{70} +\spazimuthline{{0,5,...,360}}{80}{0} +\spazimuthtick + +\coordinate (P0) at (sunpath cs:azi=98.968673,alt=-0.208672); +\coordinate (P1) at (sunpath cs:azi=102.009695,alt=2.035492); +\coordinate (P2) at (sunpath cs:azi=126.513583,alt=19.499874); +\coordinate (P3) at (sunpath cs:azi=156.854847,alt=31.593335); +\coordinate (P4) at (sunpath cs:azi=192.292832,alt=33.425294); +\coordinate (P5) at (sunpath cs:azi=224.708002,alt=24.034984); +\coordinate (P6) at (sunpath cs:azi=250.626597,alt=7.619801); +\coordinate (P7) at (sunpath cs:azi=260.810553,alt=-0.244637); +\path[sun point] (P0) circle; +\path[sun point] (P1) circle; +\path[sun point] (P2) circle; +\path[sun point] (P3) circle; +\path[sun point] (P4) circle; +\path[sun point] (P5) circle; +\path[sun point] (P6) circle; +\path[sun point] (P7) circle; +\node[sun label,anchor=270-98.968673] at (P0) {07:44}; +\node[sun label,anchor=270-102.009695] at (P1) {08:00}; +\node[sun label,anchor=270-126.513583] at (P2) {10:00}; +\node[sun label,anchor=270-156.854847] at (P3) {12:00}; +\node[sun label,anchor=270-192.292832] at (P4) {14:00}; +\node[sun label,anchor=270-224.708002] at (P5) {16:00}; +\node[sun label,anchor=270-250.626597] at (P6) {18:00}; +\node[sun label,anchor=270-260.810553] at (P7) {18:53}; +\path[sun path curve] (P0) to [curve through={ (P1) .. (P2) .. (P3) .. (P4) .. (P5) .. (P6) }] (P7) ; + +\spaltitudelabel{{10,20,...,80,85}}[170] +\spazimuthlabel{{0,15,...,350}} +\spgeodirection +\end{tikzpicture} + + diff --git a/graphics/pgf/contrib/sunpath/sunpath.dtx b/graphics/pgf/contrib/sunpath/sunpath.dtx new file mode 100644 index 0000000000..916443f98f --- /dev/null +++ b/graphics/pgf/contrib/sunpath/sunpath.dtx @@ -0,0 +1,353 @@ +% \iffalse meta-comment +% +% File: sunpath.dtx Copyright (C) 2024 Hong-Phuc Bui +% +% It 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 +% +% +% ----------------------------------------------------------------------- +% +% The development version of the bundle can be found at +% +% https://github.com/hpb-htw/sunpath +% +% for those people who are interested. +% +% ----------------------------------------------------------------------- +% \fi +% +% ^^A To get version of latex run: +% ^^A `latex '\typeout{\fmtversion}\stop' | grep LaTeX2e` +% +% \iffalse +%<package>\NeedsTeXFormat{LaTeX2e}[2022/11/01] +%<package>\ProvidesPackage{sunpath}[2024/10/20 v0.5 Draw Sun Path] +% \fi + +% \changes{v0.5} +% {2024/10/20} +% {replace prefix "draw" in exposed commands by "sp"} +% \changes{v0.4-Alpha} +% {2024/10/20} +% {rename option altitude projection to altitude mapping} +% \changes{v0.3-Alpha} +% {2024/10/16} +% {add style option in exposed commands; +% let build.lua read version information from sunpath.dtx file} +% +% \changes{v0.2-Alpha} +% {2024/10/16} +% {Small fixes in README.md and document} +% +% \changes{v0.1-Alpha} +% {2024/10/10} +% {Initial implementation} + + +% \section{Implementation} +% +% \subsection{Package Dependenies} +% +% \begin{macrocode} +\RequirePackage{expl3} +\RequirePackage{tikz} +% \end{macrocode} +% +% Load necsessary \texttt{tikz}-libraries. +% \begin{macrocode} +\usetikzlibrary{calc,math,through} +% \end{macrocode} + + + + +% \subsection{\texttt{tikz}-Options for the new coordinate system} +% Setup options for \texttt{tikzpicture} environment. +% +% \DescribeMacro{spradius} The radius of the 0° Altitude circle, default 5.5. +% This value can be accessed via macro \verb:\spradius:. +% +% \DescribeMacro{altitude mapping} +% How the altitude of the sun is mapped on the sunpath diagram. +% This mapping is a function $f(\theta): [-90,90] \to [0, r]$, where $r$ is saved in \verb|\spradius|. +% +% Valid values are \texttt{spherical} and \texttt{equidistance}. +% Its default value is \texttt{spherical}. +% +% This value can be accessed via macro \verb:\altmapping:. + +% These options can be used like: +% +% \begin{verbatim} +% \begin{tikzpicture}[spradius=6,altitude projection=equidistance] +% \coordinate (sunrise) at (sunpath cs:azi=105, alt=66.6); +% \end{tikzpicture} +% \end{verbatim} +% +% \begin{macrocode} +\pgfkeys{/tikz/.cd, + spradius/.store in=\spradius, + spradius=5.5, + altitude mapping/.store in = \altmapping, + altitude mapping=spherical +} +% \end{macrocode} +% + + +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% \subsection{Define the new coordinate system \texttt{sunpath}} +\makeatletter + +% \subsubsection{Azimuth and altitude} +% Define component \texttt{azi} (=Azimuth angle) and \texttt{alt} (=Altidude angle) for the coordinate system \texttt{sunpath}. +% \begin{macrocode} +\tikzset{ + cs/azi/.store in=\tikz@cs@azi, + cs/alt/.store in=\tikz@cs@alt, +} +% \end{macrocode} + + +% \subsubsection{Projection functions} +% Funtions to map the atitude of the sun to the altitude value on the sun path diagram. +% +% \DescribeMacro{spherical} +% maps an altitude angle $\theta$ to the altitude radius on the diagram with the function +% \[s (\theta) = r \cos(\theta). \] +% +% \DescribeMacro{equidistance} +% maps an altitude angle $\theta$ to the altitude radius on the diagram with the function +% \[e (\theta) = r - r \cdot \frac{\left\lvert \theta \right\rvert}{90}. \] +% +% \DescribeMacro{altradius} +% this function is used in the coordinate system \texttt{sunpath} to determinate the altitude +% radius of an azimuth angle on the sun path chart. +% It depends on the value of the option \verb:altitude projection:. +% +% +% \DescribeMacro{aziangle} +% maps the azimuth angle $\Phi$ to the azimuth angle on the diagram with the function +% \[ a(\Phi) = 90 - \Phi. \] +% \begin{macrocode} +\tikzset{ + declare function = { + spherical(\alt) = \spradius * cos(\alt); + equidistance(\alt) = \spradius - \spradius*abs(\alt)/90; + altradius(\alt) = \altmapping(\alt); + aziangle(\x) = 90 - \x; + } +} +% \end{macrocode} +% + + +% \subsubsection{Coordinate system \texttt{sunpath}} +% \begin{macrocode} +\tikzdeclarecoordinatesystem{sunpath}% +{ + \tikzset{cs/.cd,azi=0,alt=0,#1} + \tikzmath{ + \r = altradius(\tikz@cs@alt); + \angle = aziangle(\tikz@cs@azi); + } + \pgfpointadd{\pgfpointxy{0}{0}}{% + \pgfpointpolarxy{\angle}{\r} + } +} +% \end{macrocode} +\makeatother + + + +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% \subsection{Setup optical options for sunpath diagram} +% These are pre-defined \TikZ{} style for components of the chart. They can be easily changed by using \cmd{\tikzset}. +% +% \DescribeMacro{sunpath grid} \tikz{\draw [sunpath grid] (0,0) -- (1,0);} style for azimuth lines and altitude circles +% +% \DescribeMacro{sunpath tick} \tikz{\draw [sunpath tick] (0,0) -- (4pt,0);} style for ticks around the horizon line +% +% \DescribeMacro{sunpath minor tick} \tikz{\draw [sunpath minor tick] (0,0) -- (4pt,0);} style for minor ticks around horizon line +% +% \DescribeMacro{altitude label} \tikz{\node[altitude label] {80};} +% +% \DescribeMacro{azimuth label} \tikz{\node[altitude label] {350};} style for text label of altitude circle respective azimuth line +% +% \DescribeMacro{direction label} \tikz{\node[direction label] {N E S W}; } style for text label of four directions +% +% \begin{macrocode} +\tikzset{ + sunpath grid/.style={help lines,color=blue!45!white!80}, + sunpath tick/.style={draw,thick,color=blue!90!white!80}, + sunpath minor tick/.style={draw,thin,color=blue!90!white!80}, + altitude label/.style={ + font=\footnotesize\sffamily, + fill=white,minimum width={width("90")+2pt}, + inner sep=0.5pt + }, + azimuth label/.style={ + font=\footnotesize\sffamily, + minimum width={width("360")+2pt}, + inner sep=0.5pt + }, + direction label/.style={ + font=\normalsize\rmfamily + } +} +% \end{macrocode} + + +% \subsection{Expose some commands for end-user} + +% \DescribeMacro{\spcrosshair} \oarg{style} +% +% Draws a thin line from North to South and a thin line from East to West. +% Default value of \oarg{style} is \texttt{sunpath grid}. +% +% \begin{macrocode} +\NewDocumentCommand\spcrosshair{O{sunpath grid}}{ + \draw[#1] (-\spradius,0) -- (\spradius,0); + \draw[#1] (0,-\spradius) -- (0,\spradius); +} +% \end{macrocode} + + + + +% \DescribeMacro{\spgeodirection} \oarg{offset}\oarg{style} +% +% +% Puts four geographic directions North, East, South, West around the horinzon line. +% \oarg{offset} is the distance from horizon to the \TikZ{} node of the directions. +% Its default value is 22pt. +% Set it to zero causes that the directions are set very near to the horizon line. +% \begin{macrocode} +\NewDocumentCommand\spgeodirection{O{22pt} O{direction label}}{ + \foreach \dname / \dgrad in {N/0, E/90, S/180, W/270}{ + \tikzmath{ + \polarangle = aziangle(\dgrad); + } + \coordinate (D) at (\polarangle:\spradius cm + #1); + \node[#2,anchor=270-\dgrad] at (D) {\dname}; + } +} +% \end{macrocode} + + + + +% \DescribeMacro{\spaltitudecircle} \marg{range}\oarg{style} +% +% Draws altitude circle given by \marg{range}. +% The argument \marg{range} must be a valid \TikZ-range, which can be used in \cmd{\foreach}. +% For example \verb|{{10,20,...,80,85}}|. +% The argument \oarg{style} define the style of altitude circles, default is \texttt{sunpath~grid}. +% \begin{macrocode} +\NewDocumentCommand\spaltitudecircle{m O{sunpath grid}}{ + \foreach \altitude in #1 { + \coordinate (A) at (sunpath cs:azi=0,alt=\altitude) ; + \path[draw,sunpath grid] (0,0) circle[radius=altradius(\altitude)]; + } +} +% \end{macrocode} + + + + +% \DescribeMacro{\spaltitudelabel} \marg{range}\oarg{azimuth}\oarg{style} +% +% Draws the labels of altitude circles given by \marg{range}. +% Range must be an in \TikZ{} valid numeric range which can be used in \cmd{\foreach}. +% For example \verb|{{10,20,...,80}}| +% The labels are placed along the azimuth \oarg{azimuth} (default 135) +% and typeset with style \oarg{style} (default \texttt{altitude label}). +% +% \begin{macrocode} +\NewDocumentCommand\spaltitudelabel{m O{135} O{altitude label}}{ + \foreach \altitude in #1 { + \coordinate (A) at (sunpath cs:azi=#2,alt=\altitude) ; + \node [anchor=east,#3] at (A) {\altitude}; + } +} +% \end{macrocode} + + + + +% \DescribeMacro{\spazimuthlabel} \marg{range}\oarg{style} +% +% \begin{macrocode} +\NewDocumentCommand\spazimuthlabel{m O{azimuth label}}{ + \foreach \azimuth in #1 { + \tikzmath{ + \polarangle = aziangle(\azimuth); + } + \coordinate (D) at (\polarangle:\spradius cm + 13pt); + \node[#2] at (D) {\azimuth}; + } +} +% \end{macrocode} + + + + +% \DescribeMacro{\spazimuthline} \marg{range}\marg{start~alt}\marg{end~alt} +% +% \begin{macrocode} +\NewDocumentCommand\spazimuthline{m m m}{ + \foreach \azimuth in #1{ + \draw[sunpath grid] + (sunpath cs:azi=\azimuth,alt={#2}) -- (sunpath cs:azi=\azimuth,alt={#3}); + } +} +% \end{macrocode} + + + + +% \DescribeMacro{\spazimuthtick} \oarg{major}\oarg{minor}\oarg{mid} +% +% Draws ticks along and outside the horizon circle. The optional arguments \oarg{major}, +% \oarg{minor} and \oarg{mid} are the length of major ticks (every 10° from Zero), +% minor ticks (every 1°, from 1°) and the length of the middle ticks (every 30°, from 15°). +% Their default values are 6pt, 2.5pt and 5pt. +% +% \begin{macrocode} +\NewDocumentCommand\spazimuthtick{O{6pt} O{2.5pt} O{5pt}}{ + \foreach \azimuth in {10,20,...,360}{ + \tikzmath{ + \pa = aziangle(\azimuth); + } + \path[sunpath tick] (\pa:\spradius) -- (\pa:{\spradius cm + #1}); + } + + \foreach \azimuth in {1,2,...,360}{ + \tikzmath{ + \pa = aziangle(\azimuth); + } + \path[sunpath minor tick] (\pa:\spradius) -- (\pa:{\spradius cm + #2}); + } + + \foreach \azimuth in {15,45,...,345}{ + \tikzmath{ + \pa = aziangle(\azimuth); + } + \path[sunpath minor tick] (\pa:\spradius) -- (\pa:{\spradius cm + #3}); + } +} +% \end{macrocode} + + + + +%%%%%%%%%%%%%% +\endinput +%%%%%%%%%%%%%% + + diff --git a/graphics/pgf/contrib/sunpath/sunpath.equidistance.pdf b/graphics/pgf/contrib/sunpath/sunpath.equidistance.pdf Binary files differnew file mode 100644 index 0000000000..2b2c5f5c6a --- /dev/null +++ b/graphics/pgf/contrib/sunpath/sunpath.equidistance.pdf diff --git a/graphics/pgf/contrib/sunpath/sunpath.equidistance.tex b/graphics/pgf/contrib/sunpath/sunpath.equidistance.tex new file mode 100644 index 0000000000..2bbc7f3cf2 --- /dev/null +++ b/graphics/pgf/contrib/sunpath/sunpath.equidistance.tex @@ -0,0 +1,36 @@ +\documentclass{standalone} + + +\usepackage{fontspec} +\usepackage{sunpath} +\usetikzlibrary{hobby} + +\usepackage{hyperref} + +\pagecolor{white} +\begin{document} +\begin{tikzpicture}[spradius=6,altitude mapping=equidistance] +\tikzset{ + sun path curve/.style={draw=red!20,thick}, + sun point/.style={radius=2pt,draw=red,fill=red}, + sun label/.style={below,fill=white,outer sep=4pt,text=red}, +} +\spcrosshair +\spaltitudecircle{{0,10,...,80,85}} +\spazimuthline{{0,10,...,360}}{85}{70} +\spazimuthline{{0,5,...,360}}{80}{0} +\spazimuthtick + + +\coordinate (P3) at (sunpath cs:azi=156.854847,alt=31.593335); + +\path[sun point] (P3) circle; + +\node[sun label,anchor=270-156.854847] at (P3) {12:00}; + +\spaltitudelabel{{10,20,...,80,85}} +\spazimuthlabel{{0,15,...,350}} +\spgeodirection +\end{tikzpicture} +\end{document} + diff --git a/graphics/pgf/contrib/sunpath/sunpath.ins b/graphics/pgf/contrib/sunpath/sunpath.ins new file mode 100644 index 0000000000..726943e315 --- /dev/null +++ b/graphics/pgf/contrib/sunpath/sunpath.ins @@ -0,0 +1,62 @@ +\iffalse meta-comment + +File: sunpath.ins Copyright (C) 2024 by Hong-Phuc Bui + +It 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 + + +The released version of this bundle is available from CTAN. + +----------------------------------------------------------------------- + +The development version of the bundle can be found at + + https://github.com/hpb-htw/sunpath + +for those people who are interested. + +----------------------------------------------------------------------- + +\fi + +\input l3docstrip.tex +\askforoverwritefalse +\usedir{tex/latex/sunpath} +% stop DocStrip adding rather wordy text +\preamble +\endpreamble +\postamble +Copyright (C) 2024 by + Hong-Phuc Bui + +It 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 + + +This work consists of the files sunpath.dtx, + sunpath.ins, + and the derived files sunpath.pdf, + sunpath.sty. + +\endpostamble + +\keepsilent + +\generate {% + \file{sunpath.sty} {% + \from{sunpath.dtx}{package} + } +} + +\endbatchfile + + diff --git a/graphics/pgf/contrib/sunpath/sunpath.pdf b/graphics/pgf/contrib/sunpath/sunpath.pdf Binary files differnew file mode 100644 index 0000000000..77235519dd --- /dev/null +++ b/graphics/pgf/contrib/sunpath/sunpath.pdf diff --git a/graphics/pgf/contrib/sunpath/sunpath.scrartcl.pdf b/graphics/pgf/contrib/sunpath/sunpath.scrartcl.pdf Binary files differnew file mode 100644 index 0000000000..78c93c271a --- /dev/null +++ b/graphics/pgf/contrib/sunpath/sunpath.scrartcl.pdf diff --git a/graphics/pgf/contrib/sunpath/sunpath.scrartcl.tex b/graphics/pgf/contrib/sunpath/sunpath.scrartcl.tex new file mode 100644 index 0000000000..d3293d1792 --- /dev/null +++ b/graphics/pgf/contrib/sunpath/sunpath.scrartcl.tex @@ -0,0 +1,39 @@ +\documentclass{scrartcl} + +\usepackage{fontspec} +\usepackage{luaotfload} +\usepackage{tikz} +\usepackage{graphicx} +\usepackage{float} + +\usepackage{sunpath} + +\usetikzlibrary{hobby} % this library let one connect points to curve. + +\newcommand{\TikZ}{Ti\textit{k}Z} + +\title{ + \textsf{sunpath} -- Draw Sun Path\\ + (Test Compatibility only) +}% +% +\author{% + Hồng-Phúc Bùi% +} + + + +\begin{document} +% +\parindent0pt +% +\maketitle +\tableofcontents + +\section{Object} + +This file tests if this package can be used within a \texttt{scrartcl} class. + +\input{sunpath.docpart.tex} + +\end{document} diff --git a/graphics/pgf/contrib/sunpath/sunpath.spherical.pdf b/graphics/pgf/contrib/sunpath/sunpath.spherical.pdf Binary files differnew file mode 100644 index 0000000000..0655714ca1 --- /dev/null +++ b/graphics/pgf/contrib/sunpath/sunpath.spherical.pdf diff --git a/graphics/pgf/contrib/sunpath/sunpath.spherical.tex b/graphics/pgf/contrib/sunpath/sunpath.spherical.tex new file mode 100644 index 0000000000..6a231c19c7 --- /dev/null +++ b/graphics/pgf/contrib/sunpath/sunpath.spherical.tex @@ -0,0 +1,36 @@ +\documentclass{standalone} + + +\usepackage{fontspec} +\usepackage{sunpath} +\usetikzlibrary{hobby} + +\usepackage{hyperref} + +\pagecolor{white} +\begin{document} +\begin{tikzpicture}[spradius=6] +\tikzset{ + sun path curve/.style={draw=red!20,thick}, + sun point/.style={radius=2pt,draw=red,fill=red}, + sun label/.style={below,fill=white,outer sep=4pt,text=red}, +} +\spcrosshair +\spaltitudecircle{{0,10,...,80,85}} +\spazimuthline{{0,10,...,360}}{85}{70} +\spazimuthline{{0,5,...,360}}{80}{0} +\spazimuthtick + + +\coordinate (P3) at (sunpath cs:azi=156.854847,alt=31.593335); + +\path[sun point] (P3) circle; + +\node[sun label,anchor=270-156.854847] at (P3) {12:00}; + +\spaltitudelabel{{10,20,...,80,85}} +\spazimuthlabel{{0,15,...,350}} +\spgeodirection +\end{tikzpicture} +\end{document} + diff --git a/graphics/pgf/contrib/sunpath/sunpath.tex b/graphics/pgf/contrib/sunpath/sunpath.tex new file mode 100644 index 0000000000..1468c48687 --- /dev/null +++ b/graphics/pgf/contrib/sunpath/sunpath.tex @@ -0,0 +1,61 @@ +% main document +% separated from dtx, sothat there is no unrelated things in the dtx itselft, but only code and comment for package + +\documentclass{ltxdoc} + +\usepackage{fontspec} +\usepackage{luaotfload} +\usepackage{tikz} +\usepackage{graphicx} +\usepackage{float} +\usepackage{mathtools} + + +\usepackage{sunpath} + +\usetikzlibrary{hobby} % this library let one connect points to curve. + +\newcommand{\TikZ}{Ti\textit{k}Z} + +\EnableCrossrefs +\CodelineIndex +\RecordChanges + +\GetFileInfo{\jobname.sty} +% +\title{ + \pkg{sunpath} -- Draw Sun Path% + \thanks{This file describes \fileversion, % + last revised \filedate.}\\[1ex]% + \normalsize{Reference}% +}% +% +\author{% + Hồng-Phúc Bùi% + \thanks{% + E-mail: + \href{mailto:Hồng-Phúc Bùi} + {hong-phuc.bui (at) htwsaar dot de}% + }% +} +% +\date{Released \filedate} + + +\begin{document} +% +\parindent0pt +% +\maketitle +\tableofcontents + + +\input{sunpath.docpart.tex} + +\vfill\newpage +% get the document about implementation inside main document +\DocInput{\jobname.dtx} + +\PrintChanges +\PrintIndex +\end{document} diff --git a/graphics/pgf/contrib/sunpath/sunpath.track.pdf b/graphics/pgf/contrib/sunpath/sunpath.track.pdf Binary files differnew file mode 100644 index 0000000000..789e2c9230 --- /dev/null +++ b/graphics/pgf/contrib/sunpath/sunpath.track.pdf diff --git a/graphics/pgf/contrib/sunpath/sunpath.track.tex b/graphics/pgf/contrib/sunpath/sunpath.track.tex new file mode 100644 index 0000000000..64f7256356 --- /dev/null +++ b/graphics/pgf/contrib/sunpath/sunpath.track.tex @@ -0,0 +1,56 @@ +\documentclass{standalone} + + +\usepackage{fontspec} +\usepackage{sunpath} +\usetikzlibrary{hobby} + +\usepackage{hyperref} + +\pagecolor{white} +\begin{document} +\begin{tikzpicture}[spradius=4] +\tikzset{ + sun path curve/.style={draw=red!20,thick}, + sun point/.style={radius=2pt,draw=red,fill=red}, + sun label/.style={below,fill=white,outer sep=3pt,inner sep=0pt,text=red}, + small alt label/.style={altitude label,font=\scriptsize\sffamily} +} +\spcrosshair +\spaltitudecircle{{0,10,...,80,85}} +\spazimuthline{{0,10,...,360}}{85}{70} +\spazimuthline{{0,5,...,360}}{80}{0} +\spazimuthtick + +\coordinate (P0) at (sunpath cs:azi=98.968673,alt=-0.208672); +\coordinate (P1) at (sunpath cs:azi=102.009695,alt=2.035492); +\coordinate (P2) at (sunpath cs:azi=126.513583,alt=19.499874); +\coordinate (P3) at (sunpath cs:azi=156.854847,alt=31.593335); +\coordinate (P4) at (sunpath cs:azi=192.292832,alt=33.425294); +\coordinate (P5) at (sunpath cs:azi=224.708002,alt=24.034984); +\coordinate (P6) at (sunpath cs:azi=250.626597,alt=7.619801); +\coordinate (P7) at (sunpath cs:azi=260.810553,alt=-0.244637); +\path[sun point] (P0) circle; +\path[sun point] (P1) circle; +\path[sun point] (P2) circle; +\path[sun point] (P3) circle; +\path[sun point] (P4) circle; +\path[sun point] (P5) circle; +\path[sun point] (P6) circle; +\path[sun point] (P7) circle; +\node[sun label,anchor=270-98.968673] at (P0) {07:44}; +\node[sun label,anchor=270-102.009695] at (P1) {08:00}; +\node[sun label,anchor=270-126.513583] at (P2) {10:00}; +\node[sun label,anchor=270-156.854847] at (P3) {12:00}; +\node[sun label,anchor=270-192.292832] at (P4) {14:00}; +\node[sun label,anchor=270-224.708002] at (P5) {16:00}; +\node[sun label,anchor=270-250.626597] at (P6) {18:00}; +\node[sun label,anchor=270-260.810553] at (P7) {18:53}; +\path[sun path curve] (P0) to [curve through={ (P1) .. (P2) .. (P3) .. (P4) .. (P5) .. (P6) }] (P7) ; + +\spaltitudelabel{{10,30,40,...,80,85}}[175][small alt label] +\spazimuthlabel{{0,15,...,350}} +\spgeodirection +\end{tikzpicture} +\end{document} + diff --git a/graphics/pgf/contrib/tikz-decofonts/README.md b/graphics/pgf/contrib/tikz-decofonts/README.md new file mode 100644 index 0000000000..684a360e7c --- /dev/null +++ b/graphics/pgf/contrib/tikz-decofonts/README.md @@ -0,0 +1,8 @@ +This package provides some macros to present simple decoration fonts, made with TikZ. +Available decorations are brushpaint and inkline, and gridlcd. +------------------------------------------------------------------------------------- +Author...: Cédric Pierquet +email....: cpierquet@outlook.fr +Licences.: Released under the LaTeX Project Public License v1.3c or later, see http://www.latex-project.org/lppl.txt + CC BY-SA 4.0 (https://tex.stackexchange.com/questions/475141/simulating-paintbrush-strokes-in-tikz from user121799) + CC BY-SA 4.0 (https://tex.stackexchange.com/questions/460836/custom-line-cap-to-simulate-inked-line-in-tikz/460842#460842 from user121799)
\ No newline at end of file diff --git a/graphics/pgf/contrib/tikz-decofonts/doc/tikz-decofonts-doc.pdf b/graphics/pgf/contrib/tikz-decofonts/doc/tikz-decofonts-doc.pdf Binary files differnew file mode 100644 index 0000000000..1a5dfe3db0 --- /dev/null +++ b/graphics/pgf/contrib/tikz-decofonts/doc/tikz-decofonts-doc.pdf diff --git a/graphics/pgf/contrib/tikz-decofonts/doc/tikz-decofonts-doc.tex b/graphics/pgf/contrib/tikz-decofonts/doc/tikz-decofonts-doc.tex new file mode 100644 index 0000000000..aa9da75d2b --- /dev/null +++ b/graphics/pgf/contrib/tikz-decofonts/doc/tikz-decofonts-doc.tex @@ -0,0 +1,344 @@ +% !TeX TXS-program:compile = txs:///arara +% arara: pdflatex: {shell: no, synctex: no, interaction: batchmode} +% arara: pdflatex: {shell: no, synctex: no, interaction: batchmode} + +\documentclass[11pt,a4paper]{ltxdoc} +\usepackage{bera} +\usepackage{inconsolata} +\usepackage[T1]{fontenc} +\usepackage[scale=0.875]{cabin} +\usepackage{tikz-decofonts} +\usepackage{fancyvrb} +\usepackage{fancyhdr} +\usepackage{tabularray} +\usepackage{fontawesome5} +\fancyhf{} +\renewcommand{\headrulewidth}{0pt} +\lfoot{\sffamily\small [tikz-decofonts]} +\cfoot{\sffamily\small - \thepage{} -} +\rfoot{\hyperlink{matoc}{\small\faArrowAltCircleUp[regular]}} +\usepackage{hologo} +\providecommand\tikzlogo{Ti\textit{k}Z} +\providecommand\TeXLive{\TeX{}Live\xspace} +\let\TikZ\tikzlogo + +\usepackage{hyperref} +\urlstyle{same} +\hypersetup{pdfborder=0 0 0} +\usepackage[margin=2cm]{geometry} +\setlength{\parindent}{0pt} +\def\TPversion{0.1.0} +\def\TPdate{14/10/2024} +\usepackage{tcolorbox} +\tcbuselibrary{breakable,skins,hooks,listingsutf8} + +\lstset{ + language=[LaTeX]TeX,% + basicstyle=\ttfamily,% + keywordstyle={\color{blue}},% + classoffset=0,% + keywords={},% + alsoletter={-},% + keywordstyle={\color{blue}},% + classoffset=1,% + alsoletter={-},% + morekeywords={commalists-tools},% + keywordstyle={\color{violet}},% + classoffset=2,% + alsoletter={-},% + morekeywords={\tkzbrush,\tkzink,\tkzpixl,\tkzpixletter,\tkzpixlquote},% + keywordstyle={\color{green!50!black}},% + classoffset=3,% + morekeywords={},% + keywordstyle={\color{orange}} +} + +\newtcblisting{DemoCode}[1]{% + enhanced,width=\linewidth,% + bicolor,size=title,% + colback=cyan!10!white,% + colbacklower=cyan!5!white,% + colframe=cyan!75!black,% + listing options={% + breaklines=true,% + breakatwhitespace=true,% + style=tcblatex,basicstyle=\small\ttfamily,% + tabsize=4,% + commentstyle={\itshape\color{gray}}, + keywordstyle={\color{blue}},% + classoffset=0,% + keywords={\usepackage,\includegraphics,xstring,listofitems,\readlist,\showitems,\xintFor,\xintSeq},% + alsoletter={-},% + keywordstyle={\color{blue}},% + classoffset=1,% + alsoletter={-},% + morekeywords={euromoney},% + keywordstyle={\color{violet}},% + classoffset=2,% + alsoletter={-},% + morekeywords={\tkzbrush,\tkzink,\tkzpixl,\tkzpixletter,\tkzpixlquote},% + keywordstyle={\color{green!50!black}},% + classoffset=3,% + morekeywords={color,lines,scale,height,offseth,offsetv,thick,gridcolor,gridafter,nospaceafter,border},% + keywordstyle={\color{orange}} + },% + #1 +} + +\newtcbinputlisting\DemoCodeFile[1]{% + enhanced,width=\linewidth,% + bicolor,size=title,% + colback=lightgray!10!white,% + colbacklower=lightgray!5!white,% + colframe=lightgray!75!black,% + listing options={% + breaklines=true,% + breakatwhitespace=true,% + style=tcblatex, + basicstyle=\scriptsize\ttfamily,% + tabsize=4,% + commentstyle={\itshape\color{gray}},% + %lastline=148 + },% + breakable, + listing only,% + listing file={#1} +} + +\NewDocumentCommand\ShowCode{ m }{% + \lstinline{#1}% +} + +\begin{document} + +\thispagestyle{empty} + +\begin{center} + \begin{minipage}{0.88\linewidth} + \begin{tcolorbox}[colframe=yellow,colback=yellow!15] + \begin{center} + \renewcommand{\arraystretch}{1.25}% + \begin{tabular}{c} + {\Huge \texttt{tikz-decofonts}}\\ + \\ + {\LARGE Simple "decoration" fonts, made} \\ + {\LARGE with Ti\textit{k}Z, for small texts\ldots} \\ + \\ + {\small \texttt{Version \TPversion{} -- \TPdate}} + \end{tabular} + \end{center} + \end{tcolorbox} + \end{minipage} +\end{center} + +\begin{center} + \begin{tabular}{c} + \texttt{Cédric Pierquet}\\ + {\ttfamily c pierquet -- at -- outlook . fr}\\ + \texttt{\url{https://github.com/cpierquet/tikz-decofonts}} \\ + \end{tabular} +\end{center} + +\hrule + +\vfill + +\begin{tcblisting}{colframe=lightgray,colback=lightgray!5,listing only} +%paintbrush effect +\tkzbrush[color=blue]{DECORATION} + +%paintink effect +\tkzink[color=orange]{DECORATION} + +%pixeletter effect +\tkzpixl[color=violet]{DECORATION} +\end{tcblisting} + +\begin{tcolorbox}[colframe=lightgray,colback=lightgray!5] +\tkzbrush[color=blue]{DECORATION} +\end{tcolorbox} + +\begin{tcolorbox}[colframe=lightgray,colback=lightgray!5] +\hfill\tkzink[color=orange]{DECORATION}\hfill~ +\end{tcolorbox} + +\begin{tcolorbox}[colframe=lightgray,colback=lightgray!5] +\hfill\tkzpixl[color=violet]{Decoration} +\end{tcolorbox} + +\vfill~ + +\hrule + +\vspace*{5mm} + +\textit{Ideas and parts of codes, with \texttt{CC\,BY-SA\,4.0} licenses, come from :} + +\begin{itemize} + \item \href{https://tex.stackexchange.com/questions/475141/simulating-paintbrush-strokes-in-tikz}{[link on tex.stackexchange]} from \textsf{user121799} for paintbrush; + \item \href{https://tex.stackexchange.com/questions/460836/custom-line-cap-to-simulate-inked-line-in-tikz/460842#460842}{[link on tex.stackexchange]} from \textsf{user121799} for inkbrush. +\end{itemize} + +\pagebreak + +\phantomsection + +\hypertarget{matoc}{} + +\tableofcontents + +\vspace*{5mm} + +%\hrule + +\pagebreak + +\section{Loading, useful packages, purposes and acknowledgments} + +\subsection{Loading and useful packages} + +In order to load \texttt{tikz-decofonts}, simply use: + +\begin{DemoCode}{listing only} +\usepackage{tikz-decofonts} +\end{DemoCode} + +Loaded packages are \texttt{tikz}, \texttt{xintexpr}, \texttt{simplekv} and \texttt{xstring}. + +Loaded \texttt{tikz.librairies} are \texttt{decorations}, \texttt{decorations.pathreplacing}, \texttt{calc}, \texttt{positioning}, \texttt{bbox}, \texttt{arrows.meta} and \texttt{bending}. + +\smallskip + +Globally, height of rendering is about 1cm, but some customization are available. + +\subsection{Purposes and acknowledgments} + +The purposes of this small package is not to provide full fonts, with all characters, but give restricted possibility to present \textbf{short} texts of title with \textit{cute} effects. + +\smallskip + +These decorations are not destined to be use for whole paragraphs or texts, but just for fun for small titles or small texts. + +\smallskip + +Since many calculations are required internally, compilation time can be increased, so be careful with intensive use! + +\smallskip + +\textit{Ideas and parts of codes, with \texttt{CC\,BY-SA\,4.0} licenses, come from:} + +\begin{itemize} + \item \href{https://tex.stackexchange.com/questions/475141/simulating-paintbrush-strokes-in-tikz}{[link on tex.stackexchange]} from \textsf{user121799} for paintbrush; + \item \href{https://tex.stackexchange.com/questions/460836/custom-line-cap-to-simulate-inked-line-in-tikz/460842#460842}{[link on tex.stackexchange]} from \textsf{user121799} for inkbrush. +\end{itemize} + +Some adjustments (keys, paths) are maid from original code, but the global usage is due to the links above ! + +\pagebreak + +\section{The different effects} + +\subsection{Paint brush} + +{\small\faBomb} The effect is \textbf{very} \textit{time-consuming} to compile !! + +\begin{DemoCode}{listing only} +%only uppercase letters allowed +\tkzbrush[color=...,lines=...,scale=...]<tikzpicture options>{short text} + +%color = black by default +%lines = 12 by default +%scale = 1 by default +\end{DemoCode} + +\begin{DemoCode}{listing only} +%default output +\tkzbrush{TIKZ DECORATION} +\end{DemoCode} + +\begin{DemoCode}{text only} +%default output +\tkzbrush{TIKZ DECORATION} + +\end{DemoCode} + +\begin{DemoCode}{listing only} +%customization(s) (external file for speeding rendering ^^) +\tkzbrush[color=red,lines=20,scale=1.5]{CUSTOM TEXT} +\end{DemoCode} + +\begin{DemoCode}{text only} +%customization(s) (external file for speeding rendering ^^) +\includegraphics{tkzbrushA.pdf} +\end{DemoCode} + +\pagebreak + +\subsection{Ink brush} + +\begin{DemoCode}{listing only} +%only uppercase letters allowed +\tkzink[color=...,thick=...,scale=...]<tikzpicture options>{short text} + +%color = black by default +%thick = 3 by default +%scale = 1 by default +\end{DemoCode} + +\begin{DemoCode}{} +%default output +\tkzink{TIKZ DECORATION} +\end{DemoCode} + +\begin{DemoCode}{} +%customization(s) +\tkzink[color=olive,thick=5,scale=2]{TIKZ DECORATION} +\end{DemoCode} + +\pagebreak + +\subsection{Pixl brush} + +\begin{DemoCode}{listing only} +%regular letters allowed (upper and/or lower), rendered characters are 5 columns x 7 lines +\tkzpixl% + [height=...,thick=...,color=...,gridcolor=...,border=..., + offseth=...,offsetv=...,gridafter=...,nospaceafter=...] + <tikzpicture options>{short text} + +\tkzpixletter% + [height=...,thick=...,color=...,gridcolor=...,border=..., + offseth=...,offsetv=...,gridafter=...,nospaceafter=...] + <tikzpicture options>{letter} + +\tkzpixlquote%if problem with '... + [height=...,thick=...,color=...,gridcolor=..., + offseth=...,offsetv=...,gridafter=...,nospaceafter=...] + <tikzpicture options> + +%height = 11mm by default, thick = 0.1mm by default +%color = black by default, gridcolor = gray by default +%offseth = 1 by default (squares left/right of regular character) +%offsetv = 2 by default (squares above/below of regular character) +%boder = false by default (boolean for adding border) +%gridafter = false by default (boolean for showing grid after pixls) +%nospaceafter = false by default (boolean for removeing hspace after pixls) +\end{DemoCode} + +\begin{DemoCode}{} +%default output, comparaison with character w/o offsets (5*7) +\tkzpixl{And then, 1+1=2 !?!} and \tkzpixletter[offseth=0,offsetv=0]{*} +\end{DemoCode} + +\begin{DemoCode}{} +%customization(s) +\tkzpixl[color=violet,height=1.75cm,gridafter,offsetv=3,border]{Small custo'm text} +\end{DemoCode} + +\pagebreak + +\section{History} + +\texttt{0.1.0: Initial version} + +\end{document} diff --git a/graphics/pgf/contrib/tikz-decofonts/doc/tkzbrushA.pdf b/graphics/pgf/contrib/tikz-decofonts/doc/tkzbrushA.pdf Binary files differnew file mode 100644 index 0000000000..764b4cc3a4 --- /dev/null +++ b/graphics/pgf/contrib/tikz-decofonts/doc/tkzbrushA.pdf diff --git a/graphics/pgf/contrib/tikz-decofonts/doc/tkzbrushA.tex b/graphics/pgf/contrib/tikz-decofonts/doc/tkzbrushA.tex new file mode 100644 index 0000000000..bda9222441 --- /dev/null +++ b/graphics/pgf/contrib/tikz-decofonts/doc/tkzbrushA.tex @@ -0,0 +1,11 @@ +% !TeX TXS-program:compile = txs:///arara +% arara: pdflatex: {shell: no, synctex: no, interaction: batchmode} + +\documentclass{standalone} +\usepackage{tikz-decofonts} + +\begin{document} + +\tkzbrush[color=red,lines=20,scale=1.5]{CUSTOM TEXT} + +\end{document} diff --git a/graphics/pgf/contrib/tikz-decofonts/tex/tikz-decofonts.sty b/graphics/pgf/contrib/tikz-decofonts/tex/tikz-decofonts.sty new file mode 100644 index 0000000000..984ac0a5f9 --- /dev/null +++ b/graphics/pgf/contrib/tikz-decofonts/tex/tikz-decofonts.sty @@ -0,0 +1,896 @@ +% Author : C. Pierquet +% licences : Released under the LaTeX Project Public License v1.3c or later, see http://www.latex-project.org/lppl.txtf +% : CC BY-SA 4.0 (https://tex.stackexchange.com/questions/475141/simulating-paintbrush-strokes-in-tikz from user121799) +% : (https://tex.stackexchange.com/questions/460836/custom-line-cap-to-simulate-inked-line-in-tikz/460842#460842 from user121799) + +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{tikz-decofonts}[2024/10/14 0.1.0 Custom fonts, made with TikZ, with effects] + +%------History +% 0.1.0 Initial version + +%------Packages and library +\RequirePackage{tikz} +\RequirePackage{xstring} +\RequirePackage{xintexpr} +\RequirePackage{simplekv} +\usetikzlibrary{decorations,decorations.pathreplacing,calc,positioning,bbox,arrows.meta,bending} + +%------Paintbrush +\pgfmathdeclarerandomlist{randcolor}{{black}{white}} +\pgfkeys{/brush pars/.cd, + lines/.initial={\tkzbrushlines}, + distance/.initial=0.25pt +} +\tikzset{ + brush/.style={ + decorate, + decoration={ + show path construction, + lineto code={ + \foreach\Xbrush in{1,...,\pgfkeysvalueof{/brush pars/lines}}{ + \pgfmathrandomitem{\c}{randcolor} + \pgfmathtruncatemacro{\mix}{100-24*rnd} + \draw[color=brushcolor!\mix!\c, + shorten >={(3-4*rnd)*1pt + -0.5*\pgfkeysvalueof{/brush pars/lines}*\pgfkeysvalueof{/brush pars/distance}}, + shorten <={(3-4*rnd)*1pt + -0.5*\pgfkeysvalueof{/brush pars/lines}*\pgfkeysvalueof{/brush pars/distance}}] + let \p1=($(\tikzinputsegmentlast)-(\tikzinputsegmentfirst)$), + \n1={90+atan2(\y1,\x1)} in + ($(\tikzinputsegmentfirst)+(\n1:{((1.02-0.04*rnd)*\Xbrush-\pgfkeysvalueof{/brush pars/lines}/2)*\pgfkeysvalueof{/brush pars/distance}})$) + -- + ($(\tikzinputsegmentlast)+(\n1:{((1.02-0.04*rnd)*\Xbrush-\pgfkeysvalueof{/brush pars/lines}/2)*\pgfkeysvalueof{/brush pars/distance}})$); + } + }, + curveto code={ + \foreach\Xbrush in{1,...,\pgfkeysvalueof{/brush pars/lines}}{ + \pgfmathrandomitem{\c}{randcolor} + \pgfmathtruncatemacro{\mix}{100-24*rnd} + \draw[color=brushcolor!\mix!\c,shorten >={(3-4*rnd)*1pt + -0.5*\pgfkeysvalueof{/brush pars/lines}*\pgfkeysvalueof{/brush pars/distance}}, + shorten <={(3-4*rnd)*1pt + -0.5*\pgfkeysvalueof{/brush pars/lines}*\pgfkeysvalueof{/brush pars/distance}}] + let \p1=($(\tikzinputsegmentsupporta)-(\tikzinputsegmentfirst)$), + \p2=($(\tikzinputsegmentsupportb)-(\tikzinputsegmentsupporta)$), + \p3=($(\tikzinputsegmentlast)-(\tikzinputsegmentsupportb)$), + \n1={90+atan2(\y1,\x1)}, \n2={90+atan2(\y2,\x2)}, + \n3={90+atan2(\y3,\x3)} in + ($(\tikzinputsegmentfirst)+(\n1:{((1.02-0.04*rnd)*\Xbrush-\pgfkeysvalueof{/brush pars/lines}/2)*\pgfkeysvalueof{/brush pars/distance}})$) + .. controls ($(\tikzinputsegmentsupporta)+(\n2:{((1.02-0.04*rnd)*\Xbrush-\pgfkeysvalueof{/brush pars/lines}/2)*\pgfkeysvalueof{/brush pars/distance}})$) + and ($(\tikzinputsegmentsupportb)+(\n3:{((1.02-0.04*rnd)*\Xbrush-\pgfkeysvalueof{/brush pars/lines}/2)*\pgfkeysvalueof{/brush pars/distance}})$) .. + ($(\tikzinputsegmentlast)+(\n3:{((1.02-0.04*rnd)*\Xbrush-\pgfkeysvalueof{/brush pars/lines}/2)*\pgfkeysvalueof{/brush pars/distance}})$); + } + }, + } + } +} +\tikzset{pics/.cd, + brushA/.style={code={% + \draw[brush] (0,-0.5) -- (0.25,0.5) -- (0.5,-0.5); + \draw[brush] (0.125,-0.15) -- (0.375,-0.15); + %\path (0.725,0);% + %\filldraw[blue] (0,0) circle[radius=2pt] ; + }% + }, + brushB/.style={code={% + \draw[brush] (0,-0.5) -- (0,0.5) to[out=0,in=0,looseness=2.5] (0,0) to[out=0,in=0,looseness=3] cycle; + %\filldraw[blue] (0,0) circle[radius=2pt] ; + } + }, + brushC/.style={code={% + \draw[brush] (0,0) to[out=90,in=180] (0.25,0.5) to[out=0,in=110] (0.5,0.325) ; + \draw[brush] (0,0) to[out=-90,in=180] (0.25,-0.5) to[out=0,in=-110] (0.5,-0.325) ; + %\draw[brush] (0,0) to[out=90,in=110,looseness=2] (0.5,0.325); + %\draw[brush](0,0) to[out=-90,in=-110,looseness=2] (0.5,-0.2325); + %\path (0.7,0); + %\filldraw[blue] (0,0) circle[radius=2pt] ; + } + }, + brushD/.style={code={% + \draw[brush] (0,-0.5) -- (0,0.5) to[out=0,in=0,looseness=1.75] cycle; + %\path (0.675,0); + %\filldraw[blue] (0,0) circle[radius=2pt] ; + } + }, + brushE/.style={code={% + \draw[brush] (0.425,-0.5) --(0,-0.5) -- (0,0.5) -- (0.425,0.5); + \draw[brush] (0,0) -- (0.425,0); + \path (0.5,0); + %\filldraw[blue] (0,0) circle[radius=2pt] ; + } + }, + brushF/.style={code={% + \draw[brush] (0,-0.5) -- (0,0.5) -- (0.425,0.5); + \draw[brush] (0,0) -- (0.425,0); + \path (0.5,0); + %\filldraw[blue] (0,0) circle[radius=2pt] ; + } + }, + brushG/.style={code={% + \draw[brush] (0,0) to[out=90,in=180] (0.25,0.5) to[out=0,in=100] (0.475,0.325) ; + \draw[brush] (0,0) to[out=-90,in=180] (0.25,-0.5) to[out=0,in=-110] (0.475,-0.1) ; + \draw[brush] (0.475,-0.1) to (0.275,-0.1); + %\draw[brush] (0,0) to[out=90,in=110,looseness=2] (0.5,0.25); + %\draw[brush] (0,0) to[out=-90,in=-110,looseness=2] (0.5,-0.25); + %\draw[brush] (0.5,-0.25) to (0.25,-0.25); + %\path (0.7,0); + %\filldraw[blue] (0,0) circle[radius=2pt] ; + } + }, + brushH/.style={code={% + \draw[brush] (0,-0.5) -- (0,0.5); + \draw[brush] (0.5,-0.5) -- (0.5,0.5); + \draw[brush] (0,0) -- (0.5,0); + %\path (0.7,0); + %\filldraw[blue] (0,0) circle[radius=2pt] ; + } + }, + brushI/.style={code={% + \draw[brush] (0,-0.5) -- (0,0.5); + %\path (0.25,0); + %\filldraw[blue] (0,0) circle[radius=2pt] ; + } + }, + brushJ/.style={code={% + \draw[brush] (0.35,0.5) -- (0.35,-0.35) to[out=-90,in=0] (0.175,-0.5) to[out=180,in=-90] (0,-0.3); + %\path (0.45,0); + %\filldraw[blue] (0,0) circle[radius=2pt] ; + } + }, + brushK/.style={code={% + \draw[brush] (0,-0.5) -- (0,0.5); + \draw[brush] (0.4,0.475) -- (0.02,0) -- (0.4,-0.475); + %\path (0.6,0); + %\filldraw[blue] (0,0) circle[radius=2pt] ; + } + }, + brushL/.style={code={ + \draw[brush] (0,0.5) -- (0,-0.5) -- (0.5,-0.5); + %\path (0.6,0); + %\filldraw[blue] (0,0) circle[radius=2pt] ; + } + }, + brushM/.style={code={ + \draw[brush] (0,-0.5) -- (0,0.5) -- (0.25,0.25) -- (0.5,0.5) -- (0.5,-0.5); + %\path (0.8,0); + %\filldraw[blue] (0,0) circle[radius=2pt] ; + } + }, + brushN/.style={code={ + \draw[brush] (0,-0.5) -- (0,0.5) -- (0.5,-0.5) -- (0.5,0.5); + %\path (0.8,0); + %\filldraw[blue] (0,0) circle[radius=2pt] ; + } + }, + brushO/.style={code={ + \draw[brush] (0.25,0) circle(0.25 and 0.5); + %\path (0.8,0); + %\filldraw[blue] (0,0) circle[radius=2pt] ; + } + }, + brushP/.style={code={ + \draw[brush] (0,-0.5) -- (0,0.5) to[out=0,in=0,looseness=2.5] (0,0); + %\path (0.6,0); + %\filldraw[blue] (0,0) circle[radius=2pt] ; + } + }, + brushQ/.style={code={ + \draw[brush] (0.25,0) circle(0.25 and 0.5); + \draw[brush](0.35,-0.25) -- (0.475,-0.45); + %\path (0.8,0); + %\filldraw[blue] (0,0) circle[radius=2pt] ; + } + }, + brushR/.style={code={ + \draw[brush] (0,-0.5) -- (0,0.5) to[out=0,in=0,looseness=2.5] (0.05,0) -- (0.5,-0.5); + %\path (0.6,0); + %\filldraw[blue] (0,0) circle[radius=2pt] ; + } + }, + brushS/.style={code={ + \draw[brush] (0.475,0.475) to[out=150,in=165,looseness=2.25] (0.25,0) to[out=-15,in=-30,looseness=2.25] (0.025,-0.475); + %\path (0.65,0); + %\filldraw[blue] (0,0) circle[radius=2pt] ; + } + }, + brushT/.style={code={ + \draw[brush] (0.25,-0.5) -- (0.25,0.5) (0,0.5) -- (0.5,0.5); + %\path (0.85,0); + %\filldraw[blue] (0,0) circle[radius=2pt] ; + } + }, + brushU/.style={code={ + \draw[brush] (0,0.5) -- (0,0) to[out=-90,in=-90,looseness=4] (0.5,0) -- (0.5,0.5); + %\path (0.8,0); + %\filldraw[blue] (0,0) circle[radius=2pt] ; + } + }, + brushV/.style={code={ + \draw[brush] (0,0.5) -- (0.25,-0.5) -- (0.5,0.5); + %\path (0.8,0); + %\filldraw[blue] (0,0) circle[radius=2pt] ; + } + }, + brushW/.style={code={ + \draw[brush] (0,0.5) -- (0.15,-0.5) -- (0.3,-0.25) -- (0.45,-0.5) -- (0.6,0.5); + %\path (1.1,0); + %\filldraw[blue] (0,0) circle[radius=2pt] ; + } + }, + brushX/.style={code={ + \draw[brush] (0,0.5) -- (0.5,-0.5); + \draw[brush] (0.5,0.5) -- (0,-0.5); + %\path (0.8,0); + %\filldraw[blue] (0,0) circle[radius=2pt] ; + } + }, + brushY/.style={code={ + \draw[brush] (0,0.5) -- (0.25,0); + \draw[brush] (0.5,0.5) -- (0,-0.5); + %\path (0.8,0); + %\filldraw[blue] (0,0) circle[radius=2pt] ; + } + }, + brushZ/.style={code={ + \draw[brush] (0,0.5) --(0.5,0.5) -- (0,-0.5) -- (0.5,-0.5); + %\path (0.8,0); + %\filldraw[blue] (0,0) circle[radius=2pt] ; + } + }, + brushspace/.style={code={\path (0,0) (0.2,0);}}, +} + + +\defKV[tkzbrush]{% + scale=\def\tkzbrushscale{#1},% + color=\colorlet{brushcolor}{#1},% + lines=\def\tkzbrushlines{#1},% + thick=\def\tkzbrushthick{#1} +} + +\setKVdefault[tkzbrush]{% + scale=1,% + color=black,% + lines=12,% + thick=3 +} + +%------inkbrush +\pgfdeclarearrow{ + name=ink, + parameters= {\the\pgfarrowlength}, + setup code={ + \pgfarrowssettipend{0pt} + \pgfarrowssetlineend{-\pgfarrowlength} + \pgfarrowlinewidth=\pgflinewidth + \pgfarrowssavethe\pgfarrowlength + }, + drawing code={ + \pgfpathmoveto{\pgfpoint{-\pgfarrowlength}{0.5\pgflinewidth}} + \pgfpathcurveto{\pgfpoint{-0.75\pgfarrowlength}{0.6\pgflinewidth}}{% + \pgfpoint{-0.01\pgfarrowlength}{0.6\pgflinewidth}}{% + \pgfpoint{0pt}{0pt}} + \pgfpathcurveto{\pgfpoint{-0.01\pgfarrowlength}{-0.5\pgflinewidth}}{% + \pgfpoint{-0.2\pgfarrowlength}{-(1+0.3*rnd)*\pgflinewidth}}{% + \pgfpoint{-0.3\pgfarrowlength}{-0.8*(1+0.3*rnd)*\pgflinewidth}} + \pgfpathcurveto{\pgfpoint{-0.4\pgfarrowlength}{-0.6*(1+0.3*rnd)*\pgflinewidth}}{% + \pgfpoint{-0.6\pgfarrowlength}{-0.3*(1+0.3*rnd)*\pgflinewidth}}{% + \pgfpoint{-1\pgfarrowlength}{-0.5\pgflinewidth}} + \pgfusepathqfill + }, + defaults={length=8pt} +} + +\tikzset{pics/.cd, + inkA/.style={code={% + \draw[line width={\tkzbrushthick},-{ink[bend]}] (0,-0.5) -- (0.25,0.5) -- (0.5,-0.5); + \draw[line width={\tkzbrushthick}] (0.125,-0.15) -- (0.375,-0.15); + %\draw[line width=5,{ink[bend]}-{ink[bend]}] (0,-0.55) -- (0.3,0.4) -- (0.6,-0.55); + %\draw[line width=5](0.1,1/3-0.45) -- (0.5,1/3-0.45); + %\path (0.7,0); + } + }, + inkB/.style={code={ + \draw[line width={\tkzbrushthick},{ink[bend]}-{ink[bend]}] (0,-0.5) -- (0,0.5) to[out=0,in=0,looseness=2.5] (0,0) to[out=0,in=0,looseness=3] cycle; + %\draw[line width=5] (0,-0.45) -- (0,0.45) to[out=0,in=0,looseness=2.5] (0,0) to[out=0,in=0,looseness=3] cycle; + } + }, + inkC/.style={code={ + \draw[line width={\tkzbrushthick}] (0,0) to[out=90,in=180] (0.25,0.5) to[out=0,in=110] (0.5,0.325) ; + \draw[line width={\tkzbrushthick},-{ink[bend]}] (0,0) to[out=-90,in=180] (0.25,-0.5) to[out=0,in=-110] (0.5,-0.325) ; + %\draw[line width=5,-{ink[bend]}] (0,0) to[out=90,in=110,looseness=2] (0.5,0.25); + %\draw[line width=5,-{ink[bend]}] (0,0) to[out=-90,in=-110,looseness=2] (0.5,-0.25); + %\path (0.7,0); + } + }, + inkD/.style={code={% + \draw[line width={\tkzbrushthick},-{ink[bend]}] (0,-0.5) -- (0,0.5) to[out=0,in=0,looseness=1.75] (0.075,-0.5) ; + %\draw[line width=5] (0,-0.45) -- (0,0.45) to[out=0,in=0,looseness=2.25] cycle; + %\path (0.7,0); + } + }, + inkE/.style={code={% + \draw[line width={\tkzbrushthick},{ink[bend]}-] (0.5,0.5) -- (0,0.5) -- (0,-0.5) ; + \draw[line width={\tkzbrushthick},-{ink[bend]}] (0,0) -- (0.425,0) ; + \draw[line width={\tkzbrushthick}] (0,-0.5) -- (0.4,-0.5); + %\draw[line width={\tkzbrushthick},{ink[bend]}-{ink[bend]}] (0.5,-0.45) --(0,-0.45) -- (0,0.45) -- (0.5,0.45); + %\draw[line width={\tkzbrushthick},-{ink[bend]}] (0,0) -- (0.5,0); + %\path (0.7,0); + } + }, + inkF/.style={code={% + \draw[line width={\tkzbrushthick},{ink[bend]}-] (0.5,0.5) -- (0,0.5) -- (0,-0.5) ; + \draw[line width={\tkzbrushthick},-{ink[bend]}] (0,0) -- (0.425,0) ; + %\draw[line width=5,{ink[bend]}-{ink[bend]}] (0,-0.45) -- (0,0.45) -- (0.5,0.45); + %\draw[line width=5,-{ink[bend]}] (0,0) -- (0.5,0); + %\path (0.7,0); + } + }, + inkG/.style={code={% + \draw[line width={\tkzbrushthick},-{ink[bend]}] (0,0) to[out=90,in=180] (0.25,0.5) to[out=0,in=100] (0.475,0.325) ; + \draw[line width={\tkzbrushthick}] (0,0) to[out=-90,in=180] (0.25,-0.5) to[out=0,in=-110] (0.475,-0.1) ; + \draw[line width={\tkzbrushthick},-{ink[bend]}] (0.475,-0.1) to (0.275,-0.1); + %\draw[line width=5,-{ink[bend]}] (0,0) to[out=90,in=110,looseness=2] (0.5,0.25); + %\draw[line width=5] (0,0) to[out=-90,in=-110,looseness=2] (0.5,-0.25); + %\draw[line width=5,-{ink[bend]}] (0.54,-0.25) to (0.3,-0.25); + %\path (0.7,0); + } + }, + inkH/.style={code={% + \draw[line width={\tkzbrushthick},{ink[bend]}-] (0,-0.5) -- (0,0.5); + \draw[line width={\tkzbrushthick},-{ink[bend]}] (0.5,-0.5) -- ([yshift=1pt]0.5,0.5); + \draw[line width={\tkzbrushthick}] (0,0) -- (0.5,0); + %\draw[line width=5,{ink[bend]}-{ink[bend]}] (0,-0.5) -- (0,0.5); + %\draw[line width=5,{ink[bend]}-{ink[bend]}] (0.5,-0.5) -- (0.5,0.5); + %\draw[line width=5] (0,0) -- (0.5,0); + \path (0.7,0); + } + }, + inkI/.style={code={ + \draw[line width={\tkzbrushthick},-{ink[bend]}] ([yshift=-0.5pt]0,-0.5) -- ([yshift=1pt]0,0.5); + %\draw[line width=5,{ink[bend]}-{ink[bend]}] (0,-0.45) -- (0,0.45); + \path (0.075,0); + } + }, + inkJ/.style={code={% + \draw[line width={\tkzbrushthick},-{ink[bend]}] (0.35,0.5) -- (0.35,-0.35) to[out=-90,in=0] (0.175,-0.5) to[out=180,in=-90] (0,-0.3); + %\draw[line width=5,{ink[bend]}-{ink[bend]}] (0.2,0.45) -- (0.2,-0.35) to[out=-90,in=0] (0.1,-0.45) to[out=180,in=-90] (0,-0.35); + %\path (0.45,0); + } + }, + inkK/.style={code={% + \draw[line width={\tkzbrushthick},-{ink[bend]}] (0,-0.5) -- ([yshift=1pt]0,0.5); + \draw[line width={\tkzbrushthick},-{ink[bend]}] (0.4,0.5) -- (0.02,0) -- (0.4,-0.5); + %\draw[line width=5,{ink[bend]}-{ink[bend]}] (0,-0.45) -- (0,0.45); + %\draw[line width=5,{ink[bend]}-{ink[bend]}] (0.4,0.45) -- (0.02,0) -- (0.4,-0.45); + %\path (0.6,0); + } + }, + inkL/.style={code={% + \draw[line width={\tkzbrushthick},-{ink[bend]}] (0,0.5) -- (0,-0.5) -- (0.5,-0.5); + %\draw[line width=5,{ink[bend]}-{ink[bend]}] (0,0.5) -- (0,-0.45) -- (0.4,-0.45); + %\path (0.6,0); + } + }, + inkM/.style={code={% + \draw[line width={\tkzbrushthick}] (0,-0.5)--(0,0.45) ; + \draw[line width={\tkzbrushthick},-{ink[bend]}] (0,0.475) -- (0.25,0.25) -- (0.5,0.45) -- (0.5,-0.5); + %\draw[line width=5,{ink[bend]}-{ink[bend]}] (0,-0.45) -- (0,0.45) -- (0.3,0.25) -- (0.6,0.45) -- (0.6,-0.45); + %\path (0.8,0);% + } + }, + inkN/.style={code={% + \draw[line width={\tkzbrushthick}] (0,-0.5)--(0,0.45) ; + \draw[line width={\tkzbrushthick},-{ink[bend]}] (0,0.475) -- (0.5,-0.51) -- (0.5,0.515); + %\draw[line width=5,{ink[bend]}-{ink[bend]}] (0,-0.45) -- (0,0.45) -- (0.6,-0.4) -- (0.6,0.45); + %\path (0.8,0); + } + }, + inkO/.style={code={% + \draw[line width={\tkzbrushthick}] (0.25,0) circle(0.25 and 0.5); + %\path (0.8,0); + } + }, + inkP/.style={code={% + \draw[line width={\tkzbrushthick},-{ink[bend]}] (0,-0.5) -- (0,0.5) to[out=0,in=0,looseness=2.5] (0,0); + %\draw[line width=5,{ink[bend]}-] (0,-0.45) -- (0,0.45) to[out=0,in=0,looseness=2.5] (0,0); + %\path (0.6,0); + } + }, + inkQ/.style={code={% + \draw[line width={\tkzbrushthick}] (0.25,0) circle(0.25 and 0.5); + \draw[line width={\tkzbrushthick},{ink[bend]}-{ink[bend]}](0.35,-0.25) -- (0.5,-0.5); + %\draw[line width=5] (0.3,0) circle(0.3 and 0.48); + %\draw[line width=5,{ink[bend]}-{ink[bend]}](0.35,-0.25) -- (0.6,-0.45); + %\path (0.8,0); + } + }, + inkR/.style={code={% + \draw[line width={\tkzbrushthick},-{ink[bend]}] (0,-0.5) -- (0,0.5) to[out=0,in=0,looseness=2.5] (0.05,0) -- (0.5,-0.5); + %\draw[line width=5,{ink[bend]}-{ink[bend]}] (0,-0.45) -- (0,0.45) to[out=0,in=0,looseness=2.5] (0.05,0) -- (0.4,-0.45); + %\path (0.6,0); + } + }, + inkS/.style={code={% + \draw[line width={\tkzbrushthick},{ink[bend]}-] (0.475,0.475) to[out=150,in=165,looseness=2.25] (0.25,0) to[out=-15,in=-30,looseness=2.25] (0.025,-0.475); + %\draw[line width=5,{ink[bend]}-{ink[bend]}] (0.5,0.4) to[out=160,in=165,looseness=2] (0.3,0) to[out=-15,in=-20,looseness=2] (0.1,-0.4); + %\path (0.65,0); + } + }, + inkT/.style={code={% + \draw[line width={\tkzbrushthick},-{ink[bend]}] (0.25,-0.5) -- (0.25,0.5) ; + \draw[line width={\tkzbrushthick}] (0,0.5) -- (0.5,0.5); + %\draw[line width=5,{ink[bend]}-{ink[bend]}] (0.35,-0.45) -- (0.35,0.45) (0,0.45) -- (0.7,0.45); + %\path (0.85,0); + } + }, + inkU/.style={code={% + \draw[line width={\tkzbrushthick},-{ink[bend]}] (0,0.5) -- (0,0.25) to[out=-90,in=180] (0.25,-0.5) to[out=0,in=-90] (0.5,0.25) -- (0.5,0.5); + %\draw[line width=5,{ink[bend]}-{ink[bend]}] (0,0.5) -- (0,0) to[out=-90,in=-90,looseness=2.5] (0.6,0) -- (0.6,0.5); + %\path (0.8,0); + } + }, + inkV/.style={code={% + \draw[line width={\tkzbrushthick},-{ink[bend]}] (0,0.5) -- (0.25,-0.5) -- (0.5,0.5); + %\draw[line width=5,{ink[bend]}-{ink[bend]}] (0,0.5) -- (0.3,-0.4) -- (0.6,0.5); + %\path (0.8,0); + } + }, + inkW/.style={code={% + \draw[line width={\tkzbrushthick},-{ink[bend]}] (0,0.5) -- (0.15,-0.5) -- (0.3,-0.25) -- (0.45,-0.5) -- (0.6,0.5); + %\draw[line width=5,{ink[bend]}-{ink[bend]}] (0,0.45) -- (0.3,-0.4) -- (0.45,-0.1) -- (0.6,-0.4) -- (0.9,0.45); + %\path (1.1,0); + } + }, + inkX/.style={code={% + \draw[line width={\tkzbrushthick},-{ink[bend]}] (0,0.5) -- (0.5,-0.5); + \draw[line width={\tkzbrushthick},-{ink[bend]}] (0.5,0.5) -- (0,-0.5); + %\draw[line width=5,{ink[bend]}-{ink[bend]}] (0,0.45) -- (0.6,-0.45); + %\draw[line width=5,{ink[bend]}-{ink[bend]}] (0.6,0.45) -- (0,-0.45); + %\path (0.8,0); + } + }, + inkY/.style={code={ + \draw[line width={\tkzbrushthick},-{ink[bend]}] (0,0.5) -- (0.25,0); + \draw[line width={\tkzbrushthick},{ink[bend]}-{ink[bend]}] (0.5,0.5) -- (0,-0.5); + %\draw[line width=5,{ink[bend]}-{ink[bend]}] (0,0.45) -- (0.3,0); + %\draw[line width=5,{ink[bend]}-{ink[bend]}] (0.6,0.45) -- (0,-0.45); + %\path (0.8,0); + } + }, + inkZ/.style={code={% + \draw[line width={\tkzbrushthick},-{ink[bend]}] (0,0.5) --(0.5,0.5) -- (0,-0.5) -- (0.5,-0.45); + %\draw[line width=5,{ink[bend]}-{ink[bend]}] (0,0.45) --(0.6,0.45) -- (0,-0.45) -- (0.6,-0.45); + %\path (0.8,0); + } + }, + inkspace/.style={code={\path (0,0) (0.2,0);}}, +} + +%------macros +\NewDocumentCommand\tkzbrush{ O{} D<>{} m }{% + \restoreKV[tkzbrush]% + \setKV[tkzbrush]{#1}% + \StrChar{#3}{1}[\myfisrtchar]% + \StrLen{#3}[\mynbofchars]% + \begin{tikzpicture}%[bezier bounding box] + \pic[bezier bounding box,local bounding box=box1,scale={\tkzbrushscale},#2] at (0,0) {brush\myfisrtchar} ;% + %on boucle les lettres une par une ?? + \foreach \i [count=\Y,evaluate=\Y as \Z using {int(\Y+1)}] in {2,...,\mynbofchars}{% + \StrChar{#3}{\i}[\mytmpchar]% + \IfStrEq{\mytmpchar}{ }% + {% + \edef\temp{\noexpand\pic[bezier bounding box,right=2mm of box\Y,local bounding box=box\Z,scale={\tkzbrushscale},#2] {brushspace};} + \temp% + }% + {% + \edef\temp{\noexpand\pic[bezier bounding box,right=2mm of box\Y,local bounding box=box\Z,scale={\tkzbrushscale},#2] {brush\mytmpchar};} + \temp% + }% + }% + \end{tikzpicture}% +} + +\NewDocumentCommand\tkzink{ O{} D<>{} m }{% + \restoreKV[tkzbrush]% + \setKV[tkzbrush]{#1}% + \StrChar{#3}{1}[\myfisrtchar]% + \StrLen{#3}[\mynbofchars]% + \begin{tikzpicture}[brushcolor,line join=round,line cap=round]%,bezier bounding box] + \pic[bezier bounding box,local bounding box=box1,scale={\tkzbrushscale},#2] at (0,0) {ink\myfisrtchar} ;% + \foreach \i [count=\Y,evaluate=\Y as \Z using {int(\Y+1)}] in {2,...,\mynbofchars}{% + \StrChar{#3}{\i}[\mytmpchar]% + \IfStrEq{\mytmpchar}{ }% + {% + \edef\temp{\noexpand\pic[bezier bounding box,right=2mm of box\Y,local bounding box=box\Z,scale={\tkzbrushscale},#2] {inkspace};} + \temp% + }% + {% + \edef\temp{\noexpand\pic[bezier bounding box,right=2mm of box\Y,local bounding box=box\Z,scale={\tkzbrushscale},#2] {ink\mytmpchar};} + \temp% + }% + }% + \end{tikzpicture}% +} + + +%====PixlArt Words +\def\lsteightbittikzA{0,1,1,1,0,1,0,0,0,1,1,0,0,0,1,1,0,0,0,1,1,1,1,1,1,1,0,0,0,1,1,0,0,0,1}%7C*5L +\def\lsteightbittikzB{1,1,1,1,0,1,0,0,0,1,1,0,0,0,1,1,1,1,1,0,1,0,0,0,1,1,0,0,0,1,1,1,1,1,0}%7C*5L +\def\lsteightbittikzC{0,1,1,1,0,1,0,0,0,1,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,1,1,1,0} +\def\lsteightbittikzD{1,1,1,0,0,1,0,0,1,0,1,0,0,0,1,1,0,0,0,1,1,0,0,0,1,1,0,0,1,0,1,1,1,0,0} +\def\lsteightbittikzE{1,1,1,1,1,1,0,0,0,0,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,0,0,0,0,1,1,1,1,1} +\def\lsteightbittikzF{1,1,1,1,1,1,0,0,0,0,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0} +\def\lsteightbittikzG{0,1,1,1,0,1,0,0,0,1,1,0,0,0,0,1,0,1,1,1,1,0,0,0,1,1,0,0,0,1,0,1,1,1,0} +\def\lsteightbittikzH{1,0,0,0,1,1,0,0,0,1,1,0,0,0,1,1,1,1,1,1,1,0,0,0,1,1,0,0,0,1,1,0,0,0,1} +\def\lsteightbittikzI{1,1,1,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,1,1,1} +\def\lsteightbittikzJ{0,0,1,1,1,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,0,0,1,1,0,0} +\def\lsteightbittikzK{1,0,0,0,1,1,0,0,1,0,1,0,1,0,0,1,1,0,0,0,1,0,1,0,0,1,0,0,1,0,1,0,0,0,1} +\def\lsteightbittikzL{1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,1,1,1,1} +\def\lsteightbittikzM{1,0,0,0,1,1,1,0,1,1,1,0,1,0,1,1,0,1,0,1,1,0,0,0,1,1,0,0,0,1,1,0,0,0,1} +\def\lsteightbittikzN{1,0,0,0,1,1,0,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,1,1,0,0,0,1,1,0,0,0,1} +\def\lsteightbittikzO{0,1,1,1,0,1,0,0,0,1,1,0,0,0,1,1,0,0,0,1,1,0,0,0,1,1,0,0,0,1,0,1,1,1,0} +\def\lsteightbittikzP{1,1,1,1,0,1,0,0,0,1,1,0,0,0,1,1,1,1,1,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0} +\def\lsteightbittikzQ{0,1,1,1,0,1,0,0,0,1,1,0,0,0,1,1,0,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,1,0,1} +\def\lsteightbittikzR{1,1,1,1,0,1,0,0,0,1,1,0,0,0,1,1,1,1,1,0,1,0,1,0,0,1,0,0,1,0,1,0,0,0,1} +\def\lsteightbittikzS{0,1,1,1,1,1,0,0,0,0,1,0,0,0,0,0,1,1,1,0,0,0,0,0,1,0,0,0,0,1,1,1,1,1,0} +\def\lsteightbittikzT{1,1,1,1,1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0} +\def\lsteightbittikzU{1,0,0,0,1,1,0,0,0,1,1,0,0,0,1,1,0,0,0,1,1,0,0,0,1,1,0,0,0,1,0,1,1,1,0} +\def\lsteightbittikzV{1,0,0,0,1,1,0,0,0,1,1,0,0,0,1,1,0,0,0,1,1,0,0,0,1,0,1,0,1,0,0,0,1,0,0} +\def\lsteightbittikzW{1,0,1,0,1,1,0,1,0,1,1,0,1,0,1,1,0,1,0,1,1,0,1,0,1,1,0,1,0,1,0,1,0,1,0} +\def\lsteightbittikzX{1,0,0,0,1,1,0,0,0,1,0,1,0,1,0,0,0,1,0,0,0,1,0,1,0,1,0,0,0,1,1,0,0,0,1} +\def\lsteightbittikzY{1,0,0,0,1,1,0,0,0,1,1,0,0,0,1,0,1,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0} +\def\lsteightbittikzZ{1,1,1,1,1,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,1,1,1,1,1} +\def\lsteightbittikza{0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,0,1,0,1,1,1,1} +\def\lsteightbittikzaaccent{0,1,1,1,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,0,1,0,1,1,1,1} +\def\lsteightbittikzaaigu{0,1,0,1,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,0,1,0,1,1,1,1} +\def\lsteightbittikzb{1,0,0,0,0,1,0,0,0,0,1,0,1,1,0,1,1,0,0,1,1,0,0,0,1,1,0,0,0,1,1,1,1,1,0} +\def\lsteightbittikzc{0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,1,1,1,0} +\def\lsteightbittikzd{0,0,0,0,1,0,0,0,0,1,0,1,1,0,1,1,0,0,1,1,1,0,0,0,1,1,0,0,0,1,0,1,1,1,1} +\def\lsteightbittikze{0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,0} +\def\lsteightbittikzeaccent{0,1,1,1,0,0,0,0,0,0,0,1,1,1,0,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,0} +\def\lsteightbittikzeaigu{0,1,0,1,0,0,0,0,0,0,0,1,1,1,0,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,0} +\def\lsteightbittikzf{0,0,1,1,0,0,1,0,0,1,0,1,0,0,0,1,1,1,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0} +\def\lsteightbittikzg{0,0,0,0,0,0,1,1,1,1,1,0,0,0,1,1,0,0,0,1,0,1,1,1,1,0,0,0,0,1,0,1,1,1,0} +\def\lsteightbittikzh{1,0,0,0,0,1,0,0,0,0,1,0,1,1,0,1,1,0,0,1,1,0,0,0,1,1,0,0,0,1,1,0,0,0,1} +\def\lsteightbittikzi{0,1,0,0,0,0,1,1,0,0,1,0,0,1,0,0,1,0,1,1,1} +\def\lsteightbittikziaccent{1,1,1,0,0,0,1,1,0,0,1,0,0,1,0,0,1,0,1,1,1} +\def\lsteightbittikziaigu{1,0,1,0,0,0,1,1,0,0,1,0,0,1,0,0,1,0,1,1,1} +\def\lsteightbittikzj{0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,1,0,0,0,1,1,0,0,1,0,1,1,0} +\def\lsteightbittikzk{1,0,0,0,1,0,0,0,1,0,0,1,1,0,1,0,1,1,0,0,1,0,1,0,1,0,0,1} +\def\lsteightbittikzl{1,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,1,1,1} +\def\lsteightbittikzm{0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,1,0,1,1,0,1,0,1,1,0,0,0,1,1,0,0,0,1} +\def\lsteightbittikzn{0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,0,1,1,0,0,0,1,1,0,0,0,1,1,0,0,0,1} +\def\lsteightbittikzo{0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,0,1,1,0,0,0,1,1,0,0,0,1,0,1,1,1,0} +\def\lsteightbittikzp{0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,0,0,0,1,1,1,1,1,0,1,0,0,0,0,1,0,0,0,0} +\def\lsteightbittikzq{0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,1,1,0,1,1,1,1,0,0,0,0,1,0,0,0,0,1} +\def\lsteightbittikzr{0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,0,1,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0} +\def\lsteightbittikzs{0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,0,0,0,1,1,1,0,0,0,0,0,1,1,1,1,1,0} +\def\lsteightbittikzt{0,1,0,0,0,0,1,0,0,0,1,1,1,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,1,1,0} +\def\lsteightbittikzu{0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,0,1,1,0,0,0,1,1,0,0,1,1,0,1,1,0,1} +\def\lsteightbittikzv{0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,0,1,1,0,0,0,1,0,1,1,1,0,0,0,1,0,0} +\def\lsteightbittikzw{0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,0,1,0,1,1,0,1,0,1,1,0,1,0,1,0,1,1,1,0} +\def\lsteightbittikzx{0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,1,0,0,0,1,0,0,0,1,0,1,0,1,0,0,0,1} +\def\lsteightbittikzy{0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,0,1,0,1,1,1,1,0,0,0,0,1,0,1,1,1,0} +\def\lsteightbittikzz{0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,1,1,1,1} +\def\lsteightbittikzzero{0,1,1,1,0,1,0,0,0,1,1,0,0,1,1,1,0,1,0,1,1,1,0,0,1,1,0,0,0,1,0,1,1,1,0} +\def\lsteightbittikzun{0,1,0,1,1,0,0,1,0,0,1,0,0,1,0,0,1,0,1,1,1} +\def\lsteightbittikzdeux{0,1,1,1,0,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,1,1,1,1} +\def\lsteightbittikztrois{1,1,1,1,1,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,1,0,0,0,1,0,1,1,1,0} +\def\lsteightbittikzquatre{0,0,0,1,0,0,0,1,1,0,0,1,0,1,0,1,0,0,1,0,1,1,1,1,1,0,0,0,1,0,0,0,0,1,0} +\def\lsteightbittikzcinq{1,1,1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,0,1,0,0,0,0,1,1,0,0,0,1,0,1,1,1,0} +\def\lsteightbittikzsix{0,0,1,1,0,0,1,0,0,0,1,0,0,0,0,1,1,1,1,0,1,0,0,0,1,1,0,0,0,1,0,1,1,1,0} +\def\lsteightbittikzsept{1,1,1,1,1,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0} +\def\lsteightbittikzhuit{0,1,1,1,0,1,0,0,0,1,1,0,0,0,1,0,1,1,1,0,1,0,0,0,1,1,0,0,0,1,0,1,1,1,0} +\def\lsteightbittikzneuf{0,1,1,1,0,1,0,0,0,1,1,0,0,0,1,0,1,1,1,1,0,0,0,0,1,0,0,0,1,0,0,1,1,0,0} +\def\lsteightbittikzapostr{1,1,0,1,1,0,0,0,0,0,0,0,0} +\def\lsteightbittikzparg{0,0,1,0,1,0,1,0,0,1,0,0,1,0,0,0,1,0,0,0,1} +\def\lsteightbittikzpard{1,0,0,0,1,0,0,0,1,0,0,1,0,0,1,0,1,0,1,0,0} +\def\lsteightbittikzfois{0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,0,1,1,1,0,1,0,1,0,1,0,0,1,0,0,0,0,0,0,0} +\def\lsteightbittikzplus{0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,1,1,1,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0} +\def\lsteightbittikzvirgule{0,0,0,0,0,0,0,0,1,1,0,1,1,0} +\def\lsteightbittikzmoins{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0} +\def\lsteightbittikzpoint{0,0,0,0,0,0,0,0,0,0,1,1,1,1} +\def\lsteightbittikzslash{0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0} +\def\lsteightbittikzdeuxpoints{0,0,1,1,1,1,0,0,1,1,1,1,0,0} +\def\lsteightbittikzpointvirg{0,0,1,1,1,1,0,0,1,1,0,1,1,0} +\def\lsteightbittikzinf{0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0} +\def\lsteightbittikzeggal{0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0} +\def\lsteightbittikzsup{1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0} +\def\lsteightbittikzinterro{0,1,1,1,0,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0} +\def\lsteightbittikzexcla{1,1,1,1,1,0,1} +\def\lsteightbittikzcrog{1,1,1,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,1,1} +\def\lsteightbittikzgrod{1,1,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,1,1,1} +\def\lsteightbittikzbarre{1,1,1,1,1,1,1} +\def\lsteightbittikzspace{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0} + +\newlength{\eightbitpartthick} +\newlength{\eightbitpartheight} +\newlength{\eightbitpartunit} +\setlength{\eightbitpartthick}{0.1mm} +\setlength{\eightbitpartheight}{11mm} +\setlength{\eightbitpartunit}{1mm} + +\defKV[eightbitpart]{% + %unit=\def\eightbitpartunit{#1},% + height=\setlength{\eightbitpartheight}{#1},% + thick=\setlength{\eightbitpartthick}{#1},% + color=\def\eightbitpartcolor{#1},% + gridcolor=\def\eightbitpartgridcolor{#1},% + offseth=\def\eightbitpartoffseth{#1},% + offsetv=\def\eightbitpartoffsetv{#1}% +} + +\setKVdefault[eightbitpart]{% + height=11mm,% + thick=0.1mm,% + color=black,% + gridcolor=gray, + offseth=1,% + offsetv=2,% + gridafter=false,% + nospaceafter=false,% + border=false +} + +\NewDocumentCommand\tkzpixletter{ }{% + \begingroup + \catcode`\;=12 + \catcode`\:=12 + \catcode`\!=12 + \catcode`\?=12 + \PixlLetterAux +} + +\NewDocumentCommand\PixlLetterAux{ O{} D<>{} m }{% + \endgroup + \restoreKV[eightbitpart]% + \setKV[eightbitpart]{#1}% + \xdef\tmplarg{5}% + %MAJUSCULE + \IfStrEq{#3}{A}{\xdef\TMPLIST{\lsteightbittikzA}}{}% + \IfStrEq{#3}{B}{\xdef\TMPLIST{\lsteightbittikzB}}{}% + \IfStrEq{#3}{C}{\xdef\TMPLIST{\lsteightbittikzC}}{}% + \IfStrEq{#3}{D}{\xdef\TMPLIST{\lsteightbittikzD}}{}% + \IfStrEq{#3}{E}{\xdef\TMPLIST{\lsteightbittikzE}}{}% + \IfStrEq{#3}{F}{\xdef\TMPLIST{\lsteightbittikzF}}{}% + \IfStrEq{#3}{G}{\xdef\TMPLIST{\lsteightbittikzG}}{}% + \IfStrEq{#3}{H}{\xdef\TMPLIST{\lsteightbittikzH}}{}% + \IfStrEq{#3}{I}{\xdef\TMPLIST{\lsteightbittikzI}\xdef\tmplarg{3}}{}% + \IfStrEq{#3}{J}{\xdef\TMPLIST{\lsteightbittikzJ}}{}% + \IfStrEq{#3}{K}{\xdef\TMPLIST{\lsteightbittikzK}}{}% + \IfStrEq{#3}{L}{\xdef\TMPLIST{\lsteightbittikzL}}{}% + \IfStrEq{#3}{M}{\xdef\TMPLIST{\lsteightbittikzM}}{}% + \IfStrEq{#3}{N}{\xdef\TMPLIST{\lsteightbittikzN}}{}% + \IfStrEq{#3}{O}{\xdef\TMPLIST{\lsteightbittikzO}}{}% + \IfStrEq{#3}{P}{\xdef\TMPLIST{\lsteightbittikzP}}{}% + \IfStrEq{#3}{Q}{\xdef\TMPLIST{\lsteightbittikzQ}}{}% + \IfStrEq{#3}{R}{\xdef\TMPLIST{\lsteightbittikzR}}{}% + \IfStrEq{#3}{S}{\xdef\TMPLIST{\lsteightbittikzS}}{}% + \IfStrEq{#3}{T}{\xdef\TMPLIST{\lsteightbittikzT}}{}% + \IfStrEq{#3}{U}{\xdef\TMPLIST{\lsteightbittikzU}}{}% + \IfStrEq{#3}{V}{\xdef\TMPLIST{\lsteightbittikzV}}{}% + \IfStrEq{#3}{W}{\xdef\TMPLIST{\lsteightbittikzW}}{}% + \IfStrEq{#3}{X}{\xdef\TMPLIST{\lsteightbittikzX}}{}% + \IfStrEq{#3}{Y}{\xdef\TMPLIST{\lsteightbittikzY}}{}% + \IfStrEq{#3}{Z}{\xdef\TMPLIST{\lsteightbittikzZ}}{}% + %minuscule + \IfStrEq{#3}{a}{\xdef\TMPLIST{\lsteightbittikza}}{}% + \IfStrEq{#3}{à}{\xdef\TMPLIST{\lsteightbittikzaaccent}}{}% + \IfStrEq{#3}{ä}{\xdef\TMPLIST{\lsteightbittikzaaigu}}{}% + \IfStrEq{#3}{b}{\xdef\TMPLIST{\lsteightbittikzb}}{}% + \IfStrEq{#3}{c}{\xdef\TMPLIST{\lsteightbittikzc}}{}% + \IfStrEq{#3}{d}{\xdef\TMPLIST{\lsteightbittikzd}}{}% + \IfStrEq{#3}{e}{\xdef\TMPLIST{\lsteightbittikze}}{}% + \IfStrEq{#3}{é}{\xdef\TMPLIST{\lsteightbittikzeaccent}}{}% + \IfStrEq{#3}{è}{\xdef\TMPLIST{\lsteightbittikzeaccent}}{}% + \IfStrEq{#3}{ê}{\xdef\TMPLIST{\lsteightbittikzeaccent}}{}% + \IfStrEq{#3}{ë}{\xdef\TMPLIST{\lsteightbittikzeaigu}}{}% + \IfStrEq{#3}{f}{\xdef\TMPLIST{\lsteightbittikzf}}{}% + \IfStrEq{#3}{g}{\xdef\TMPLIST{\lsteightbittikzg}}{}% + \IfStrEq{#3}{h}{\xdef\TMPLIST{\lsteightbittikzh}}{}% + \IfStrEq{#3}{i}{\xdef\TMPLIST{\lsteightbittikzi}\xdef\tmplarg{3}}{}% + \IfStrEq{#3}{î}{\xdef\TMPLIST{\lsteightbittikziaccent}\xdef\tmplarg{3}}{}% + \IfStrEq{#3}{ï}{\xdef\TMPLIST{\lsteightbittikziaigu}\xdef\tmplarg{3}}{}% + \IfStrEq{#3}{j}{\xdef\TMPLIST{\lsteightbittikzj}\xdef\tmplarg{4}}{}% + \IfStrEq{#3}{k}{\xdef\TMPLIST{\lsteightbittikzk}\xdef\tmplarg{4}}{}% + \IfStrEq{#3}{l}{\xdef\TMPLIST{\lsteightbittikzl}\xdef\tmplarg{3}}{}% + \IfStrEq{#3}{m}{\xdef\TMPLIST{\lsteightbittikzm}}{}% + \IfStrEq{#3}{n}{\xdef\TMPLIST{\lsteightbittikzn}}{}% + \IfStrEq{#3}{o}{\xdef\TMPLIST{\lsteightbittikzo}}{}% + \IfStrEq{#3}{p}{\xdef\TMPLIST{\lsteightbittikzp}}{}% + \IfStrEq{#3}{q}{\xdef\TMPLIST{\lsteightbittikzq}}{}% + \IfStrEq{#3}{r}{\xdef\TMPLIST{\lsteightbittikzr}}{}% + \IfStrEq{#3}{s}{\xdef\TMPLIST{\lsteightbittikzs}}{}% + \IfStrEq{#3}{t}{\xdef\TMPLIST{\lsteightbittikzt}}{}% + \IfStrEq{#3}{u}{\xdef\TMPLIST{\lsteightbittikzu}}{}% + \IfStrEq{#3}{v}{\xdef\TMPLIST{\lsteightbittikzv}}{}% + \IfStrEq{#3}{w}{\xdef\TMPLIST{\lsteightbittikzw}}{}% + \IfStrEq{#3}{x}{\xdef\TMPLIST{\lsteightbittikzx}}{}% + \IfStrEq{#3}{y}{\xdef\TMPLIST{\lsteightbittikzy}}{}% + \IfStrEq{#3}{z}{\xdef\TMPLIST{\lsteightbittikzz}}{}% + %chiffres + \IfStrEq{#3}{0}{\xdef\TMPLIST{\lsteightbittikzzero}}{}% + \IfStrEq{#3}{1}{\xdef\TMPLIST{\lsteightbittikzun}\xdef\tmplarg{3}}{}% + \IfStrEq{#3}{2}{\xdef\TMPLIST{\lsteightbittikzdeux}}{}% + \IfStrEq{#3}{3}{\xdef\TMPLIST{\lsteightbittikztrois}}{}% + \IfStrEq{#3}{4}{\xdef\TMPLIST{\lsteightbittikzquatre}}{}% + \IfStrEq{#3}{5}{\xdef\TMPLIST{\lsteightbittikzcinq}}{}% + \IfStrEq{#3}{6}{\xdef\TMPLIST{\lsteightbittikzsix}}{}% + \IfStrEq{#3}{7}{\xdef\TMPLIST{\lsteightbittikzsept}}{}% + \IfStrEq{#3}{8}{\xdef\TMPLIST{\lsteightbittikzhuit}}{}% + \IfStrEq{#3}{9}{\xdef\TMPLIST{\lsteightbittikzneuf}}{}% + %ponctuation + \IfStrEq{#3}{'}{\xdef\TMPLIST{\lsteightbittikzapostr}\xdef\tmplarg{2}}{}% + \IfStrEq{#3}{(}{\xdef\TMPLIST{\lsteightbittikzparg}\xdef\tmplarg{3}}{}% + \IfStrEq{#3}{)}{\xdef\TMPLIST{\lsteightbittikzpard}\xdef\tmplarg{3}}{}% + \IfStrEq{#3}{*}{\xdef\TMPLIST{\lsteightbittikzfois}}{}% + \IfStrEq{#3}{+}{\xdef\TMPLIST{\lsteightbittikzplus}}{}% + \IfStrEq{#3}{,}{\xdef\TMPLIST{\lsteightbittikzvirgule}\xdef\tmplarg{2}}{}% + \IfStrEq{#3}{-}{\xdef\TMPLIST{\lsteightbittikzmoins}}{}% + \IfStrEq{#3}{.}{\xdef\TMPLIST{\lsteightbittikzpoint}\xdef\tmplarg{2}}{}% + \IfStrEq{#3}{/}{\xdef\TMPLIST{\lsteightbittikzslash}}{}% + \IfStrEq{#3}{:}{\xdef\TMPLIST{\lsteightbittikzdeuxpoints}\xdef\tmplarg{2}}{}% + \IfStrEq{#3}{;}{\xdef\TMPLIST{\lsteightbittikzpointvirg}\xdef\tmplarg{2}}{}% + \IfStrEq{#3}{<}{\xdef\TMPLIST{\lsteightbittikzinf}}{}% + \IfStrEq{#3}{=}{\xdef\TMPLIST{\lsteightbittikzeggal}}{}% + \IfStrEq{#3}{>}{\xdef\TMPLIST{\lsteightbittikzsup}}{}% + \IfStrEq{#3}{?}{\xdef\TMPLIST{\lsteightbittikzinterro}}{}% + \IfStrEq{#3}{!}{\xdef\TMPLIST{\lsteightbittikzexcla}\xdef\tmplarg{1}}{}% + \IfStrEq{#3}{[}{\xdef\TMPLIST{\lsteightbittikzcrog}\xdef\tmplarg{3}}{}% + \IfStrEq{#3}{]}{\xdef\TMPLIST{\lsteightbittikzgrod}\xdef\tmplarg{3}}{}% + \IfStrEq{#3}{|}{\xdef\TMPLIST{\lsteightbittikzbarre}\xdef\tmplarg{1}}{}% + \IfStrEq{#3}{ }{\xdef\TMPLIST{\lsteightbittikzspace}\xdef\tmplarg{3}}{}% + %la case ! + \xdef\tmpnumbercasesv{\inteval{7+2*\eightbitpartoffsetv}}% + \pgfmathsetlength{\eightbitpartunit}{\eightbitpartheight/\tmpnumbercasesv}% + %tikzpicture + \begin{tikzpicture}[line cap=rect,x=\eightbitpartunit,y=\eightbitpartunit,line width=\eightbitpartthick,#2] + %clipping ? + %\clip ([shift={(-0.5\eightbitpartthick,-0.5\eightbitpartthick)}]{-\eightbitpartoffseth},{-\eightbitpartoffsetv}) rectangle ([shift={(0.5\eightbitpartthick,0.5\eightbitpartthick)}]{\tmplarg+\eightbitpartoffseth},{7+\eightbitpartoffsetv}) ; + %gridbefore + \ifboolKV[eightbitpart]{gridafter}% + {}% + {% + \foreach \x in {-\eightbitpartoffseth,...,\numexpr\tmplarg+\eightbitpartoffseth\relax} + {% + \draw[line width=\eightbitpartthick,\eightbitpartgridcolor] (\x,{-\eightbitpartoffsetv}) --++ (0,{7+2*\eightbitpartoffsetv}) ; + }% + \foreach \y in {-\eightbitpartoffsetv,...,\numexpr7+\eightbitpartoffseth+\eightbitpartoffseth\relax} + {% + \draw[line width=\eightbitpartthick,\eightbitpartgridcolor] ({-\eightbitpartoffseth},\y) --++ ({\tmplarg+2*\eightbitpartoffseth},0) ; + }% + }% + \ifnum\tmplarg=1% + \foreach \i [count=\j] in \TMPLIST {% + \ifnum\i=1% + \fill[\eightbitpartcolor] (0,{7-\j}) rectangle++ (1,1) ; + \fi% + }% + \fi% + \ifnum\tmplarg=2% + \foreach \i [count=\j] in \TMPLIST {% + \ifnum\i=1% + \xintifboolexpr{ \xintiiOdd{\j} == 1 }% + {%si c'est impair + \xdef\tmpX{0}% + \xdef\tmpY{\xintieval{(\j-1)/2}}% + }% + {%si c'est pair + \xdef\tmpX{1}% + \xdef\tmpY{\xintieval{(\j)/2-1}}% + }% + \fill[\eightbitpartcolor] ({\tmpX},{6-\tmpY}) rectangle++ (1,1) ; + \fi% + }% + \fi% + \ifnum\tmplarg>2% + \foreach \i [count=\j] in \TMPLIST {% + \ifnum\i=1% + \xdef\tmpX{\xintiiRem{\j-1}{\tmplarg}}% + \xdef\tmpY{\xintiiQuo{\j-1}{\tmplarg}}% + \fill[\eightbitpartcolor] ({\tmpX},{6-\tmpY}) rectangle++ (1,1) ; + \fi% + }% + \fi% + %gridafter + \ifboolKV[eightbitpart]{gridafter}% + {% + \foreach \x in {-\eightbitpartoffseth,...,\numexpr\tmplarg+\eightbitpartoffseth\relax} + {% + \draw[line width=\eightbitpartthick,\eightbitpartgridcolor] (\x,{-\eightbitpartoffsetv}) --++ (0,{7+2*\eightbitpartoffsetv}) ; + }% + \foreach \y in {-\eightbitpartoffsetv,...,\numexpr7+\eightbitpartoffseth+\eightbitpartoffseth\relax} + {% + \draw[line width=\eightbitpartthick,\eightbitpartgridcolor] ({-\eightbitpartoffseth},\y) --++ ({\tmplarg+2*\eightbitpartoffseth},0) ; + }% + }% + {}% + \end{tikzpicture}% + \ifboolKV[eightbitpart]{nospaceafter}{\hspace*{-\eightbitpartthick}}{}% +} + +\NewDocumentCommand\tkzpixlquote{ O{} D<>{} }{% + \restoreKV[eightbitpart]% + \setKV[eightbitpart]{#1}% + \xdef\tmplarg{2}% + \xdef\tmpnumbercasesv{\inteval{7+2*\eightbitpartoffsetv}}% + \pgfmathsetlength{\eightbitpartunit}{\eightbitpartheight/\tmpnumbercasesv}% + \begin{tikzpicture}[line cap=rect,x=\eightbitpartunit,y=\eightbitpartunit,line width=\eightbitpartthick,#2] + %clipping ? + %\clip ({-\eightbitpartoffseth},{-\eightbitpartoffsetv}) rectangle ({\tmplarg+\eightbitpartoffseth},{7+\eightbitpartoffsetv}) ; + %gridbefore + \ifboolKV[eightbitpart]{gridafter}% + {}% + {% + \foreach \x in {-\eightbitpartoffseth,...,\numexpr\tmplarg+\eightbitpartoffseth\relax} + {% + \draw[line width=\eightbitpartthick,\eightbitpartgridcolor] (\x,{-\eightbitpartoffsetv}) --++ (0,{7+2*\eightbitpartoffsetv}) ; + }% + \foreach \y in {-\eightbitpartoffsetv,...,\numexpr7+\eightbitpartoffseth+\eightbitpartoffseth\relax} + {% + \draw[line width=\eightbitpartthick,\eightbitpartgridcolor] ({-\eightbitpartoffseth},\y) --++ ({\tmplarg+2*\eightbitpartoffseth},0) ; + }% + }% + \fill[\eightbitpartcolor] ({0},{6}) rectangle++ (1,1) ; + \fill[\eightbitpartcolor] ({1},{6}) rectangle++ (1,1) ; + \fill[\eightbitpartcolor] ({1},{5}) rectangle++ (1,1) ; + \fill[\eightbitpartcolor] ({0},{4}) rectangle++ (1,1) ; + %gridafter + \ifboolKV[eightbitpart]{gridafter}% + {% + \foreach \x in {-\eightbitpartoffseth,...,\numexpr\tmplarg+\eightbitpartoffseth\relax} + {% + \draw[line width=\eightbitpartthick,\eightbitpartgridcolor] (\x,{-\eightbitpartoffsetv}) --++ (0,{7+2*\eightbitpartoffsetv}) ; + }% + \foreach \y in {-\eightbitpartoffsetv,...,\numexpr7+\eightbitpartoffseth+\eightbitpartoffseth\relax} + {% + \draw[line width=\eightbitpartthick,\eightbitpartgridcolor] ({-\eightbitpartoffseth},\y) --++ ({\tmplarg+2*\eightbitpartoffseth},0) ; + }% + }% + {}% + \end{tikzpicture}% + \ifboolKV[eightbitpart]{nospaceafter}{\hspace*{-2\eightbitpartthick}}{}% +} + +\NewDocumentCommand\tkzpixl{ }{% + \begingroup + \catcode`\;=12 + \catcode`\:=12 + \catcode`\!=12 + \catcode`\?=12 + \PixlLettersAux +} + +\NewDocumentCommand\PixlLettersAux{ O{} D<>{} m }{% + \endgroup + \setKV[eightbitpart]{#1}% + \StrLen{#3}[\tmpnbcaract]% + \ifboolKV[eightbitpart]{border}% + {% + \setlength{\fboxrule}{1.75\eightbitpartthick}% + \setlength{\fboxsep}{-\eightbitpartthick}% + \fbox{% + \foreach \i in {1,...,\tmpnbcaract}{% + \StrChar{#3}{\i}[\tmpcaract]% + \tkzpixletter[#1]<#2>{\tmpcaract}% + \ifnum\i<\tmpnbcaract\hspace*{-\eightbitpartthick}\fi% + }% + }% + \ifboolKV[eightbitpart]{nospaceafter}{\hspace*{-\eightbitpartthick}}{}% + \fboxrule=0.4pt% + \fboxsep=3.0pt% + }% + {% + \foreach \i in {1,...,\tmpnbcaract}{% + \StrChar{#3}{\i}[\tmpcaract]% + \tkzpixletter[#1]<#2>{\tmpcaract}% + \ifnum\i<\tmpnbcaract\hspace*{-\eightbitpartthick}\fi% + \ifboolKV[eightbitpart]{nospaceafter}{\hspace*{-\eightbitpartthick}}{}% + }% + }% +} + + +\endinput
\ No newline at end of file diff --git a/graphics/pgf/contrib/tikz3d-fr/doc/tikz3d-fr-doc.pdf b/graphics/pgf/contrib/tikz3d-fr/doc/tikz3d-fr-doc.pdf Binary files differindex 68574d0bff..e765213680 100644 --- a/graphics/pgf/contrib/tikz3d-fr/doc/tikz3d-fr-doc.pdf +++ b/graphics/pgf/contrib/tikz3d-fr/doc/tikz3d-fr-doc.pdf diff --git a/graphics/pgf/contrib/tikz3d-fr/doc/tikz3d-fr-doc.tex b/graphics/pgf/contrib/tikz3d-fr/doc/tikz3d-fr-doc.tex index 287d240690..f45f5b8eb8 100644 --- a/graphics/pgf/contrib/tikz3d-fr/doc/tikz3d-fr-doc.tex +++ b/graphics/pgf/contrib/tikz3d-fr/doc/tikz3d-fr-doc.tex @@ -4,8 +4,8 @@ \documentclass[french,a4paper,11pt]{article} \usepackage[margin=2cm,includefoot]{geometry} -\def\TPversion{0.1.2} -\def\TPdate{22 juillet 2023} +\def\TPversion{0.1.3} +\def\TPdate{16 septembre 2024} \usepackage[utf8]{inputenc} \usepackage[T1]{fontenc} \usepackage{amsmath,amssymb} @@ -16,6 +16,7 @@ \makesavenoteenv{tabular} \usepackage{enumitem} \usepackage{tabularray} +\UseTblrLibrary{diagbox} \usepackage{fancyvrb} \usepackage{fancyhdr} \fancyhf{} @@ -206,6 +207,7 @@ \vspace*{-2cm} + \def\listecouleursdes{red!25,blue!25,yellow!25,orange!25,green!25}\TirageAleaDesTriDim[EspaceH=-2mm]{5} \hfill \begin{EmpilementCubes} \PlaquePetitsCubes[cyan/red/green/yellow]{ 3111-1-4 / 233123 / 2-1112 } @@ -242,17 +244,19 @@ \tableofcontents -\vfill +\pagebreak \part{Historique} +\verb|v0.1.3|~:~~~~Affichage de dés en 3d (avec aléatoire possible) + \verb|v0.1.2|~:~~~~Option pour l'épaisseur des traits + \textsf{[line join=round]} pour les cubes \verb|v0.1.1|~:~~~~Tracé des segments individuels avec l'option \textsf{[line cap=round]} \verb|v0.1.0|~:~~~~Version initiale -\newpage +\pagebreak \part{Introduction} @@ -268,7 +272,8 @@ Le package propose des commandes basiques -- et francisées -- pour travailler s \item une commande pour tracer et personnaliser un cube ; \item des commandes pour créer/afficher/nommer des points de l'espace ; \item des commandes pour tracer un ou plusieurs segments ; - \item des commandes et un environnement pour travailler sur des \textit{empilements} de cubes. + \item des commandes et un environnement pour travailler sur des \textit{empilements} de cubes ; + \item des commandes pour représenter des dés en perspective (avec aléatoire possible). \end{itemize} \vspace*{-\baselineskip}\leavevmode \end{noteblock} @@ -297,8 +302,8 @@ Il n'existe pas d'option pour le package, et \texttt{xcolor} n'est pas chargé. \textsf{tikz3d-fr} charge les packages suivantes : \begin{itemize} - \item \texttt{tikz}, \texttt{xstring}, \texttt{xintexpr}, \texttt{simplekv} et \texttt{xinttools} et \texttt{listofitems} ; - \item les librairies \texttt{\textit{tikz}.calc} et \texttt{\textit{tikz}.babel}. + \item \texttt{tikz}, \texttt{xstring}, \texttt{xintexpr}, \texttt{simplekv} et \texttt{xinttools} et \texttt{listofitems}, \texttt{tikz-3dplot} et \texttt{randomlist} ; + \item la librairie \texttt{\textit{tikz}.calc}. \end{itemize} Il est compatible avec les compilations usuelles en \textsf{latex}, \textsf{pdflatex}, \textsf{lualatex} ou \textsf{xelatex}. @@ -758,4 +763,144 @@ Par exemple, la \textit{grille} associée à l'empilement précédent est : \end{EmpilementCubes} \end{PresCode} +\newpage + +\part{Dés à jouer, en 3D} + +\section{Fonctionnement global} + +\begin{tipblock} +L'idée est de proposer des commandes pour travailler avec des dés, en 3D, avec possibilité de les \textit{lancer} de manière aléatoire. + +\smallskip + +La commande peut être autonome pour afficher dé par dé, mais elle peut être également à intégrer dans un environnement \texttt{tikzpicture}. +\end{tipblock} + +\begin{importantblock} +Par défaut, les dés ont une hauteur proche de 1~cm (sans la perspective). + +\smallskip + +L'orientation est \textit{globalement} fixée, mais il est possible (dans une certaine mesure) de pivoter les dés (suivants les angles $\theta$ et $\phi$ des coordonnées sphériques). + +\smallskip + +Il est également possible de spécifier un \textit{angle de vue}, droite ou gauche. +\end{importantblock} + + +\begin{PresCodeTex}{listing only} +%affichage indépendant +\DeTriDim[clés]{numéro(s)} +\end{PresCodeTex} + +\begin{PresCodeTex}{listing only} +%affichage dans un environnement +\begin{tikzpicture} + \DeTriDim*[clés]{numéro(s)} +\end{tikzpicture} +\end{PresCodeTex} + +\begin{PresCodeTex}{listing only} +%tirages aléatoires +\TirageAleaDesTriDim[clés]{tirages} +\end{PresCodeTex} + +\begin{PresCode}{} +\DeTriDim{6/2}~\DeTriDim{1/5}~\DeTriDim{6/4}~\DeTriDim{3/2} +\end{PresCode} + +\begin{PresCode}{} +\begin{tikzpicture} + %\tdplotsetmaincoords{70}{110} + \DeTriDim*[Echelle=2]{6/2} + \DeTriDim*[Echelle=2,Origine={(2,-0.2)}]{6/5} + \DeTriDim*[Echelle=2,Origine={(4,-0.4)},]{6/3} + \DeTriDim*[Echelle=2,Origine={(6,-0.6)},Hasard]{} +\end{tikzpicture} +\end{PresCode} + +\begin{PresCode}{} +\TirageAleaDesTriDim[Vue=G,Yams,Echelle=3,Couleurs={red!25,blue!25,yellow!25}]{3} +\end{PresCode} + +\section{Influence des paramètres} + +\subsection{Clés et options} + +\begin{tipblock} +Quelques \Cle{clés} sont disponibles pour cette commande (elles ne sont pas toutes utilisées par les toutes les commandes) : + +\begin{itemize} + \item \Cle{Echelle} : échelle pour modifier la taille ;\hfill{}défaut \Cle{1} + \item \Cle{Couleur} : couleur (individuelle) ;\hfill{}défaut \Cle{lightgray!25} + \item \Cle{CouleurPoints} : couleurs des points ;\hfill{}défaut \Cle{black} + \item \Cle{Phi} : angle $\phi$ de la perpective ;\hfill{}défaut \Cle{110} + \item \Cle{Theta} : angle $\theta$ de la perpective ;\hfill{}défaut \Cle{70} + \item \Cle{Vue} : vue de la perspective (\texttt{D/G}) ;\hfill{}défaut \Cle{D} + \item \Cle{Hasard} : booléen pour un tirage aléatoire ;\hfill{}défaut \Cle{false} + \item \Cle{Origine} : origine du dé pour la version \texttt{tikzpicture} ; + \item en ce qui concerne les clés spécifiques au tirage : + \begin{itemize} + \item \Cle{EspaceH} : espace horizontal entre les dés ;\hfill{}défaut \Cle{0mm} + \item \Cle{Couleurs} : liste des couleurs pour les dés ;\hfill{}défaut \Cle{lightgray!25} + \item \Cle{Yams} : booléen pour forcer un affichage en ligne.\hfill{}défaut \Cle{false} + \end{itemize} +\end{itemize} + +Hormis dans le cas où \texttt{Harsard=true}, l'argument obligatoire, pour l'affichage unique, est à donner sous la forme \texttt{face de devant/face du dessus} (l'autre face visible est déterminée automatiquement). +\end{tipblock} + +\subsection{Exemples} + +\begin{PresCode}{} +\TirageAleaDesTriDim[EspaceH=-2mm]{5} + +\TirageAleaDesTriDim[EspaceH=1mm,Echelle=2,Couleurs=darkgray,CouleurPoints=white]{5} +\end{PresCode} + +\begin{PresCode}{} +\def\listecouleursdes{red!25,blue!25,yellow!25,orange!25,green!25} + +\TirageAleaDesTriDim[Yams,Couleurs=brown!10]{10} + +\TirageAleaDesTriDim[Yams,Echelle=2,Couleurs=\listecouleursdes,CouleurPoints=magenta]{5} + +\TirageAleaDesTriDim[Vue=G,Yams,Echelle=3,Couleurs=\listecouleursdes]{3} +\end{PresCode} + +\subsection{Angles de rotation} + +\begin{cautionblock} +Les paramètres $\theta$ et $\phi$ peuvent être modifiés, en fonction du rendu souhaité. + +Mais comme toutes les faces ne sont pas traitées (du fait de la perspective), il est conseillé de rester dans une \textit{fenêtre classique}. +\end{cautionblock} + +\begin{tipblock} +Vue \texttt{D} : + +\begin{tblr}{hlines,vlines,colspec={*{5}{Q[m,c]}}} + \diagbox{$\phi$}{$\theta$} & 60 & \textbf{70} & 80 & 85 \\ + 95 & \DeTriDim[Hasard,Theta=60,Phi=95]<baseline=0pt>{} & \DeTriDim[Hasard,Theta=70,Phi=95]<baseline=0pt>{} & \DeTriDim[Hasard,Theta=80,Phi=95]<baseline=0pt>{} & \DeTriDim[Hasard,Theta=85,Phi=95]<baseline=0pt>{} \\ + 100 & \DeTriDim[Hasard,Theta=60,Phi=100]<baseline=0pt>{} & \DeTriDim[Hasard,Theta=70,Phi=100]<baseline=0pt>{} & \DeTriDim[Hasard,Theta=80,Phi=100]<baseline=0pt>{} & \DeTriDim[Hasard,Theta=85,Phi=100]<baseline=0pt>{} \\ + \textbf{110} & \DeTriDim[Hasard,Theta=60,Phi=95]<baseline=0pt>{} & \DeTriDim[Hasard,Theta=70,Phi=110,Couleur=red!25]<baseline=0pt>{} & \DeTriDim[Hasard,Theta=80,Phi=110]<baseline=0pt>{} & \DeTriDim[Hasard,Theta=85,Phi=110]<baseline=0pt>{} \\ + 120 & \DeTriDim[Hasard,Theta=60,Phi=120]<baseline=0pt>{} & \DeTriDim[Hasard,Theta=70,Phi=120]<baseline=0pt>{} & \DeTriDim[Hasard,Theta=80,Phi=120]<baseline=0pt>{} & \DeTriDim[Hasard,Theta=85,Phi=120]<baseline=0pt>{} \\ +\end{tblr} +\end{tipblock} + +\begin{tipblock} +Vue \texttt{G} : + +\begin{tblr}{hlines,vlines,colspec={*{5}{Q[m,c]}}} + \diagbox{$\phi$}{$\theta$} & 60 & \textbf{70} & 80 & 85 \\ + 95 & \DeTriDim[Vue=G,Hasard,Theta=60,Phi=95]<baseline=0pt>{} & \DeTriDim[Vue=G,Hasard,Theta=70,Phi=95]<baseline=0pt>{} & \DeTriDim[Vue=G,Hasard,Theta=80,Phi=95]<baseline=0pt>{} & \DeTriDim[Vue=G,Hasard,Theta=85,Phi=95]<baseline=0pt>{} \\ + 100 & \DeTriDim[Vue=G,Hasard,Theta=60,Phi=100]<baseline=0pt>{} & \DeTriDim[Vue=G,Hasard,Theta=70,Phi=100]<baseline=0pt>{} & \DeTriDim[Vue=G,Hasard,Theta=80,Phi=100]<baseline=0pt>{} & \DeTriDim[Vue=G,Hasard,Theta=85,Phi=100]<baseline=0pt>{} \\ + \textbf{110} & \DeTriDim[Vue=G,Hasard,Theta=60,Phi=95]<baseline=0pt>{} & \DeTriDim[Vue=G,Hasard,Theta=70,Phi=110,Couleur=red!25]<baseline=0pt>{} & \DeTriDim[Vue=G,Hasard,Theta=80,Phi=110]<baseline=0pt>{} & \DeTriDim[Vue=G,Hasard,Theta=85,Phi=110]<baseline=0pt>{} \\ + 120 & \DeTriDim[Vue=G,Hasard,Theta=60,Phi=120]<baseline=0pt>{} & \DeTriDim[Vue=G,Hasard,Theta=70,Phi=120]<baseline=0pt>{} & \DeTriDim[Vue=G,Hasard,Theta=80,Phi=120]<baseline=0pt>{} & \DeTriDim[Vue=G,Hasard,Theta=85,Phi=120]<baseline=0pt>{} \\ +\end{tblr} +\end{tipblock} + + \end{document}
\ No newline at end of file diff --git a/graphics/pgf/contrib/tikz3d-fr/tex/tikz3d-fr.sty b/graphics/pgf/contrib/tikz3d-fr/tex/tikz3d-fr.sty index 5056c951a8..b6d4e20829 100644 --- a/graphics/pgf/contrib/tikz3d-fr/tex/tikz3d-fr.sty +++ b/graphics/pgf/contrib/tikz3d-fr/tex/tikz3d-fr.sty @@ -3,15 +3,18 @@ % or later, see http://www.latex-project.org/lppl.txtf \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{tikz3d-fr}[2023/07/22 0.1.2 Aide pour l'utilisation de TikZ 3D] +\ProvidesPackage{tikz3d-fr}[2024/09/16 0.1.3 Aide pour l'utilisation de TikZ 3D] +%0.1.3 Dés à jouer en 3D %0.1.2 Option pour l'épaisseur des traits + [line join=round] pour les cubes %0.1.1 Segments avec [line cap=round] %0.1.0 Version initiale %------Packages utiles \RequirePackage{tikz} +\RequirePackage{tikz-3dplot} \RequirePackage{xstring} \RequirePackage{simplekv} +\RequirePackage{randomlist} \RequirePackage{xinttools} \RequirePackage{xintexpr} \RequirePackage{listofitems} @@ -328,4 +331,258 @@ {\end{EnvTikzEspace}} } +%====DÉS EN 3D +\newlength{\detridimoffseth} +\setlength{\detridimoffseth}{0mm} + +\defKV[DeTriDim]{% + Echelle=\def\detridimscale{#1},% + Couleur=\def\detridimcouleur{#1},% + EspaceH=\setlength{\detridimoffseth}{#1},% + Couleurs=\def\detridimcouleurs{#1},% + CouleurPoints=\def\detridimcouleurpts{#1},% + Phi=\def\detridimphi{#1},% + Theta=\def\detridimtheta{#1},% + Vue=\def\deftridimvue{#1},% + Origine=\def\deftridimorigin{#1} +} +\setKVdefault[DeTriDim]{% + Echelle=1,% + Couleur=lightgray!25,% + CouleurPoints=black,% + Hasard=false,% + EspaceH={0mm},% + Couleurs=lightgray!25,% + Phi=110,% + Theta=70,% + Vue=D,% + Origine={(0,0)},% + Yams=false +} + +\NewDocumentCommand\FaceDeTriDim{ m }{% + %1 = face avec points communs si besoin pour simplifier le code + \xintifboolexpr{#1 == 2 'or' #1 == 4 'or' #1 == 5 'or' #1 == 6}% + {% + \fill[\detridimcouleurpts] (0.5,0.5) circle[radius=1/6] ; % HG + \fill[\detridimcouleurpts] (-0.5,-0.5) circle[radius=1/6] ; % BD + }% + {}% + \xintifboolexpr{#1 == 3 'or' #1 == 4 'or' #1 == 5 'or' #1 == 6}% + {% + \fill[\detridimcouleurpts] (-0.5,0.5) circle[radius=1/6] ; % HD + \fill[\detridimcouleurpts] (0.5,-0.5) circle[radius=1/6] ; % BG + }% + {}% + \xintifboolexpr{#1 == 1 'or' #1 == 3 'or' #1 == 5}% + {% + \fill[\detridimcouleurpts] (0,0) circle[radius=1/6] ; % CENTRE + }% + {}% + \xintifboolexpr{#1 == 6}% + {% + \fill[\detridimcouleurpts] (0.5,0) circle[radius=1/6] ; % MG + \fill[\detridimcouleurpts] (-0.5,0) circle[radius=1/6] ; % MD + }% + {}% +} + +%liste pour les faces +\NewList{detridimfaceU}\SetList{detridimfaceU}{2,3,4,5} +\NewList{detridimfaceD}\SetList{detridimfaceD}{1,3,4,6} +\NewList{detridimfaceT}\SetList{detridimfaceT}{1,2,6,5} +\NewList{detridimfaceQ}\SetList{detridimfaceQ}{1,5,6,2} +\NewList{detridimfaceC}\SetList{detridimfaceC}{1,3,6,4} +\NewList{detridimfaceS}\SetList{detridimfaceS}{2,4,5,3} + +%commande autonome +\NewDocumentCommand\DeTriDim{ s O{} D<>{} m }{% + %* = mode non autonome + %1 = clés + %2 = options tikzpicture + %3 = faces devant/dessus + \restoreKV[DeTriDim]% + \setKV[DeTriDim]{#2}% + %si aléatoire + \ifboolKV[DeTriDim]{Hasard}% + {% + \xdef\detridimfacedevant{\xinteval{randrange(1,7)}}% + \xintifboolexpr{\detridimfacedevant == 1}% + {% + \GetRandomItem{detridimfaceU}{detridimfacedessus}% + }% + {}% + \xintifboolexpr{\detridimfacedevant == 2}% + {% + \GetRandomItem{detridimfaceD}{detridimfacedessus}% + }% + {}% + \xintifboolexpr{\detridimfacedevant == 3}% + {% + \GetRandomItem{detridimfaceT}{detridimfacedessus}% + }% + {}% + \xintifboolexpr{\detridimfacedevant == 4}% + {% + \GetRandomItem{detridimfaceQ}{detridimfacedessus}% + }% + {}% + \xintifboolexpr{\detridimfacedevant == 5}% + {% + \GetRandomItem{detridimfaceC}{detridimfacedessus}% + }% + {}% + \xintifboolexpr{\detridimfacedevant == 6}% + {% + \GetRandomItem{detridimfaceS}{detridimfacedessus}% + }% + {}% + \xdef\detridimfaces{\detridimfacedevant/\detridimfacedessus}% + }% + {% + \xdef\detridimfaces{#4}% + \StrCut{#4}{/}{\detridimfacedevant}{\detridimfacedessus}% + }% + \IfStrEq{\deftridimvue}{D}% + {% + \IfStrEqCase{\detridimfaces}{% + {1/2}{\def\detridimfacedroite{3}}% + {1/3}{\def\detridimfacedroite{5}}% + {1/5}{\def\detridimfacedroite{4}}% + {1/4}{\def\detridimfacedroite{2}}% + % + {2/1}{\def\detridimfacedroite{4}}% + {2/4}{\def\detridimfacedroite{6}}% + {2/6}{\def\detridimfacedroite{3}}% + {2/3}{\def\detridimfacedroite{1}}% + % + {3/1}{\def\detridimfacedroite{2}}% + {3/2}{\def\detridimfacedroite{6}}% + {3/6}{\def\detridimfacedroite{5}}% + {3/5}{\def\detridimfacedroite{1}}% + % + {4/1}{\def\detridimfacedroite{5}}% + {4/5}{\def\detridimfacedroite{6}}% + {4/6}{\def\detridimfacedroite{2}}% + {4/2}{\def\detridimfacedroite{1}}% + % + {5/1}{\def\detridimfacedroite{3}}% + {5/3}{\def\detridimfacedroite{6}}% + {5/6}{\def\detridimfacedroite{4}}% + {5/4}{\def\detridimfacedroite{1}}% + % + {6/2}{\def\detridimfacedroite{4}}% + {6/4}{\def\detridimfacedroite{5}}% + {6/5}{\def\detridimfacedroite{3}}% + {6/3}{\def\detridimfacedroite{2}}% + }% + }% + {% + \IfStrEqCase{\detridimfaces}{% + {1/2}{\def\detridimfacedroite{4}}% + {1/3}{\def\detridimfacedroite{2}}% + {1/5}{\def\detridimfacedroite{3}}% + {1/4}{\def\detridimfacedroite{5}}% + % + {2/1}{\def\detridimfacedroite{3}}% + {2/4}{\def\detridimfacedroite{1}}% + {2/6}{\def\detridimfacedroite{4}}% + {2/3}{\def\detridimfacedroite{6}}% + % + {3/1}{\def\detridimfacedroite{5}}% + {3/2}{\def\detridimfacedroite{1}}% + {3/6}{\def\detridimfacedroite{2}}% + {3/5}{\def\detridimfacedroite{6}}% + % + {4/1}{\def\detridimfacedroite{2}}% + {4/5}{\def\detridimfacedroite{1}}% + {4/6}{\def\detridimfacedroite{5}}% + {4/2}{\def\detridimfacedroite{6}}% + % + {5/1}{\def\detridimfacedroite{3}}% + {5/3}{\def\detridimfacedroite{6}}% + {5/6}{\def\detridimfacedroite{4}}% + {5/4}{\def\detridimfacedroite{1}}% + % + {6/2}{\def\detridimfacedroite{3}}% + {6/4}{\def\detridimfacedroite{2}}% + {6/5}{\def\detridimfacedroite{4}}% + {6/3}{\def\detridimfacedroite{5}}% + }% + }% + \IfStrEq{\deftridimvue}{D}{\def\tmpdetridimxscale{1}}{\def\tmpdetridimxscale{-1}}% + \IfBooleanF{#1}{\begin{tikzpicture}[#3]}% + \tdplotsetmaincoords{\detridimtheta}{\detridimphi} + \begin{scope}[shift={(\deftridimorigin)},scale=\fpeval{0.5*\detridimscale},xscale=\tmpdetridimxscale,thick,tdplot_main_coords,rounded corners=\fpeval{\detridimscale*0.5*0.33}cm,fill=\detridimcouleur] + \begin{scope}[canvas is xy plane at z=-1] + \filldraw (-1,-1) rectangle (1,1); + \end{scope} + \begin{scope}[canvas is xz plane at y=-1] + \filldraw (-1,-1) rectangle (1,1); + \end{scope} + \begin{scope}[canvas is yz plane at x=-1] + \filldraw (-1,-1) rectangle (1,1); + \end{scope} + \begin{scope}[canvas is xy plane at z=1]%face du dessus + \filldraw (-1,-1) rectangle (1,1); + \FaceDeTriDim{\detridimfacedessus} + \end{scope} + \begin{scope}[canvas is xz plane at y=1]%face de droite + \filldraw (-1,-1) rectangle (1,1); + \FaceDeTriDim{\detridimfacedroite} + \end{scope} + \begin{scope}[canvas is yz plane at x=1]%face de devant + \filldraw (-1,-1) rectangle (1,1); + \FaceDeTriDim{\detridimfacedevant} + \end{scope} + \end{scope} + \IfBooleanF{#1}{\end{tikzpicture}}% +} + +\NewDocumentCommand\TirageAleaDesTriDim{ O{} D<>{} m }{% + \restoreKV[DeTriDim]% + \setKV[DeTriDim]{#1}% + \readlist*\detridimlstcolors{\detridimcouleurs}% + \ifboolKV[DeTriDim]{Yams}% + {% + \begin{tikzpicture}[#2] + \ifnum\detridimlstcolorslen=1\relax + \foreach \i in {1,...,#3}{% + \IfStrEq{\deftridimvue}{D}% + {% + \DeTriDim*[#1,Hasard,Couleur=\detridimcouleurs,Origine={(\i*\detridimscale,-\i*\detridimscale*0.1)}]{}% + }% + {% + \DeTriDim*[#1,Hasard,Couleur=\detridimcouleurs,Origine={(-\i*\detridimscale,-\i*\detridimscale*0.1)}]{}% + }% + }% + \else% + \foreach \i in {1,...,#3}{% + \itemtomacro\detridimlstcolors[\i]{\tmpdetridimcolor}% + \IfStrEq{\deftridimvue}{D}% + {% + \DeTriDim*[#1,Hasard,Couleur=\tmpdetridimcolor,Origine={(\i*\detridimscale,-\i*\detridimscale*0.1)}]{}% + }% + {% + \DeTriDim*[#1,Hasard,Couleur=\tmpdetridimcolor,Origine={(-\i*\detridimscale,-\i*\detridimscale*0.1)}]{}% + }% + }% + \fi% + \end{tikzpicture} + }% + {% + \ifnum\detridimlstcolorslen=1\relax + \foreach \i in {1,...,#3}{% + \DeTriDim[#1,Hasard,Couleur=\detridimcouleurs]<#2>{}\ifnum\i<#3\relax\hspace*{\detridimoffseth}\fi% + }% + \else% + \foreach \i in {1,...,#3}{% + \itemtomacro\detridimlstcolors[\i]{\tmpdetridimcolor}% + \DeTriDim[#1,Hasard,Couleur=\tmpdetridimcolor]<#2>{}\ifnum\i<#3\relax\hspace*{\detridimoffseth}\fi% + }% + \fi% + }% +} + + \endinput
\ No newline at end of file diff --git a/graphics/pgf/contrib/tikzdotncross/README.md b/graphics/pgf/contrib/tikzdotncross/README.md index 0c4cbfd2de..a3c4a261a2 100644 --- a/graphics/pgf/contrib/tikzdotncross/README.md +++ b/graphics/pgf/contrib/tikzdotncross/README.md @@ -70,7 +70,10 @@ The Current Maintainer of this work is Alceu Frigeri - documentation in PDF format ------------- -* Version 1.1 (this) +* Version 1.2 (this) + - Added some package options, to change pin defaults, see documentation. + +* Version 1.1 - Documentation typos and improvement. Code cleanup. * Version 1.0 diff --git a/graphics/pgf/contrib/tikzdotncross/doc/tikzdotncross.pdf b/graphics/pgf/contrib/tikzdotncross/doc/tikzdotncross.pdf Binary files differindex c4bb9648fe..e2e476b8c7 100644 --- a/graphics/pgf/contrib/tikzdotncross/doc/tikzdotncross.pdf +++ b/graphics/pgf/contrib/tikzdotncross/doc/tikzdotncross.pdf diff --git a/graphics/pgf/contrib/tikzdotncross/doc/tikzdotncross.tex b/graphics/pgf/contrib/tikzdotncross/doc/tikzdotncross.tex index 0719876146..317fbdb200 100644 --- a/graphics/pgf/contrib/tikzdotncross/doc/tikzdotncross.tex +++ b/graphics/pgf/contrib/tikzdotncross/doc/tikzdotncross.tex @@ -15,7 +15,7 @@ %% %% The Current Maintainer of this work is Alceu Frigeri %% -%% This is version {1.1} {2024/01/11} +%% This is version {1.2} {2024/10/22} %% %% The list of files that compose this work can be found in the README.md file at %% https://ctan.org/pkg/tikzdotncross @@ -47,11 +47,27 @@ This package offers a few alternative ways for declaring and marking coordinates %\tableofcontents \section{Introduction} -One recurring problem when drawing in general is how to interpret a crossing line. There are many conventions, notably, the old school (like the author of this) a jump denotes ``non touching lines'' while a simple cross is a connection, more recently (like the past 25 years), the winning convention has been that a dot marks a connection, whilst a simple cross denotes ``non touching lines''. Many, for the sake of staying in the safe side of the wall are now marking a connection with dots and non touching lines with a jump, which is a bit overkill, but at least there is no margin for error. +One recurring problem when drawing circuits in general is how to interpret a crossing line. There are many conventions, notably, for the old school (like the author of this) a jump denotes ``non touching lines'' while a simple cross is a connection, more recently (like the past 25 years), the winning convention has been that a dot marks a connection, whilst a simple cross denotes ``non touching lines''. Many, for the sake of staying in the safe side of the wall, mark a connection with dots and non touching lines with a jump, which is a bit overkill, but at least there is no margin for interpretation errors. And that's it, this package defines some commands to mark/pin a connection, declaring a coordinate and node at the same spot, for later reference, and a command to draw a line jumping over crossing lines of a pre-existent path. +\section{Package Options}\label{options} +\begin{describelist}{option} + \describe {pinsize} {pin (circle) size (default: 1.2), in pt.} + \describe {pinang} {pin angle (default: 45). } + \describe {pincolor} {pin color (default: blue).} + \describe {pinlength} {pin length (default: 4), in pt.} + \describe {coordcolor} {coordinate color (default: red), used if \tsobj{\showcoordstrue}.} +\end{describelist} + + +Those can also be set, middle code, via: +\begin{codedescribe}[code,new=2024/10/22]{\setpindefaults} +\begin{codesyntax}% +\tsmacro{\setpindefaults}{options as above} +\end{codesyntax} +\end{codedescribe} \section{Declaring and Marking Coordinates/Nodes}\label{coord} Those are based on some ideas from Redaelli et al. (\tsobj[pkg]{CircuiTikZ}). Main differences: a variable number of parameters (see below) and it always also adds an empty node n\tsobj[marg]{coord}. @@ -69,13 +85,16 @@ These will affect how \tsobj{\ncoord,\dotcoord,\odotcoord} will behave, with \ts \tsobj{\pincoord}\tsverb{(}\tsobj[oarg,sep={,}]{coord}\tsverb{)} \tsobj{\pincoord}\tsverb{(}\tsobj[oarg,sep={,}]{coord,color}\tsverb{)} \tsobj{\pincoord}\tsverb{(}\tsobj[oarg,sep={,}]{coord,color,angle}\tsverb{)} -\tsobj{\pincoord}\tsverb{(}\tsobj[oarg,sep={,}]{coord,color,angle,distance}\tsverb{)} +\tsobj{\pincoord}\tsverb{(}\tsobj[oarg,sep={,}]{coord,color,angle,length}\tsverb{)} \end{codesyntax} The \tsobj{\ncoord} always expects a single parameter \tsobj[parg]{coord}. A coordinate named \tsobj[marg]{coord} and node named n\tsobj[marg]{coord} (a ``n'' is added as a prefix) will be created for later use/reference. If \tsobj{\showcoordstrue} is en force, it will also add a pin. -The \tsobj{\pincoord} always draws a pin, besides declaring a coordinate and node as \tsobj{\ncoord}. It expects one to 4 parameters, as listed. If omitted, the default value for distance is 4 (unit: pt), the default value for the angle is -45 (degrees), the default value for color is blue. -In fact, the \tsobj{\coord(name)} is just a short cut for \tsverb{\pincoord(name,red,45)}, if \tsobj{\showcoordstrue}. +The \tsobj{\pincoord} always draws a pin, besides declaring a coordinate and node as \tsobj{\ncoord}. It expects one to 4 parameters, as listed. If omitted, the default length is 4 (unit: pt), the default angle is -45 (degrees), the default color is blue. +Likewise, if \tsobj{\showcoordstrue}, \tsobj{\coord(name)} is just a short cut for \tsverb{\pincoord(name,red,45)}. \end{codedescribe} +\begin{tsremark} + Those defaults can be changed via package options, see \ref{options}, or \tsobj{\setpindefaults}. +\end{tsremark} \begin{codedescribe}{\dotcoord,\dotpincoord} \begin{codesyntax}% @@ -83,7 +102,7 @@ In fact, the \tsobj{\coord(name)} is just a short cut for \tsverb{\pincoord(name \tsobj{\dotpincoord}\tsverb{(}\tsobj[oarg,sep={,}]{coord}\tsverb{)} \tsobj{\dotpincoord}\tsverb{(}\tsobj[oarg,sep={,}]{coord,color}\tsverb{)} \tsobj{\dotpincoord}\tsverb{(}\tsobj[oarg,sep={,}]{coord,color,angle}\tsverb{)} -\tsobj{\dotpincoord}\tsverb{(}\tsobj[oarg,sep={,}]{coord,color,angle,distance}\tsverb{)} +\tsobj{\dotpincoord}\tsverb{(}\tsobj[oarg,sep={,}]{coord,color,angle,length}\tsverb{)} \end{codesyntax} These are the same as \tsobj{\ncoord} and friends, just adding a dot (a filled in, small circle) at the coordinate. \end{codedescribe} @@ -94,7 +113,7 @@ These are the same as \tsobj{\ncoord} and friends, just adding a dot (a filled i \tsobj{\odotpincoord}\tsverb{(}\tsobj[oarg,sep={,}]{coord}\tsverb{)} \tsobj{\odotpincoord}\tsverb{(}\tsobj[oarg,sep={,}]{coord,color}\tsverb{)} \tsobj{\odotpincoord}\tsverb{(}\tsobj[oarg,sep={,}]{coord,color,angle}\tsverb{)} -\tsobj{\odotpincoord}\tsverb{(}\tsobj[oarg,sep={,}]{coord,color,angle,distance}\tsverb{)} +\tsobj{\odotpincoord}\tsverb{(}\tsobj[oarg,sep={,}]{coord,color,angle,length}\tsverb{)} \end{codesyntax} These are the same as \tsobj{\ncoord} and friends, just adding an open dot (a small circle filled with white) at the coordinate. \end{codedescribe} @@ -114,7 +133,7 @@ Then this will ``calculate'' the intersections between the line (defined by the At each intersection a semi-circle will be drawn, and finally a line will be draw connecting \tsobj[marg]{coordA} to \tsobj[marg]{coordB} over all intermediate nodes. -The star version flips the semi-circles. +The star version flips the semi-circles orientation. \begin{tsremark} The default \tsobj[oarg]{cross-name} is ``cross''. It may contain only characters, as any valid \TeX\ macro name. The default \tsobj[oarg]{width} of the semi-circle is 7pt. \end{tsremark} @@ -126,7 +145,7 @@ The star version flips the semi-circles. \end{tsremark} \end{codedescribe} -\newpage +%\newpage \section{Some Examples} \textbf{\color{red}Note:} In the examples below, the circuit doesn't make much/any sense, it is just a way to show the commands possibilities. @@ -175,6 +194,8 @@ And the same with \tsobj{\showcoordsfalse} \newpage As said, the main limitation (derived from how \tsobj[pkg]{intersections} works) is that crossings between the line and nodes might not be detected at all. For example, if someone tries to connect the nodes \tsobj[key]{D1,D2}, it will, unfortunately, fail detecting the node (pnp transistor) entirely: +%\showcoordstrue +%\setpindefaults{coordcolor=cyan,pincolor=red} \begin{codestore}[crossdemoC] \resizebox{0.5\textwidth}{!}{ \begin{tikzpicture} diff --git a/graphics/pgf/contrib/tikzdotncross/latex/tikzdotncross.sty b/graphics/pgf/contrib/tikzdotncross/latex/tikzdotncross.sty index 2385fb155e..84d6613c10 100644 --- a/graphics/pgf/contrib/tikzdotncross/latex/tikzdotncross.sty +++ b/graphics/pgf/contrib/tikzdotncross/latex/tikzdotncross.sty @@ -12,7 +12,7 @@ %% %% The Current Maintainer of this work is Alceu Frigeri %% -%% This is version {1.1} {2024/01/11} +%% This is version {1.2} {2024/10/22} %% %% The list of files that compose this work can be found in the README.md file at %% https://ctan.org/pkg/tikzdotncross @@ -26,8 +26,8 @@ \ProvidesExplPackage {tikzdotncross} - {2024/01/11} - {1.1} + {2024/10/22} + {1.2} {Marking coordinates and crossing paths} %%%%%%% @@ -40,8 +40,8 @@ { name .code:n = {tikzdotncross} , prefix .code:n = {tikzdotncross} , - date .code:n = {2024/01/11}, - version .code:n = {1.1} , + date .code:n = {2024/10/22}, + version .code:n = {1.2} , description .code:n = {Marking~ coordinates~ and~ crossing~ paths} } \cs_if_exist:NF \PkgInfo @@ -54,9 +54,48 @@ %%% End of cut-n-paste %%%%%%% +%%% +%%% why that here? well, the token list's commands will be used outside expl3 'domain' +%%% +\makeatletter + +\keys_define:nn { tikzdotncross } + { + pin size .tl_set:N = \dotncross@@pinsep , + pin size .value_required:n = true , + pin size .initial:n = 1.2 , + pin size .usage:n = general , + + pin ang .tl_set:N = \dotncross@@pinang , + pin ang .value_required:n = true , + pin ang .initial:n = 45 , + pin ang .usage:n = general , + + pin color .tl_set:N = \dotncross@@pincolor , + pin color .value_required:n = true , + pin color .initial:n = blue , + pin color .usage:n = general , + + pin length .tl_set:N = \dotncross@@pindistance , + pin length .value_required:n = true , + pin length .initial:n = 4 , + pin length .usage:n = general , + + coord color .tl_set:N = \dotncross@@coordcolor , + coord color .value_required:n = true , + coord color .initial:n = red , + coord color .usage:n = general , + } + +\ProcessKeyOptions [ tikzdotncross ] + +\NewDocumentCommand{\setpindefaults}{m} { + \keys_set:nn {tikzdotncross}{#1} +} + \ExplSyntaxOff -\makeatletter +%\makeatletter \usetikzlibrary{intersections} %% @@ -84,17 +123,16 @@ \pgfextra{\csxdef{#2T}{\CrossTotal}} \foreach \aux in {1,...,\csuse{#2T}}{(#2-\aux) node[minimum size=#6-\pgflinewidth,inner sep=0pt](n#2-\aux){}}; \tikzmath{% - coordinate \Ctmp; real \dx , \dy , \d; int \idx; + coordinate \Ctmp; real \dtmp; int \idx; \Ctmp{from} = (#3); \Ctmp{to} = (#4); - \dx{tmp} = \Ctmpx{to} - \Ctmpx{from}; - \dy{tmp} = \Ctmpy{to} - \Ctmpy{from}; - \d{ang} = atan2(\dy{tmp},\dx{tmp}); + \dtmp{x} = \Ctmpx{to} - \Ctmpx{from}; + \dtmp{y} = \Ctmpy{to} - \Ctmpy{from}; + \dtmp{ang} = atan2(\dtmp{y},\dtmp{x}); \Ctmp{1st} = (n#2-1); \Ctmp{last} = (n#2-\csuse{#2T}); \idx{1st} = 1; \idx{last} = \csuse{#2T}; - \idx{crossing} = 1; if \Ctmpx{1st} == \Ctmpx{from} then { if \Ctmpy{1st} == \Ctmpy{from} then { \idx{1st} = 2; @@ -109,9 +147,9 @@ \ifnum\idx{last}<\idx{1st} \draw (#3) -- (#4); \else - \draw[line width=1.8\pgflinewidth,white,rotate=\d{ang}] + \draw[line width=1.8\pgflinewidth,white,rotate=\dtmp{ang}] \foreach \aux in {\idx{1st},...,\idx{last}}{(#2-\aux) +(-#6/2,0) arc[start angle=\dotncross@@sign180,end angle=0,radius=#6/2]}; - \draw[rotate=\d{ang},line cap=round] + \draw[rotate=\dtmp{ang},line cap=round] \foreach \aux in {\idx{1st},...,\idx{last}}{(#2-\aux) +(-#6/2,0) arc[start angle=\dotncross@@sign180,end angle=0,radius=#6/2]}; \gdef\dotncross@@tmpA{#3} @@ -133,14 +171,14 @@ \newcommand\showcoordsfalse{\let\ncoord=\dotncross@@coordnode \let\dotcoord=\dotncross@@dotcoordnode \let\odotcoord=\dotncross@@odotcoordnode} \newcommand\showcoordstrue{\let\ncoord=\dotncross@@coordpin \let\dotcoord=\dotncross@@dotcoordpin \let\odotcoord=\dotncross@@odotcoordpin} -\def\dotncross@@coordpin(#1){\pincoord(#1,red,45)} -\def\dotncross@@coordnode(#1){coordinate(#1) node[minimum size=1.2pt,inner sep=1.2pt](n#1){}} +\def\dotncross@@coordpin(#1){\pincoord(#1,\dotncross@@coordcolor,\dotncross@@pinang)} +\def\dotncross@@coordnode(#1){coordinate(#1) node[minimum size=\dotncross@@pinsep pt,inner sep=\dotncross@@pinsep pt](n#1){}} -\def\dotncross@@dotcoordpin(#1){\dotpincoord(#1,red,45)} -\def\dotncross@@dotcoordnode(#1){coordinate(#1) node[circle,minimum size=1.2pt,inner sep=1.2pt,fill](n#1){}} +\def\dotncross@@dotcoordpin(#1){\dotpincoord(#1,\dotncross@@coordcolor,\dotncross@@pinang)} +\def\dotncross@@dotcoordnode(#1){coordinate(#1) node[circle,minimum size=\dotncross@@pinsep pt,inner sep=\dotncross@@pinsep pt,fill](n#1){}} -\def\dotncross@@odotcoordpin(#1){\odotpincoord(#1,red,45)} -\def\dotncross@@odotcoordnode(#1){coordinate(#1) node[circle,minimum size=1.2pt,inner sep=1.2pt,fill=white,draw](n#1){}} +\def\dotncross@@odotcoordpin(#1){\odotpincoord(#1,\dotncross@@coordcolor,\dotncross@@pinang)} +\def\dotncross@@odotcoordnode(#1){coordinate(#1) node[circle,minimum size=\dotncross@@pinsep pt,inner sep=\dotncross@@pinsep pt,fill=white,draw](n#1){}} %%%% %% @@ -155,17 +193,17 @@ \def\dotncross@@pincasew#1#2{\dotncross@@pincase#1,,,,\dotncross@@pincaseA\dotncross@@pincaseB\dotncross@@pincaseC\dotncross@@pincaseD;#2:} \def\dotncross@@pincase#1,#2,#3,#4,#5#6#7#8#9:{#8:#1:#2:#3:#4:#9:} \def\dotncross@@pincaseA:#1:#2:#3:#4:#5;#6:{\dotncross@@pincoord{#1}{#2}{#3}{#4}{#6}} -\def\dotncross@@pincaseB:#1:#2:#3:#4:#5;#6:{\dotncross@@pincoord{#1}{#2}{#3}{4}{#6}} -\def\dotncross@@pincaseC:#1:#2:#3:#4:#5;#6:{\dotncross@@pincoord{#1}{#2}{-45}{4}{#6}} -\def\dotncross@@pincaseD:#1:#2:#3:#4:#5;#6:{\dotncross@@pincoord{#1}{blue}{-45}{4}{#6}} +\def\dotncross@@pincaseB:#1:#2:#3:#4:#5;#6:{\dotncross@@pincoord{#1}{#2}{#3}{\dotncross@@pindistance}{#6}} +\def\dotncross@@pincaseC:#1:#2:#3:#4:#5;#6:{\dotncross@@pincoord{#1}{#2}{-\dotncross@@pinang}{\dotncross@@pindistance}{#6}} +\def\dotncross@@pincaseD:#1:#2:#3:#4:#5;#6:{\dotncross@@pincoord{#1}{\dotncross@@pincolor}{-\dotncross@@pinang}{\dotncross@@pindistance}{#6}} \def\pincoord(#1){\dotncross@@pincasew{#1}{}} \def\dotpincoord(#1){\dotncross@@pincasew{#1}{circle,fill,}} \def\odotpincoord(#1){\dotncross@@pincasew{#1}{circle,fill=white,draw,}} \newcommand\dotncross@@pincoord[5]{% - coordinate(#1) node[#5minimum size=1.2pt,inner sep=1.2pt](n#1){} - node[circle, #2, inner sep=1.2pt, outer sep=0pt, radius=1pt, fill=#2!20!white, fill opacity=0.2, draw opacity=0.4, draw, + coordinate(#1) node[#5minimum size=\dotncross@@pinsep pt,inner sep=\dotncross@@pinsep pt](n#1){} + node[circle, #2, inner sep=\dotncross@@pinsep pt, outer sep=0pt, radius=1pt, fill=#2!20!white, fill opacity=0.2, draw opacity=0.4, draw, pin={[#2, overlay, inner sep=0pt, outer sep=1pt, font=\tiny, pin distance=#4pt, pin edge={#2, overlay}]#3:#1}]{}% } diff --git a/graphics/pgf/contrib/tikzquads/README.md b/graphics/pgf/contrib/tikzquads/README.md index 4ea07b35cb..ab8d126c52 100644 --- a/graphics/pgf/contrib/tikzquads/README.md +++ b/graphics/pgf/contrib/tikzquads/README.md @@ -79,6 +79,9 @@ The Current Maintainer of this work is Alceu Frigeri ## Changelog +* Version 1.1 (this) + - Added a 'raw sources' key (see manual) + - a few typos in the documentation * Version 1.0 - Initial release by CTAN diff --git a/graphics/pgf/contrib/tikzquads/doc/tikzquads.pdf b/graphics/pgf/contrib/tikzquads/doc/tikzquads.pdf Binary files differindex 4ea887cb74..0bfc7d4b14 100644 --- a/graphics/pgf/contrib/tikzquads/doc/tikzquads.pdf +++ b/graphics/pgf/contrib/tikzquads/doc/tikzquads.pdf diff --git a/graphics/pgf/contrib/tikzquads/doc/tikzquads.tex b/graphics/pgf/contrib/tikzquads/doc/tikzquads.tex index b6f6f1a30b..0e549ead63 100644 --- a/graphics/pgf/contrib/tikzquads/doc/tikzquads.tex +++ b/graphics/pgf/contrib/tikzquads/doc/tikzquads.tex @@ -15,7 +15,7 @@ %% %% The Current Maintainer of this work is Alceu Frigeri %% -%% This is version {1.0} {2024/01/13} +%% This is version {1.1} {2024/10/17} %% %% The list of files that compose this work can be found in the README.md file at %% https://ctan.org/pkg/tikzdotncross @@ -91,7 +91,7 @@ This package defines a few extra shapes (single / dual port boxes) designed to b \tableofcontents \section{Introduction} -In standard text books, both for Circuits Theory and Electronics, quite frequently, in the process of modelling sub-circuits, one ends representing them either: +In standard text books, Circuits Theory and Electronics alike, quite frequently, in the process of modelling sub-circuits, one ends representing them either: \begin{itemize} \item as a single port \emph{black box}, or \item as a dual port \emph{black box} @@ -113,7 +113,7 @@ This package defines a few, parameterized shapes for each case: \item Quad G \item Quad H \end{itemize} -Lastly, this package also defines a \emph{Pseudo-Graph load line} shape, for those moments where a true graph, \tsobj[pkg]{pgfplots}, isn't needed. +Lastly, this package also defines a \emph{Pseudo-Graph load line} shape, for those moments where a true graph, like the ones \tsobj[pkg]{pgfplots} enables, isn't needed. \end{itemize} \subsection{CircuiTi\emph{k}Z} @@ -161,7 +161,7 @@ The point being that, regardless of the sub-shape orientation, the intuitive geo \subsection{General Keys}\label{generalkeys} -These are the keys to fine tuning a shape: +General keys to fine tuning a shape: \begin{describelist*}[30mm]{keys} \describe {outer sep} {Text outer separation, initial value: 1.5pt} \describe {inner sep} {Text inner separation, initial value: 1pt} @@ -392,7 +392,7 @@ node[Quad Z]{} \tscode*[emph={draw,node},emph2={x,y,fit,to,outer,inner,node},emph3={Quad,ToQuad,Black,ToBlack,Box,Thevenin,ToThevenin,Norton,ToNorton},basicstyle={\scriptsize\ttfamily},numbers=left,codeprefix={}]{QuadZDef} -This shape, besides the base anchors (see \ref{quadanchors}) it has 4 internal nodes: \tsobj[key]{<node>-Z11,<node>-Z12,<node>-Z21,<node>-Z22} and each of those sub-nodes has geographic anchors as defined at \ref{auxiliarynodes}. +Besides the base anchors (see \ref{quadanchors}) it has 4 internal nodes: \tsobj[key]{<node>-Z11,<node>-Z12,<node>-Z21,<node>-Z22} and each of those sub-nodes has geographic anchors as defined at \ref{auxiliarynodes}. \begin{tsremark} There is also a \tsobj[key]{ToQuad Z} to be used in a \tsobj[key]{to[ ]} path, in which case the key \tsobj[key]{outer x fit to} style will be triggered with the starting and ending points of the \tsobj[key]{to[ ]} path. \end{tsremark} @@ -423,6 +423,7 @@ There is also a \tsobj[key]{ToQuad Z} to be used in a \tsobj[key]{to[ ]} path, i \describe{I2}{Initial value:\tsverb{$I_2$}} \describe{V1}{Initial value:\tsverb{$V_1$}} \describe{V2}{Initial value:\tsverb{$V_2$}} + \describe {raw sources} {This will suppress the control variables (I1, I2) in the sources' labels} \describe{Z11}{Initial value:\tsverb{$Z_{11}$}} \describe{Z12}{Initial value:\tsverb{$Z_{12}$}} \describe{Z21}{Initial value:\tsverb{$Z_{21}$}} @@ -448,7 +449,7 @@ node[Quad Y]{} \end{codestore} \tscode*[emph={draw,node},emph2={x,y,fit,to,outer,inner,node},emph3={Quad,ToQuad,Black,ToBlack,Box,Thevenin,ToThevenin,Norton,ToNorton},basicstyle={\scriptsize\ttfamily},numbers=left,codeprefix={}]{QuadYDef} -This shape, besides the base anchors (see \ref{quadanchors}) it has 4 internal nodes: \tsobj[key]{<node>-Y11,<node>-Y12,<node>-Y21,<node>-Y22} and each of those sub-nodes has geographic anchors as defined at \ref{auxiliarynodes}. +Besides the base anchors (see \ref{quadanchors}) it has 4 internal nodes: \tsobj[key]{<node>-Y11,<node>-Y12,<node>-Y21,<node>-Y22} and each of those sub-nodes has geographic anchors as defined at \ref{auxiliarynodes}. \begin{tsremark} There is also a \tsobj[key]{ToQuad Y} to be used in a \tsobj[key]{to[ ]} path, in which case the key \tsobj[key]{outer x fit to} style will be triggered with the starting and ending points of the \tsobj[key]{to[ ]} path. \end{tsremark} @@ -479,6 +480,7 @@ There is also a \tsobj[key]{ToQuad Y} to be used in a \tsobj[key]{to[ ]} path, i \describe{I2}{Initial value:\tsverb{$I_2$}} \describe{V1}{Initial value:\tsverb{$V_1$}} \describe{V2}{Initial value:\tsverb{$V_2$}} + \describe {raw sources} {This will suppress the control variables (V1, V2) in the sources' labels} \describe{Y11}{Initial value:\tsverb{$Y_{11}$}} \describe{Y12}{Initial value:\tsverb{$Y_{12}$}} \describe{Y21}{Initial value:\tsverb{$Y_{21}$}} @@ -503,7 +505,7 @@ node[Quad G]{} \tscode*[emph={draw,node},emph2={x,y,fit,to,outer,inner,node},emph3={Quad,ToQuad,Black,ToBlack,Box,Thevenin,ToThevenin,Norton,ToNorton},basicstyle={\scriptsize\ttfamily},numbers=left,codeprefix={}]{QuadGDef} -This shape, besides the base anchors (see \ref{quadanchors}) it has 4 internal nodes: \tsobj[key]{<node>-G11,<node>-G12,<node>-G21,<node>-G22} and each of those sub-nodes has geographic anchors as defined at \ref{auxiliarynodes}. +Besides the base anchors (see \ref{quadanchors}) it has 4 internal nodes: \tsobj[key]{<node>-G11,<node>-G12,<node>-G21,<node>-G22} and each of those sub-nodes has geographic anchors as defined at \ref{auxiliarynodes}. \begin{tsremark} There is also a \tsobj[key]{ToQuad G} to be used in a \tsobj[key]{to[ ]} path, in which case the key \tsobj[key]{outer x fit to} style will be triggered with the starting and ending points of the \tsobj[key]{to[ ]} path. \end{tsremark} @@ -535,6 +537,7 @@ There is also a \tsobj[key]{ToQuad G} to be used in a \tsobj[key]{to[ ]} path, i \describe{I2}{Initial value:\tsverb{$I_2$}} \describe{V1}{Initial value:\tsverb{$V_1$}} \describe{V2}{Initial value:\tsverb{$V_2$}} + \describe {raw sources} {This will suppress the control variables (V1, I2) in the sources' labels} \describe{G11}{Initial value:\tsverb{$G_{11}$}} \describe{G12}{Initial value:\tsverb{$G_{12}$}} \describe{G21}{Initial value:\tsverb{$G_{21}$}} @@ -559,7 +562,7 @@ node[Quad H]{} \tscode*[emph={draw,node},emph2={x,y,fit,to,outer,inner,node},emph3={Quad,ToQuad,Black,ToBlack,Box,Thevenin,ToThevenin,Norton,ToNorton},basicstyle={\scriptsize\ttfamily},numbers=left,codeprefix={}]{QuadHDef} -This shape, besides the base anchors (see \ref{quadanchors}) it has 4 internal nodes: \tsobj[key]{<node>-H11,<node>-H12,<node>-H21,<node>-H22} and each of those sub-nodes has geographic anchors as defined at \ref{auxiliarynodes}. +Besides the base anchors (see \ref{quadanchors}) it has 4 internal nodes: \tsobj[key]{<node>-H11,<node>-H12,<node>-H21,<node>-H22} and each of those sub-nodes has geographic anchors as defined at \ref{auxiliarynodes}. \begin{tsremark} There is also a \tsobj[key]{ToQuad H} to be used in a \tsobj[key]{to[ ]} path, in which case the key \tsobj[key]{outer x fit to} style will be triggered with the starting and ending points of the \tsobj[key]{to[ ]} path. \end{tsremark} @@ -592,6 +595,7 @@ There is also a \tsobj[key]{ToQuad H} to be used in a \tsobj[key]{to[ ]} path, i \describe{I2}{Initial value:\tsverb{$I_2$}} \describe{V1}{Initial value:\tsverb{$V_1$}} \describe{V2}{Initial value:\tsverb{$V_2$}} + \describe {raw sources} {This will suppress the control variables (I1, V2) in the sources' labels} \describe{H11}{Initial value:\tsverb{$H_{11}$}} \describe{H12}{Initial value:\tsverb{$H_{12}$}} \describe{H21}{Initial value:\tsverb{$H_{21}$}} diff --git a/graphics/pgf/contrib/tikzquads/latex/tikzquads.sty b/graphics/pgf/contrib/tikzquads/latex/tikzquads.sty index 31fc675742..1cdaf13300 100644 --- a/graphics/pgf/contrib/tikzquads/latex/tikzquads.sty +++ b/graphics/pgf/contrib/tikzquads/latex/tikzquads.sty @@ -12,7 +12,7 @@ %% %% The Current Maintainer of this work is Alceu Frigeri %% -%% This is version {1.0} {2024/01/13} +%% This is version {1.1} {2024/10/17} %% %% The list of files that compose this work can be found in the README.md file at %% https://ctan.org/pkg/tikzquads @@ -27,8 +27,8 @@ \ProvidesExplPackage {tikzquads} - {2024/01/13} - {1.0} + {2024/10/17} + {1.1} {CircuiTikZ Extension - Quadripoles and Dipoles} \ExplSyntaxOn @@ -42,8 +42,8 @@ { name .code:n = {tikzquads} , prefix .code:n = {tikzquads} , - date .code:n = {2024/01/13}, - version .code:n = {1.0} , + date .code:n = {2024/10/17}, + version .code:n = {1.1} , description .code:n = {CircuiTikZ~ Extension~- Quadripoles~ and~ Dipoles} } \cs_if_exist:NF \PkgInfo @@ -86,6 +86,7 @@ \newtoggle{tikzquads@@toggle@outermarks} \newtoggle{tikzquads@@toggle@beziertip} \newtoggle{tikzquads@@toggle@roundsources} +\newtoggle{tikzquads@@toggle@rawsources} % % @@ -301,7 +302,7 @@ %%%%%%%%%%%%%%% %%% -%%% "QUadKeys" Path (Quadripoles) +%%% "QuadKeys" Path (Quadripoles) %%% %%%%%%%%%%%%%%% @@ -503,6 +504,8 @@ inner marks/.style={@inner marks}, @outer marks/.code={\toggletrue{tikzquads@@toggle@outermarks}}, outer marks/.style={@outer marks}, + @raw sources/.code={\toggletrue{tikzquads@@toggle@rawsources}}, + raw sources/.style={@raw sources}, @invert/.code={\toggletrue{tikzquads@@toggle@inverted}}, invert/.style={% /tikz/xscale=-1, @@ -803,7 +806,11 @@ \SearchValueOf{QuadKeys}{#3}{\@@valC} \pgftransformresetnontranslations \tikzquads@@CondDraw{#1}{}{\pgftext[\tikzquads@@TanchorA,at={\pgfpointanchor{\tikz@fig@name-#1}{\tikzquads@@NanchorA}}]{\@@valA}} - \tikzquads@@CondDraw{#2}{}{\pgftext[\tikzquads@@TanchorB,at={\pgfpointanchor{\tikz@fig@name-#2}{\tikzquads@@NanchorB}}]{\@@valB\@@valC}} + \ifboolexpr{togl{tikzquads@@toggle@rawsources}}{% + \tikzquads@@CondDraw{#2}{}{\pgftext[\tikzquads@@TanchorB,at={\pgfpointanchor{\tikz@fig@name-#2}{\tikzquads@@NanchorB}}]{\@@valB}} + }{% + \tikzquads@@CondDraw{#2}{}{\pgftext[\tikzquads@@TanchorB,at={\pgfpointanchor{\tikz@fig@name-#2}{\tikzquads@@NanchorB}}]{\@@valB\@@valC}} + } } } @@ -901,7 +908,11 @@ \SearchValueOf{QuadKeys}{#4}{\@@valC} \pgftransformresetnontranslations \tikzquads@@CondDraw{#2}{}{\pgftext[\tikzquads@@TanchorA,at={\pgfpointanchor{\tikz@fig@name-#2}{\tikzquads@@NanchorA}}]{\@@valA}} - \tikzquads@@CondDraw{#3}{}{\pgftext[\tikzquads@@TanchorB,at={\pgfpointanchor{\tikz@fig@name-#3}{\tikzquads@@NanchorB}}]{\@@valB\@@valC}} + \ifboolexpr{togl{tikzquads@@toggle@rawsources}}{% + \tikzquads@@CondDraw{#3}{}{\pgftext[\tikzquads@@TanchorB,at={\pgfpointanchor{\tikz@fig@name-#3}{\tikzquads@@NanchorB}}]{\@@valB}} + }{% + \tikzquads@@CondDraw{#3}{}{\pgftext[\tikzquads@@TanchorB,at={\pgfpointanchor{\tikz@fig@name-#3}{\tikzquads@@NanchorB}}]{\@@valB\@@valC}} + } } } diff --git a/graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-doc-en.pdf b/graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-doc-en.pdf Binary files differnew file mode 100644 index 0000000000..ce114e03f7 --- /dev/null +++ b/graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-doc-en.pdf diff --git a/graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-doc-en.tex b/graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-doc-en.tex new file mode 100644 index 0000000000..27d56d19a5 --- /dev/null +++ b/graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-doc-en.tex @@ -0,0 +1,1807 @@ +% !TeX TXS-program:compile = txs:///arara +% arara: pdflatex: {shell: yes, synctex: no, interaction: batchmode} +% arara: pdflatex: {shell: yes, synctex: no, interaction: batchmode} if found('log', '(undefined references|Please rerun|Rerun to get)') + +\documentclass[11pt,a4paper]{ltxdoc} +\usepackage[T1]{fontenc} +\usepackage[utf8]{inputenc} +\usepackage[english]{tkz-grapheur} +\pgfplotsset{compat=newest} +\usepackage{amsmath} +\usepackage{fancyvrb} +\usepackage{fancyhdr} +\usepackage{hyperref} +\usepackage{nicefrac} +\usepackage{fontawesome5} +\usepackage{tcolorbox} +\usepackage{minted2} +\tcbuselibrary{skins,minted} +\fancyhf{} +\renewcommand{\headrulewidth}{0pt} +\lfoot{\sffamily\small [tkz-grapheur]} +\rfoot{\sffamily\small - \thepage{} -} +\usepackage{hologo} +\providecommand\tikzlogo{Ti\textit{k}Z} +\providecommand\TeXLive{\TeX{}Live\xspace} +\providecommand\PSTricks{\textsf{PSTricks}\xspace} +\let\pstricks\PSTricks +\let\TikZ\tikzlogo + +\urlstyle{same} +\hypersetup{pdfborder=0 0 0} +\usepackage[margin=2cm]{geometry} +\setlength{\parindent}{0pt} +\def\TPversion{0.2.0} +\def\TPdate{29/10/2024} +\usepackage{soul} +\usepackage{codehigh} +\usepackage{tabularray} +\usepackage{alphalph} +\sethlcolor{lightgray!25} +\NewDocumentCommand\MontreCode{ m }{% + \hl{\vphantom{\texttt{pf}}\texttt{#1}}% +} +\usepackage[english]{babel} + +\renewcommand{\footnoterule}{\vfill\kern -3pt \hrule width 0.4\columnwidth \kern 2.6pt} + +\begin{document} + +\pagestyle{fancy} + +\thispagestyle{empty} + +\begin{center} + \begin{minipage}{0.88\linewidth} + \begin{tcolorbox}[colframe=yellow,colback=yellow!15] + \begin{center} + \begin{tabular}{c} + {\Huge \texttt{tkz-grapheur [en]}}\\ + \\ + {\LARGE A grapher, based}\\ + \\ + {\LARGE on \textsf{\TikZ} and \textsf{xint}.}\\ + \\ + {\small \texttt{Version \TPversion{} -- \TPdate}} + \end{tabular} + \end{center} + \end{tcolorbox} +\end{minipage} +\end{center} + +\begin{center} + \begin{tabular}{c} + \texttt{Cédric Pierquet}\\ + {\ttfamily c pierquet -- at -- outlook . fr}\\ + \texttt{\url{https://forge.apps.education.fr/pierquetcedric/package-latex-tkz-grapheur}} \\ +\end{tabular} +\end{center} + +\hrule + +\vfill + +\begin{tcolorbox}[colframe=lightgray,colback=lightgray!5,halign=center] +\begin{GraphTikz}[x=0.85cm,y=0.35cm,Xmin=0,Xmax=10,Ymin=0,Ymax=16] + %préparation de la fenêtre + \DrawAxisGrids[Enlarge=2.5mm,Font=\small]{0,1,...,10}{0,2,...,16} + %déf des fonctions avec nom courbe + nom fonction + expression + \DefineCurve[Name=cf]<f>{3*x-6} + \DefineCurve[Name=cg]<g>{-(x-6)^2+12} + %antécédents et intersection + \FindIntersections[Disp=false,Name=K]{cf}{cg} + \FindCounterimage[DispLine,Color=orange,Name=I]{cg}{8} + \FindCounterimage[Disp=false,Name=J]{cg}{0} + %intégrale sous une courbe, avec intersection + \DrawIntegral% + [Colors=blue/purple,Bounds=nodes,Style=hatch,Hatch=bricks]% + {g(x)}% + {(I-2)}{(J-2)} + %intégrale entre les deux courbes + \DrawIntegral[Bounds=nodes,Type=fct/fct]{f(x)}[g(x)]{(K-1)}{(K-2)} + %tracé des courbes et des points + \DrawCurve[Color=red]{f(x)} + \DrawCurve[Color=teal]{g(x)} + \MarkPts<\small>{(K-1)/below right/L,(K-2)/above left/M}% + \MarkPts[violet]<\small>{(I-1)/above left/D,(I-2)/above right/E}% + %essai de tangente + \DrawTangent[Colors=pink!75!black/yellow,OffsetL=2,OffsetR=2,DispPt]{g}{5} + %essai d'image + \DrawRanges[Colors=cyan]{g}{7,7.25,7.5} + %surimpression des axes + \DrawAxisGrids[Grads=false,Grid=false,Enlarge=2.5mm]{0,1,...,10}{0,2,...,16} +\end{GraphTikz} +\end{tcolorbox} + +\vspace*{5mm} + +\begin{tcolorbox}[colframe=lightgray,colback=lightgray!5,halign=center] +\begin{GraphTikz}% + [x=3.5cm,y=4cm, + Xmin=0,Xmax=3.5,Xgrid=pi/12,Xgrids=pi/24, + Ymin=-1.05,Ymax=1.05,Ygrid=0.2,Ygrids=0.05] + %préparation de la fenêtre + \DrawAxisGrids[Grads=false,Enlarge=2.5mm,Format=ntrig/nsqrt]% + {pi/6,pi/4,pi/3,pi/2,2*pi/3,3*pi/4,5*pi/6,pi} + {0,sqrt(2)/2,1/2,sqrt(3)/2,1,-1,-sqrt(3)/2,-1/2,-sqrt(2)/2} + %rajouter des valeurs + \AddXvalues{0.25,1.4,3.3}{\num{0.25},\num{1.4},\num{3.3}} + %fonction trigo (déf + tracé) + \DefineCurve[Name=ccos,Start=0,End=pi]<fcos>{cos(x)} + \DefineCurve[Name=csin,Start=0,End=pi]<fsin>{sin(x)} + %intégrale + \FindIntersections[Disp=false,Name=JKL]{ccos}{csin} + %\DefinirPts{FIN/pi/0} + \DrawIntegral% + [Bounds=node/abs,Type=fct/fct,Colors=cyan/cyan!50]% + {fsin(x)}[fcos(x)]% + {(JKL-1)}{pi} + %tracé des courbes + \DrawCurve[Color=red,Start=0,End=pi]{fcos(x)} + \DrawCurve[Color=olive,Start=0,End=pi]{fsin(x)} + %antécédent(s) + \DrawCounterimage[Color=blue/teal!50!black,Lines]{ccos}{-0.25} + \DrawCounterimage[Colors=red/magenta!50!black,Lines]{csin}{0.5} + \DrawCounterimage[Colors=orange/orange!50!black,Lines]{csin}{sqrt(2)/2} + \DrawCounterimage[Colors=green!50!black/green,Lines]{csin}{sqrt(3)/2} + %surimpression axes + \DrawAxisGrids[Grid=false,Enlarge=2.5mm,Format=ntrig/nsqrt]% + {pi/6,pi/4,pi/3,pi/2,2*pi/3,3*pi/4,5*pi/6,pi} + {0,sqrt(2)/2,1/2,sqrt(3)/2,1,-1,-sqrt(3)/2,-1/2,-sqrt(2)/2} +\end{GraphTikz} +\end{tcolorbox} + +\vfill + +\hfill{\footnotesize\textit{\ttfamily To my Dad.}} + +\vspace*{5mm} + +\pagebreak + +\phantomsection + +\hypertarget{matoc}{} + +\tableofcontents + +\vspace*{5mm} + +\hrule + +\vspace*{5mm} + +\pagebreak + +\section{Introduction} + +\subsection{Description and general ideas} + +With this modest package, far from the capabilities offered by the excellent packages \MontreCode{tkz-*}\footnote{for example tkz-base \url{https://ctan.org/pkg/tkz-base} and tkz- fct \url{https://ctan.org/pkg/tkz-fct}.} (by Alain Matthes) or \MontreCode{tzplot}\footnote{CTAN: \url{https://ctan.org/pkg/ tzplot}.} (by In-Sung Cho), it is possible to work on function graphs, in \TikZ\ language, in an \textit{intuitive} and \textit{explicit} way. + +\smallskip + +Concerning the overall operation: + +\smallskip + +\begin{itemize} + \item particular styles for the objects used have been defined, but they can be modified locally; + \item the name of the commands is in \textit{operational} form, so that the construction of the graphic elements has an almost \textit{algorithmic} form. +\end{itemize} + +\subsection{Overall operation} + +To schematize, it \textit{is enough}: + +\smallskip + +\begin{itemize} + \item to declare the parameters of the graphics window (\textbf{units in cm !}); + \item to display grid/axes/graduations; + \item to declare functions or interpolation curves; + \item to possibly declare particular points; + \item to place a point scatter. +\end{itemize} + +\smallskip + +It will then be possible: + +\begin{itemize} + \item to draw curves; + \item to graphically determine images or backgrounds; + \item to add elements of derivation (tangents) or integration (domain); + \item to draw a linear fit line or the curve of another fit. +\end{itemize} + +\subsection{Packages used, and package options} + +The package uses: + +\smallskip + +\begin{itemize} + \item \MontreCode{tikz}, with the libraries \MontreCode{calc,intersections,patterns,patterns.meta,bbox}; + \item \MontreCode{simplekv}, \MontreCode{xintexpr}, \MontreCode{xstring}, \MontreCode{listofitems}; + \item \MontreCode{xint-regression}\footnote{CTAN: \url{https://ctan.org/pkg/xint-regression}.} (for regressions, switchable via \MontreCode{[noxintreg]}). +\end{itemize} + +\smallskip + +The package also loads \MontreCode{siunitx} with the classic options, but it is possible not to load it using the \MontreCode{[nosiunitx]} option. + +\smallskip + +The package also loads the \TikZ\ \MontreCode{babel} library, but it is possible not to load it using the \MontreCode{[notikzbabel]} option. + +\smallskip + +The different options are obviously cumulative. + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only} +%loading by default, with french setup of siunitx +\usepackage{tkz-grapheur} +%loading by default, with normal setup of siunitx +\usepackage[english]{tkz-grapheur} + +%loading without sinuitx, to be loaded manually +\usepackage[nosiunitx]{tkz-grapheur} + +%loading without tikz.babel +\usepackage[notikzbabel]{tkz-grapheur} +\end{tcblisting} + +Also note that certain commands can use packages like \MontreCode{nicefrac}, which will therefore have to be loaded if necessary. + +\smallskip + +Concerning the \textit{calculations} and \textit{plots} part, the \MontreCode{xint} package takes care of it. + +\subsection{Warnings} + +It is possible, due to the (multiple) calculations carried out internally, that the compilation time may be a little \textit{long}. + +\smallskip + +The precision of the (determination) results seems to be around $10^{-4}$, which should normally guarantee \textit{satisfactory} plots and readings. It is still advisable to be cautious about the results obtained and those expected. + +\subsection{Introductory example} + +For example, we can start from the following example to \textit{illustrate} the flow of the commands for this package. The commands and syntax will be detailed in the following sections! + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only} +\begin{GraphTikz}% + [x=7.5cm,y=7.5cm,Xmin=0,Xmax=1.001,Xgrid=0.1,Xgrids=0.02, + Ymin=0,Ymax=1.001,Ygrid=0.1,Ygrids=0.02] + \DrawAxisGrids[Enlarge=2.5mm,Font=\small]% + {0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1} + {0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1} + \DefineCurve[Name=cf,Start=0,End=1]<f>{x*exp(x-1)} + \DefineCurve[Name=delta,Start=0,End=1]<D>{x} + \DrawIntegral[Type=fct/fct]{f(x)}[D(x)]{0}{1} + \DrawCurve[Color=red]{f(x)} + \DrawCurve[Color=teal]{D(x)} + \DrawRanges[Colors=blue/cyan,Lines]{f}{0.8,0.9} + \DrawCounterimage[Colors=green!50!black/olive,Lines]{cf}{0.5} +\end{GraphTikz} +\end{tcblisting} + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,text only} + \begin{GraphTikz}% + [x=7.5cm,y=7.5cm,Xmin=0,Xmax=1.001,Xgrid=0.1,Xgrids=0.02, + Ymin=0,Ymax=1.001,Ygrid=0.1,Ygrids=0.02] + \DrawAxisGrids[Enlarge=2.5mm,Font=\small]% + {0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1} + {0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1} + \DefineCurve[Name=cf,Start=0,End=1]<f>{x*exp(x-1)} + \DefineCurve[Name=delta,Start=0,End=1]<D>{x} + \DrawIntegral[Type=fct/fct]{f(x)}[D(x)]{0}{1} + \DrawCurve[Color=red]{f(x)} + \DrawCurve[Color=teal]{D(x)} + \DrawRanges[Colors=blue/cyan,Lines]{f}{0.8,0.9} + \DrawCounterimage[Colors=green!50!black/olive,Lines]{cf}{0.5} + \end{GraphTikz} +\end{tcblisting} + +\newpage + +\section{Basic Styles and Environment Creation} + +\subsection{Basic Styles} + +The styles used for plots are given below. + +\smallskip + +For \textit{simplicity} purposes, only the color of the elements can be configured, but if the user wishes, he can redefine the proposed styles. + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only} +%parameters declared and stored (usable in the environment a posteriori) +\tikzset{ + Xmin/.store in=\pflxmin,Xmin/.default=-3,Xmin=-3, + Xmax/.store in=\pflxmax,Xmax/.default=3,Xmax=3, + Ymin/.store in=\pflymin,Ymin/.default=-3,Ymin=-3, + Ymax/.store in=\pflymax,Ymax/.default=3,Ymax=3, + Origx/.store in=\pflOx,Origx/.default=0,Origx=0, + Origy/.store in=\pflOy,Origy/.default=0,Origy=0, + Xgrid/.store in=\pflgrillex,Xgrid/.default=1,Xgrid=1, + Xgrids/.store in=\pflgrillexs,Xgrids/.default=0.5,Xgrids=0.5, + Ygrid/.store in=\pflgrilley,Ygrid/.default=1,Ygrid=1, + Ygrids/.store in=\pflgrilleys,Ygrids/.default=0.5,Ygrids=0.5 +} +\end{tcblisting} + +We therefore find: + +\smallskip + +\begin{itemize} + \item the origin of the mark (\MontreCode{Origx}/\MontreCode{Origy}); + \item the extreme values of the axes (\MontreCode{Xmin}/\MontreCode{Xmax}/\MontreCode{Ymin}/\MontreCode{Ymax}); + \item the parameters of the main and secondary grids (\MontreCode{Xgrid}/\MontreCode{Xgrids}/\MontreCode{Ygrid}/\MontreCode{Ygrids}). +\end{itemize} + +\smallskip + +Concerning the styles of \textit{objects}, they are given below. + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only} +\tikzset{tkzgrphnode/.style={}} +\tikzset{tkzgrphpoint/.style={line width=0.95pt}} +\tikzset{tkzgrphpointc/.style={radius=1.75pt}} +\tikzset{tkzgrphscatter/.style={radius=1.75pt}} +\tikzset{tkzgrphframe/.style={line width=0.8pt,gray}} +\tikzset{tkzgrphcurve/.style={line width=1.05pt}} +\tikzset{tkzgrphline/.style={line width=0.8pt}} +\tikzset{tkzgrpharrowl/.style={<-,>=latex}} +\tikzset{tkzgrpharrowr/.style={->,>=latex}} +\tikzset{tkzgrpharrowlr/.style={<->,>=latex}} +\tikzset{tkzgrphcounterimage/.style={line width=0.9pt,densely dashed}} +\tikzset{tkzgrphrange/.style={line width=0.9pt,densely dashed,->,>=latex}} +\tikzset{tkzgrphgridp/.style={thin,lightgray}} +\tikzset{tkzgrphgrids/.style={very thin,lightgray}} +\tikzset{tkzgrphaxes/.style={line width=0.8pt,->,>=latex}} +\end{tcblisting} + +The idea is therefore to be able to redefine styles globally or locally, and possibly add elements, using \mintinline{latex}|mystyle/.append style={...}|. + +\subsection{Creating the environment}\label{creaenvt} + +The proposed environment is based on \TikZ, so that any \textit{classic} command linked to \TikZ\ can be used alongside the package commands! + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only} +\begin{GraphTikz}[tikz options]<keys> + %code(s) +\end{GraphTikz} +\end{tcblisting} + +The \MontreCode{[tikz options]} are the \textit{classic} options that can be passed to a \TikZ\ environment, as well as the \textsf{axes/grids/window} keys presented previously. + +\smallskip + +The specific (and optional) \MontreCode{<keys>} are: + +\smallskip + +\begin{itemize} + \item \MontreCode{ThickGrad}: size of the axis graduations (\MontreCode{3pt} for 3pt \textit{above} and 3pt \textit{below}); + \item \MontreCode{Frame}: boolean (\MontreCode{false} by default) to display a frame which delimits the graphic window (excluding possible graduations). +\end{itemize} + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} +\begin{GraphTikz} + [x=0.075cm,y=0.03cm,Xmin=0,Xmax=160,Xgrid=20,Xgrids=10, + Origy=250,Ymin=250,Ymax=400,Ygrid=25,Ygrids=5] + <Frame> +\end{GraphTikz} +\end{tcblisting} + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} +\begin{GraphTikz}% + [x=0.9cm,y=0.425cm,Xmin=4,Xmax=20,Origx=4, + Ymin=40,Ymax=56,Ygrid=2,Ygrids=1,Origy=40] + <Frame> +\end{GraphTikz} +\end{tcblisting} + +It will obviously be more meaningful with the added graphic elements! + +\pagebreak + +\subsection{Grids and axes}\label{creaaxesgr} + +The first command \textit{useful} will allow you to create the grids, axes and graduations. + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only} +%in the GraphiqueTikz environment +\DrawAxisGrids[keys]{gradX}{gradY} +\end{tcblisting} + +The optional \MontreCode{[keys]} available are: + +\smallskip + +\begin{itemize} + \item \MontreCode{Grid}: boolean (\MontreCode{true} by default) to display the grids (for a single grid, simply set the identical parameters for \MontreCode{Xgrid}/\MontreCode{Xgrids} or \MontreCode {Ygrid}/\MontreCode{Ygrids}); + \item \MontreCode{Enlarge}: addition at the end of the axes (\MontreCode{0} by default); + \item \MontreCode{Grads}: boolean (\MontreCode{true} by default) for graduations; + \item \MontreCode{Font}: global font for graduations {\MontreCode{empty} by default}; + \item \MontreCode{Format}: special formatting (see below) of the axis values. +\end{itemize} + +\smallskip + +Concerning the \MontreCode{Format} key, it allows you to specify a specific setting for the axis values. + +\smallskip + +It can be given in the form \MontreCode{fmt} for combined formatting, or in the form \MontreCode{fmtX/fmtY} to differentiate the formatting. + +\smallskip + +The possible options are: + +\smallskip + +\begin{itemize} + \item \MontreCode{num}: format with \textsf{siunitx}; + \item \MontreCode{year}: format in year; + \item \MontreCode{frac}: format as fraction \textsf{frac}; + \item \MontreCode{dfrac}: format as fraction \textsf{dfrac}; + \item \MontreCode{nfrac}: format as fraction \textsf{nicefrac};\hfill (to load!) + \item \MontreCode{trig}: format in trig with \textsf{frac}; + \item \MontreCode{dtrig}: format in trig with \textsf{dfrac}; + \item \MontreCode{ntrig}: format in trig with \textsf{nfrac}; + \item \MontreCode{sqrt}: format in root with \textsf{frac}; + \item \MontreCode{dsqrt}: format in root with \textsf{dfrac}; + \item \MontreCode{nsqrt}: format in root with \textsf{nicefrac}. +\end{itemize} + +\smallskip + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} +\begin{GraphTikz} + [x=0.075cm,y=0.03cm,Xmin=0,Xmax=160,Xgrid=20,Xgrids=10, + Origy=250,Ymin=250,Ymax=400,Ygrid=25,Ygrids=5] + \DrawAxisGrids[Enlarge=2.5mm,Font=\small]{0,10,...,160}{250,275,...,400} +\end{GraphTikz} +\end{tcblisting} + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} +\begin{GraphTikz}% + [x=0.9cm,y=0.425cm,Xmin=4,Xmax=20,Origx=4, + Ymin=40,Ymax=56,Ygrid=2,Ygrids=1,Origy=40] + \DrawAxisGrids[Enlarge=2.5mm,Font=\small]{4,5,...,20}{40,42,...,56} +\end{GraphTikz} +\end{tcblisting} + +Note that there are the Boolean keys \MontreCode{[Behind]} (without the graduations) and \MontreCode{[Above]} (without the grid) to display the axes in \textit{under/over}-printing mode in the case of integrals for example. + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} +\begin{GraphTikz}% + [x=2.75cm,y=3cm, + Xmin=0,Xmax=3.5,Xgrid=pi/12,Xgrids=pi/24, + Ymin=-1.05,Ymax=1.05,Ygrid=0.2,Ygrids=0.05] + \DrawAxisGrids[Enlarge=2.5mm,Format=dtrig/nsqrt,Font=\footnotesize]% + {pi/6,pi/4,pi/3,pi/2,2*pi/3,3*pi/4,5*pi/6,pi} + {0,sqrt(2)/2,1/2,sqrt(3)/2,1,-1,-sqrt(3)/2,-1/2,-sqrt(2)/2} +\end{GraphTikz} +\end{tcblisting} + +In the case where the formatting does not give satisfactory result(s), it is possible to use a generic command for placing the graduations. + +\subsection{Adding values manually}\label{additionvals} + +It is also possible to use a specific command to place values on the axes, independently of an \textit{automated} formatting system. + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only} +in the environment +\AddXvalues[keys]{grads}{formatted values} +\AddYvalues[keys]{grads}{formatted values} +\end{tcblisting} + +The optional \MontreCode{[keys]} available are: + +\smallskip + +\begin{itemize} + \item \MontreCode{Font}: global font for graduations {\MontreCode{empty} by default}; + \item \MontreCode{Lines}: boolean to add the tick marks {\MontreCode{true} by default}. +\end{itemize} + +\smallskip + +The mandatory arguments correspond to the x-coordinates (in \TikZ\ language) and to the labels (in \LaTeX\ language) of the graduations. + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} +\begin{GraphTikz}% + [x=2.75cm,y=3cm, + Xmin=0,Xmax=3.5,Xgrid=pi/12,Xgrids=pi/24, + Ymin=-1.05,Ymax=1.05,Ygrid=0.2,Ygrids=0.05] + \DrawAxisGrids[Grads=false,Enlarge=2.5mm]{}{} + \AddXvalues + {0.15,0.6,pi/2,2.8284} + {\num{0.15},$\frac35$,$\displaystyle\frac{\pi}{2}$,$\sqrt{8}$} + \AddYvalues + {-1,0.175,0.3,sqrt(3)/2} + {\num{-1},\num{0.175},$\nicefrac{3}{10}$,$\frac{\sqrt{3}}{2}$} +\end{GraphTikz} +\end{tcblisting} + +\pagebreak + +\section{Specific definition commands} + +\subsection{Draw a line}\label{tracstraight} + +The idea is to propose a command to draw a line (or an asymptote), from: + +\begin{itemize} + \item of two points (or nodes); + \item of a point (or node) and the slope. +\end{itemize} + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only} +%in the GraphiqueTikz environment +\DrawLine[keys]{point or node}{point or node or slope} +\DrawAsymptote[keys]{x value} +\end{tcblisting} + +The optional \MontreCode{[keys]} available are: + +\smallskip + +\begin{itemize} + \item \MontreCode{Name}: possible name of the plot (for reuse); + \item \MontreCode{Slope}: boolean to specify that the slope is used (\MontreCode{false} by default); + \item \MontreCode{Start}: start of the plot (\MontreCode{\textbackslash pflxmin} by default); + \item \MontreCode{End}: end of the plot (\MontreCode{\textbackslash pflxmax} by default); + \item \MontreCode{Color}: color of the trace (\MontreCode{black} by default). +\end{itemize} + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} +\begin{GraphTikz}% + [x=0.8cm,y=1cm,Xmin=-7,Xmax=4,Ymin=-3,Ymax=5] + \DrawAxisGrids[Enlarge=2.5mm]{auto}{auto} + \DefinePts[Mark,Color=gray]{A/-4/3,B/2/0,C/0/-1} + \DrawLine[Color=red]{(-2,-1)}{(2,4)} + \DrawLine[Color=blue,Start=-5,End=3]{(A)}{(B)} + \DrawLine[Color=olive,Slope]{(C)}{0.25} + \DrawAsymptote[Color=brown]{-6} +\end{GraphTikz} +\end{tcblisting} + +\pagebreak + +\subsection{Define a function, draw the curve of a function}\label{deftracfct} + +The idea is to define a function, for later reuse. This command \textit{creates} the function, without tracing it, because in certain cases elements will have to be traced beforehand. + +\smallskip + +There is also a command to plot the curve of a previously defined function. + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only} +%in the GraphiqueTikz environment +\DefineCurve[keys]<fct name>{xint formula} +\DrawCurve[keys]{xint formula} +\end{tcblisting} + +The optional \MontreCode{[keys]} for definition or tracing are: + +\smallskip + +\begin{itemize} + \item \MontreCode{Start}: lower bound of the definition set (\MontreCode{\textbackslash pflxmin} by default); + \item \MontreCode{End}: lower bound of the definition set (\MontreCode{\textbackslash pflxmax} by default); + \item \MontreCode{Name}: name of the curve (important for the rest!); + \item \MontreCode{Color}: color of the trace (\MontreCode{black} by default); + \item \MontreCode{Step}: plot step (it is determined \textit{automatically} at the start but can be modified); + \item \MontreCode{Trace}: boolean to also trace the curve (\MontreCode{false} by default). +\end{itemize} + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} +\begin{GraphTikz}% + [x=0.9cm,y=0.425cm,Xmin=4,Xmax=20,Origx=4, + Ymin=40,Ymax=56,Ygrid=2,Ygrids=1,Origy=40] + \DrawAxisGrids[Enlarge=2.5mm,Font=\small]{4,5,...,20}{40,42,...,56} + %definition of the function + drawing of the curve + \DefineCurve[Name=cf,Start=5,End=19]<f>{-2*x+3+24*log(2*x)} + \DrawCurve[Color=red,Start=5,End=19]{f(x)} + %or in a single command if "sufficient" + %\DefineCurve[Name=cf,Start=5,End=19,Trace]<f>{-2*x+3+24*log(2*x)} +\end{GraphTikz} +\end{tcblisting} + +\pagebreak + +\subsection{Define/draw an interpolation curve (simple)}\label{deftracinterpo} + +It is also possible to define a curve via support points, therefore a simple interpolation curve. + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only} +%in the GraphiqueTikz environment +\DefineInterpoCurve[keys]{list of support points} +\DrawInterpoCurve[keys]{list of support points} +\end{tcblisting} + +The optional \MontreCode{[keys]} for definition or tracing are: + +\smallskip + +\begin{itemize} + \item \MontreCode{Name}: name of the interpolation curve (important for the rest!); + \item \MontreCode{Color}: color of the trace (\MontreCode{black} by default); + \item \MontreCode{Tension}: setting the \textit{tension} of the interpolation plot (\MontreCode{0.5} by default); + \item \MontreCode{Trace}: boolean to also trace the curve (\MontreCode{false} by default). +\end{itemize} + +The mandatory argument allows you to specify the list of support points in the form \MontreCode{(x1,y1)(x2,y2)...}. + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} +\begin{GraphTikz}% + [x=0.8cm,y=1cm,Xmin=-7,Xmax=4,Ymin=-3,Ymax=5] + \DrawAxisGrids[Enlarge=2.5mm]{-7,-6,...,4}{-3,-2,...,5} + %simple interpolation curves (with diff tension) + \DefineInterpoCurve[Name=interpotest,Color=blue,Trace]% + {(-6,4)(-2,-2)(3,3.5)} + \DefineInterpoCurve[Name=interpotest,Color=red,Trace,Tension=1]% + {(-6,4)(-2,-2)(3,3.5)} +\end{GraphTikz} +\end{tcblisting} + +\newpage + +\subsection{Define/draw an interpolation curve (Hermite)}\label{deftracfctspline} + +It is also possible to define a curve via support points, therefore an interpolation curve with derivative control. + +\smallskip + +Some operations require different techniques depending on the type of function used, a \textsf{Boolean} key \MontreCode{Spline} will allow the code to adapt its calculations depending on the object used. + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only} +%in the GraphiqueTikz environment +\DefineSplineCurve[keys]{list of support points}[\macronomspline] +\DrawSplineCurve[keys]{list of support points}[\macronomspline] +\end{tcblisting} + +The optional \MontreCode{[keys]} for definition or tracing are: + +\smallskip + +\begin{itemize} + \item \MontreCode{Name}: name of the interpolation curve (important for the rest!); + \item \MontreCode{Coeffs}: modify (see the \textsf{ProfLycee}\footnote{CTAN documentation: \url{https://ctan.org/pkg/proflycee}} the \textit{coefficients} of the spline; + \item \MontreCode{Color}: color of the trace (\MontreCode{black} by default); + \item \MontreCode{Trace}: boolean to also trace the curve (\MontreCode{false} by default). +\end{itemize} + +The mandatory argument allows you to specify the list of support points in the form \MontreCode{x1/y1/f'1§x2/y2/f'2§...} with: + +\begin{itemize} + \item \MontreCode{xi/yi} the coordinates of the point; + \item \MontreCode{f'i} the derivative at the support point. +\end{itemize} + +\smallskip + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} +\begin{GraphTikz}% + [x=0.8cm,y=1cm,Xmin=-7,Xmax=4,Ymin=-3,Ymax=5] + \DrawAxisGrids[Enlarge=2.5mm]{-7,-6,...,4}{-3,-2,...,5} + %definition of the list of spline support points + \def\LISTETEST{-6/4/-2§-5/2/-2§-4/0/-2§-2/-2/0§1/2/2§3/3.5/0.5} + %definition and plot of the cubic spline + \DefineSplineCurve[Name=splinetest,Trace,Color=olive]{\LISTETEST} +\end{GraphTikz} +\end{tcblisting} + +\pagebreak + +\subsection{Define points as nodes}\label{defpts} + +The second idea is to work with \TikZ nodes, which could be useful for tangent plots, representations of integrals$\ldots$ + +\smallskip + +It is also possible to define nodes for \textit{image} points. + +\smallskip + +Certain commands (explained later) allow you to determine particular points of curves in the form of nodes, so it seems interesting to be able to define them directly. + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only} +%by coordinates +\DefinePts[keys]{Name1/x1/y1,Name2/x2/y2,...} +\end{tcblisting} + +The optional \MontreCode{[keys]} available are: + +\smallskip + +\begin{itemize} + \item \MontreCode{Mark}: boolean to mark points (\MontreCode{false} by default); + \item \MontreCode{Color}: color of the points, if \MontreCode{Mark=true} (\MontreCode{black} by default). +\end{itemize} + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only} +%as image +\DefineRange[keys]{object}{abscissa} +\end{tcblisting} + +The optional \MontreCode{[keys]} available are: + +\smallskip + +\begin{itemize} + \item \MontreCode{Name}: node name (\MontreCode{empty} by default); + \item \MontreCode{Spline}: boolean to specify that a spline is used (\MontreCode{false} by default). +\end{itemize} + +The first mandatory argument is the \textit{object} considered (name of the curve for the spline, function otherwise); the second is the abscissa of the point considered. + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} +\begin{GraphTikz}% + [x=0.9cm,y=0.425cm,Xmin=4,Xmax=20,Origx=4, + Ymin=40,Ymax=56,Ygrid=2,Ygrids=1,Origy=40] + \DrawAxisGrids[Enlarge=2.5mm,Font=\small]{4,5,...,20}{40,42,...,56} + %definition of the function + drawing of the curve + \DefineFunction[Name=cf,Start=5,End=19,Trace,Color=red]<f>{-2*x+3+24*log(2*x)} + %manual nodes + \DefinePts[Mark,Color=brown]{A/7/42,B/16/49} + %imagenode + \DefineRange[Name=IMGf]{f}{14} + \MarkPts*[Style=x,Color=blue]{(IMGf)} %see next section ;-) +\end{GraphTikz} +\end{tcblisting} + +\pagebreak + +\subsection{Mark Points}\label{markpts} + +The idea is to offer something to score points with a particular style. + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only} +%in the GraphiqueTikz environment +\MarkPts(*)[keys]<font>{list} +\end{tcblisting} + +The \textit{starred} version scores the points without the \textit{names}, while the \textit{unstarred} version displays them: + +\begin{itemize} + \item in the case of the \textit{starred} version, the list should be given in the form \MontreCode{(ptA),(ptB),...}; + \item otherwise, the list should be given in the form \MontreCode{(ptA)/poslabelA/labelA,...}. +\end{itemize} + +\smallskip + +The optional \MontreCode{[keys]} available are: + +\smallskip + +\begin{itemize} + \item \MontreCode{Color}: color (\MontreCode{black} by default); + \item \MontreCode{Style}: style of marks (\MontreCode{o} by default). +\end{itemize} + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} +\begin{GraphTikz}[x=1.5cm,y=1.5cm,Ymin=-2] + \DrawAxisGrids[Enlarge=2.5mm]{auto}{auto} + \DefinePts{A/1.75,-1.25}\MarkPts[Color=pink]{(A)/below/A} %round (default) + \MarkPts[Color=teal]{(1,1)/below/M} + \MarkPts[Color=red,Style=x]{(1.25,1)/below/$A$} %cross + \MarkPts[Color=orange,Style=+]<\small\sffamily>{(1.5,1)/below/K} %plus + \MarkPts[Color=blue,Style=c]{(1.75,1)/below/P} %square + \MarkPts[Color=gray,Style=d]{(2,1)/below/P} %diamond + \MarkPts*[Color=orange/yellow]{(2,2),(2.5,2.25)} %two-tone round + \MarkPts*[Style=+,Color=red]{(1,2)} + \MarkPts*[Style=x,Color=blue]{(2.25,1)} + \MarkPts*[Style=c,Color=magenta]{(-2,-1)} + \MarkPts[Color=red,Style=x]{(-1,1)/below/$A$,(-2,2)/below left/$B$} +\end{GraphTikz} +\end{tcblisting} + +Note that it is also possible to modify the size of the \MontreCode{o/x/+/c} marks via the \MontreCode{[keys]}: + +\begin{itemize} + \item \MontreCode{Sizex=...} (\MontreCode{2pt} by default) for points \textit{cross}; + \item \MontreCode{Sizeo=...} (\MontreCode{1.75pt} by default) for the points \textit{circle}; + \item \MontreCode{Sizec=...} (\MontreCode{2pt} by default) for the \textit{square} points. +\end{itemize} + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} +\begin{GraphTikz}[x=1cm,y=1cm,Xmin=0,Ymin=0] + \DrawAxisGrids[Enlarge=2.5mm]{auto}{auto} + \MarkPts[Color=red,Style=x,Size=3.5pt]{(1.25,1.25)/below/$A$} + \MarkPts[Color=teal,Size=2.5pt]{(2,2)/right/$A$} + \MarkPts*[Color=orange,Style=c,Size=4pt]{(0.5,2.5)} +\end{GraphTikz} +\end{tcblisting} + +\subsection{Retrieve node coordinates}\label{recupcoordo} + +It is also possible, with a view to reusing coordinates, to recover the coordinates of a node (defined or determined). + +\smallskip + +The calculations are carried out by floating according to the (re)calculated units, the values are therefore approximated ! + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only} +%in the GraphiqueTikz environment +\GetXcoord{node}[\macrox] +\GetYcoord{node}[\macroy] +\GetXYcoord{node}[\macrox][\macroy] +\end{tcblisting} + +\subsection{Place text}\label{placetxt} + +Note that a text placement command is available. + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only} +%in the GraphiqueTikz environment +\DrawTxt[keys]{(node or coordinates)}{text} +\end{tcblisting} + +The available \MontreCode{[keys]} are: + +\begin{itemize} + \item \MontreCode{Font=...} (\MontreCode{\textbackslash normalsize\textbackslash normalfont} by default) for the font; + \item \MontreCode{Color=...} (\MontreCode{black} by default) for the color; + \item \MontreCode{Position=...} (\MontreCode{empty} by default) for the position of the text relative to the coordinates. +\end{itemize} + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} +\begin{GraphTikz}[x=1cm,y=1cm,Xmin=0,Xmax=5,Ymin=0,Ymax=1] + \DrawAxisGrids[Enlarge=2.5mm]{auto}{auto} + \DrawTxt[Color=red,Font=\LARGE,Position=right]{(1.5,0.5)}{curve $C_1$} +\end{GraphTikz} +\end{tcblisting} + +\section{Specific commands for using curves} + +\subsection{Image placement}\label{images} + +It is possible to place points (images) on a curve, with possible construction lines. + +The function/curve used must have been declared previously for this command to work. + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only} +%in the GraphiqueTikz environment +\DrawRanges[keys]{function or curve}{list of abscissa} +\end{tcblisting} + +The optional \MontreCode{[keys]} available are: + +\smallskip + +\begin{itemize} + \item \MontreCode{Lines}: boolean to display construction traits (\MontreCode{false} by default); + \item \MontreCode{Colors}: color of the points/lines, in the form \MontreCode{Couleurs} or \MontreCode{ColPoint/ColLines}; + \item \MontreCode{Spline}: boolean to specify that the curve used is defined as a \textsf{spline} (\MontreCode{false} by default). +\end{itemize} + +\smallskip + +The first mandatory argument allows you to specify: + +\smallskip + +\begin{itemize} + \item the name of the curve in the case \MontreCode{Spline=true}; + \item the name of the function otherwise. +\end{itemize} + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} +\begin{GraphTikz}% + [x=0.9cm,y=0.425cm,Xmin=4,Xmax=20,Origx=4, + Ymin=40,Ymax=56,Ygrid=2,Ygrids=1,Origy=40] + \DrawAxisGrids[Enlarge=2.5mm,Font=\small]{4,5,...,20}{40,42,...,56} + %definition of the function + drawing of the curve + \DefineCurve[Name=cf,Start=5,End=19,Trace,Color=red]<f>{-2*x+3+24*log(2*x)} + %images + \DrawRanges[Lines,Colors=teal/blue]{f}{6,7,8,9,10} +\end{GraphTikz} +\end{tcblisting} + +\pagebreak + +\subsection{Antecedent determination}\label{defanteced} + +It is possible to graphically determine the antecedents of a given reality. + +The function/curve used must have been declared previously for this command to work. + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only} +%in the GraphiqueTikz environment +\FindCounterimage[keys]{curve}{k} +\end{tcblisting} + +The optional \MontreCode{[keys]} available are: + +\smallskip + +\begin{itemize} + \item \MontreCode{Name}: base of the name of the \textbf{nodes} intersection (\MontreCode{S} by default, which will give \textsf{S-1}, \textsf{S-2}, etc); + \item \MontreCode{Disp}: boolean to display the points (\MontreCode{true} by default); + \item \MontreCode{Color}: color of the points (\MontreCode{black} by default); + \item \MontreCode{DispLine}: boolean to display the horizontal line (\MontreCode{false} by default). +\end{itemize} + +\smallskip + +The first mandatory argument allows you to specify the \textbf{name} of the curve. + +\smallskip + +The second mandatory argument allows you to specify the value to reach. + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} +\begin{GraphTikz}% + [x=0.9cm,y=0.425cm,Xmin=4,Xmax=20,Origx=4, + Ymin=40,Ymax=56,Ygrid=2,Ygrids=1,Origy=40] + \DrawAxisGrids[Enlarge=2.5mm,Font=\small]{4,5,...,20}{40,42,...,56} + %definition of the function + drawing of the curve + \DefineCurve[Name=cf,Start=5,End=19,Trace,Color=red]<f>{-2*x+3+24*log(2*x)} + %history + \FindCounterimage[Color=teal,DispLine,Disp]{cf}{53} + %the two antecedents are at nodes (S-1) and (S-2) +\end{GraphTikz} +\end{tcblisting} + +\pagebreak + +\subsection{Antecedent construction}\label{tracanteced} + +It is possible to graphically construct the antecedents. + +The function/curve used must have been declared previously for this command to work. + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only} +%in the GraphiqueTikz environment +\DrawCounterimage[keys]{curve}{k} +\end{tcblisting} + +The optional \MontreCode{[keys]} available are: + +\smallskip + +\begin{itemize} + \item \MontreCode{Colors}: color of the points/lines, in the form \MontreCode{Color} or \MontreCode{ColPoint/ColLines}; + \item \MontreCode{Name}: name \textit{possible} for the intersection points linked to the antecedents (\MontreCode{empty} by default); + \item \MontreCode{Lines}: boolean to display construction traits (\MontreCode{false} by default). +\end{itemize} + +\smallskip + +The first mandatory argument allows you to specify the \textbf{name} of the curve. + +\smallskip + +The second mandatory argument allows you to specify the value to reach. + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} +\begin{GraphTikz}% + [x=0.9cm,y=0.425cm,Xmin=4,Xmax=20,Origx=4, + Ymin=40,Ymax=56,Ygrid=2,Ygrids=1,Origy=40] + \DrawAxisGrids[Enlarge=2.5mm,Font=\small]{4,5,...,20}{40,42,...,56} + %definition of the function + drawing of the curve + \DefineCurve[Name=cf,Start=5,End=19,Trace,Color=red]<f>{-2*x+3+24*log(2*x)} + %history + \DrawCounterimage[Colors=teal/cyan,Lines,Name=PO]{cf}{53} + \GetXcoord{(PO-1)}[\premsol] + \GetXcoord{(PO-2)}[\deuxsol] +\end{GraphTikz} + +Graphically, the antecedents of 53 are (approximately): + +\begin{itemize} + \item \num{\premsol} + \item \num{\deuxsol} +\end{itemize} +\end{tcblisting} + +\pagebreak + +\subsection{Intersections of two curves}\label{intersect} + +It is also possible to determine (in the form of nodes) the possible points of intersection of two previously defined curves. + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only} +%in the GraphiqueTikz environment +\FindIntersections[keys]{curve1}{curve2} +\end{tcblisting} + +The optional \MontreCode{[keys]} available are: + +\smallskip + +\begin{itemize} + \item \MontreCode{Name}: base of the name of the \textbf{nodes} intersection (\MontreCode{S} by default, which will give \textsf{S-1}, \textsf{S-2}, etc); + \item \MontreCode{Disp}: boolean to display the points (\MontreCode{true} by default); + \item \MontreCode{Color}: color of the points (\MontreCode{black} by default). +\end{itemize} + +\smallskip + +The first mandatory argument allows you to specify the \textbf{name} of the first curve. + +\smallskip + +The first mandatory argument allows you to specify the \textbf{name} of the second curve. + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} +\begin{GraphTikz}% + [x=0.9cm,y=0.425cm,Xmin=4,Xmax=20,Origx=4, + Ymin=40,Ymax=56,Ygrid=2,Ygrids=1,Origy=40] + \DrawAxisGrids[Enlarge=2.5mm,Font=\small]{4,5,...,20}{40,42,...,56} + \DefineCurve[Name=cf,Start=5,End=19,Trace,Color=red]<f>{-2*x+3+24*log(2*x)} + \DefineCurve[Name=cg,Start=5,End=19,Trace,Color=blue]<g>{0.25*(x-12)^2+46} + %intersections, named (TT-1) and (TT-2) + \FindIntersections[Name=TT,Color=darkgray,Display,Lines]{cf}{cg} + %recovery of intersection points + \GetXYcoord{(TT-1)}[\alphaA][\betaA] + \GetXYcoord{(TT-2)}[\alphaB][\betaB] +\end{GraphTikz}\\ +The solutions of $f(x)=g(x)$ are $\alpha \approx \num{\alphaA}$ and +$\beta \approx \num{\alphaB}$.\\ +The points of intersection of the curves of $f$ and $g$ are therefore +$(\RoundNb[2]{\alphaA};\RoundNb[2]{\betaA})$ and +$(\RoundNb[2]{\alphaB};\RoundNb[2]{\betaB})$. +\end{tcblisting} + +\pagebreak + +\subsection{Extrema}\label{maximum}\label{minimum} + +The idea (still \textit{experimental}) is to offer commands to extract the extrema of a curve defined by the package. + +The command creates the corresponding node, and it is therefore possible to retrieve its coordinates for later use. + +\smallskip + +It is possible, by specifying it, to work on the different curves managed by the package (function, interpolation, spline). + +For singular curves, it is possible that the results are not quite those expected\ldots + +\smallskip + +{\small\faBomb} For the moment, the \textit{limitations} are: + +\begin{itemize} + \item no management of multiple extrema (only the first will be processed)\ldots + \item no management of extrema at the boundaries of the route\ldots + \item no automatic recovery of curve definition parameters\ldots + \item compilation time may be longer\ldots +\end{itemize} + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only} +%in the GraphiqueTikz environment +\FindMax[keys]{object}[node created] +\FindMin[keys]{object}[node created] +\end{tcblisting} + +The optional \MontreCode{[keys]} available are: + +\smallskip + +\begin{itemize} + \item \MontreCode{Method}: method, among \MontreCode{function/interpo/spline} for calculations (\MontreCode{function} by default); + \item \MontreCode{Start}: start of the plot (\MontreCode{\textbackslash pflxmin} by default); + \item \MontreCode{End}: end of the plot (\MontreCode{\textbackslash pflxmax} by default); + \item \MontreCode{Step}: not in the plot if \MontreCode{function} (it is determined \textit{automatically} at the start but can be modified); + \item \MontreCode{Coeffs}: modify the \textit{coefficients} of the spline if \MontreCode{spline}; + \item \MontreCode{Tension}: setting the \textit{tension} of the interpolation plot if \MontreCode{interpo}(\MontreCode{0.5} by default). +\end{itemize} + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} +\begin{GraphTikz}[x=1cm,y=1cm,Xmin=-1,Xmax=5,Ymin=-1,Ymax=3] + \DrawAxisGrids[Enlarge=2.5mm]{auto}{auto} + \DefineCurve[Name=cf,Start=0.35,End=4.2,Trace]% + <f>{0.6*cos(4.5*(x-4)+2.1)-1.2*sin(x-4)+0.1*x+0.2} + \FindMax[Start=0.35,End=4.2]{f}[cf-max] + \FindMax[Start=3,End=4]{f}[cf-maxlocal] + \FindMin[Start=1,End=2]{f}[cf-minlocal] + \MarkPts*[Color=red,Lines]{(cf-max)} + \MarkPts*[Color=blue,Lines]{(cf-maxlocal)} + \MarkPts*[Color=olive,Lines]{(cf-minlocal)} + \GetXYcoord{(cf-max)}[\MyMaxX][\MyMaxY] +\end{GraphTikz}\\ +The maximum is $M\approx\RoundNb{\MyMaxY}$, reached in $x\approx\RoundNb{\MyMaxX}$ +\end{tcblisting} + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} +\begin{GraphTikz}[x=0.8cm,y=1cm,Xmin=-7,Xmax=4,Ymin=-3,Ymax=5] + \DrawAxisGrids[Enlarge=2.5mm]{-7,-6,...,4}{-3,-2,...,5} + \DefineInterpoCurve[Name=interpotest,Color=red,Trace,Tension=1]% + {(-6,4)(-2,-2)(3,3.5)} + \FindMin[Method=interpo,Tension=1]{(-6,4)(-2,-2)(3,3.5)}[interpo-min] + \MarkPts*[Color=blue]{(interpo-min)} + \GetXYcoord{(interpo-min)}[\MinInterpoX][\MinInterpoY] +\end{GraphTikz}\\ +The minimum is $M\approx\RoundNb[3]{\MinInterpoY}$, reached at $x\approx\RoundNb[3]{\MinInterpoX}$ +\end{tcblisting} + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} +\begin{GraphTikz}% + [x=1.2cm,y=1.6cm,Xmin=-7,Xmax=4,Ymin=-3,Ymax=3,Ygrid=0.5,Ygrids=0.25] + \DrawAxisGrids[Enlarge=2.5mm]{auto}{auto} + \def\LISTETEST{-6/2/0§-1/-2/0§2/1/0§3.5/0/-1} + \DefineSplineCurve[Name=splinetest,Trace]{\LISTETEST} + \FindMin[Method=spline]{\LISTETEST}[spline-min] + \MarkPts*[Color=red]{(spline-min)} +\end{GraphTikz} +\end{tcblisting} + +\pagebreak + +\subsection{Integrals (improved version)}\label{integr} + +We can also work with integrals. + +In this case it is preferable to highlight the domain \textbf{before} the plots, to avoid overprinting in relation to the curves/points. + +\smallskip + +It is possible to : + +\begin{itemize} + \item represent an integral \textbf{under} a defined curve; + \item represent an integral \textbf{between} two curves; + \item the integration limits can be x-coordinates and/or nodes. +\end{itemize} + +\smallskip + +{\small\faBomb} Given the differences in processing between formula curves, simple interpolation curves or cubic interpolation curves, the arguments and keys may differ depending on the configuration! + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only} +%in the GraphiqueTikz environment +\DrawIntegral[keys]<specific options>{object1}[object2]{A}{B} +\end{tcblisting} + +The optional \MontreCode{[keys]} for definition or tracing are: + +\begin{itemize} + \item \MontreCode{Colors} =: colors of the filling, in the form \MontreCode{Col} or \MontreCode{ColBorder/ColBg} (\MontreCode{gray} by default); + \item \MontreCode{Style}: type of filling, among \MontreCode{fill}/\MontreCode{hatch} (\MontreCode{fill} by default); + \item \MontreCode{Opacity}: opacity (\MontreCode{0.5} by default) of the filling; + \item \MontreCode{Hatch}: style (\MontreCode{north west lines} by default) of the hatch filling; + \item \MontreCode{Type}: type of integral among + \begin{itemize} + \item \MontreCode{fct} (default) for an integral under a curve defined by a formula; + \item \MontreCode{spl} for an integral under a curve defined by a cubic spline; + \item \MontreCode{itp} for an integral under a curve defined by interpolation ; + \item \MontreCode{fct/fct} for an integral between two curves defined by a formula; + \item \MontreCode{fct/spl} for an integral between a curve (above) defined by a formula and a curve (below) defined by a spline cubic; + \item etc. + \end{itemize} + \item \MontreCode{Step}: steps (calculated by default otherwise) for the plot; + \item \MontreCode{Junction}: junction of segments (\MontreCode{bevel} by default); + \item \MontreCode{Bounds}: type of terminals among: + \begin{itemize} + \item \MontreCode{abs} for the limits given by the abscissa; + \item \MontreCode{nodes} for the limits given by the nodes; + \item \MontreCode{abs/node} for the limits given by abscissa and node; + \item \MontreCode{node/abs} for the limits given by node and abscissa; + \end{itemize} + \item \MontreCode{Border}: boolean (\MontreCode{true} by default) to display the side lines,% + \item \MontreCode{SplineName}: macro (important!) of the spline generated previously for a higher version spline; + \item \MontreCode{SplineNameB}: macro (important!) of the spline generated previously for a lower version spline; + \item \MontreCode{InterpoName}: name (important!) of the interpolation curve generated previously, in higher version; + \item \MontreCode{InterpoBName}: name (important!) of the interpolation curve generated previously, in lower version; + \item \MontreCode{Tension}: Tension for the interpolation curve generated previously, in higher version; + \item \MontreCode{TensionB}: Tension of the interpolation curve generated previously, in lower version. +\end{itemize} + +\smallskip + +The first required argument is the spline function or curve or list of interpolation points. + +\smallskip + +The next optional argument is the spline function or curve or list of interpolation points. + +\smallskip + +The last two mandatory arguments are the limits of the integral, given in a form consistent with the key \MontreCode{Bounds}. + +\pagebreak + +In the case of curves defined by \textit{points}, it is necessary to work on intervals on which the first curve is \textbf{above} the second. + +It will undoubtedly be interesting to work with \textit{intersections} in this case. + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} +\begin{GraphTikz}% + [x=0.6cm,y=0.06cm, + Xmin=0,Xmax=21,Xgrid=1,Xgrids=0.5, + Ymin=0,Ymax=155,Ygrid=10,Ygrids=5] + \DrawAxisGrids[Grads=false,Enlarge=2.5mm]{}{} + \DefineCurve[Name=cf,Start=1,End=20,Color=red]<f>{80*x*exp(-0.2*x)} + \DrawIntegral + [Bounds=abs,Colors=blue/cyan!50]% + {f(x)}{3}{12} + \DrawCurve[Color=red,Start=1,End=20]{f(x)} + \DrawAxisGrids% + [Grid=false,Enlarge=2.5mm,Font=\small]{0,1,...,20}{0,10,...,150} +\end{GraphTikz} +\end{tcblisting} + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} +\begin{GraphTikz}% + [x=1.2cm,y=1.6cm,Xmin=-7,Xmax=4,Ymin=-3,Ymax=3,Ygrid=0.5,Ygrids=0.25] + \DrawAxisGrids[Grads=false,Enlarge=2.5mm]{}{} + \def\LISTETEST{-6/2/0§-1/-2/0§2/1/0§3.5/0/-1} + \DefineSplineCurve[Name=splinetest]{\LISTETEST} + \DrawIntegral[Type=spl,Style=hatch,Colors=purple]{splinetest}{-5.75}{-4.75} + \DrawIntegral[Type=spl,Colors=blue]{splinetest}{-2}{-1} + \DrawIntegral[Type=spl,Colors=orange]{splinetest}{1}{3} + \DrawSplineCurve[Color=olive]{\LISTETEST} + \DrawAxisGrids[Grid=false,Enlarge=2.5mm] + {-7,-6,...,4}% + {-3,-2.5,...,3} +\end{GraphTikz} +\end{tcblisting} + +\pagebreak + +\subsection{Tangents}\label{tgte} + +The idea of this command is to draw the tangent to a previously defined curve, specifying: + +\begin{itemize} + \item the point (abscissa or node) at which we wish to work; + \item possibly the direction (in the case of a discontinuity or a terminal); + \item possibly the step ($h$) of the calculation; + \item the \textit{lateral spacings} to draw the tangent. +\end{itemize} + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only} +%in the GraphiqueTikz environment +\DrawTangent[keys]{function or curve}{point}<line options> +\end{tcblisting} + +The optional \MontreCode{[keys]} for definition or tracing are: + +\begin{itemize} + \item \MontreCode{Colors} =: colors of the plots, in the form \MontreCode{Col} or \MontreCode{ColLine/ColPoint} (\MontreCode{black} by default); + \item \MontreCode{OffsetL} =: left horizontal spacing to start the trace (\MontreCode{1} by default); + \item \MontreCode{OffsetR} =: left horizontal spacing to start the trace (\MontreCode{1} by default); + \item \MontreCode{DispPt}: boolean to display the support point (\MontreCode{false} by default); + \item \MontreCode{Spline}: boolean to specify that a spline is used (\MontreCode{false} by default); + \item \MontreCode{h}: delta $h$ used for calculations (\MontreCode{0.01} by default); + \item \MontreCode{Direction}: allows you to specify the \textit{direction} of the tangent, among \MontreCode{lr}/\MontreCode{l}/\MontreCode{r} (\MontreCode{lr} by default); + \item \MontreCode{Node}: boolean to specify that a node is used (\MontreCode{false} by default). +\end{itemize} + +\smallskip + +The first required argument is the spline function or curve (if applicable). + +\smallskip + +The last mandatory argument is the work point (abscissa version or node following the key \MontreCode{Node}). + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} +\begin{GraphTikz}% + [x=0.9cm,y=0.425cm,Xmin=4,Xmax=20,Origx=4, + Ymin=40,Ymax=56,Ygrid=2,Ygrids=1,Origy=40] + \DrawAxisGrids[Enlarge=2.5mm,Font=\small]{4,5,...,20}{40,42,...,56} + \DefineCurve[Name=cf,Start=5,End=19,Color=red,Trace]<f>{-2*x+3+24*log(2*x)} + \FindCounterimage[Color=teal,Name=JKL,Disp=false]{cf}{53} + %tangent + \DrawTangent% + [Colors=cyan/gray,OffsetL=2.5,OffsetR=2.5,Node,DispPt]{f}{(JKL-1)} +\end{GraphTikz} +\end{tcblisting} + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} +\begin{GraphTikz}% + [x=0.8cm,y=1cm,Xmin=-7,Xmax=4,Ymin=-3,Ymax=5] + \DrawAxisGrids[Enlarge=2.5mm]{-7,-6,...,4}{-3,-2,...,5} + \def\LISTETEST{-6/4/-0.5§-5/2/-2§-4/0/-2§-2/-2/0§1/2/2§3/3.5/0.5} + \DefineSplineCurve[Name=splinetest,Trace,Color=olive]{\LISTETEST} + \DrawTangent[Colors=red,Spline,DispPt]{splinetest}{1} + \DrawTangent% + [Colors=blue,Spline,OffsetL=1.5,OffsetR=1.5,DispPt]{splinetest}{-3}% + <tkzgrpharrowlr> + \DrawTangent[Direction=l,Colors=orange,Spline,OffsetL=1.5,DispPt]{splinetest}{3} + \DrawTangent[Direction=r,Colors=purple,Spline,OffsetR=1.5,DispPt]{splinetest}{-6} +\end{GraphTikz} +\end{tcblisting} + +\pagebreak + +%\section{Specific commands for density functions} +% +%\subsection{Normal distribution}\label{normal distribution} +% +%The idea is to provide something to work with standard deviation. +% +%\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only} +% %in the GraphiqueTikz environment +% \DefineNormalDistribution[keys]<fct name>{mu}{sigma} +% \TraceNormalDistribution[keys]{fct(x)} +%\end{tcblisting} +% +%The optional \MontreCode{[keys]} available are: +% +%\smallskip +% +%\begin{itemize} +% \item \MontreCode{Name}: name of the plot (\MontreCode{Gaussian} by default); +% \item \MontreCode{Trace}: boolean to trace the curve (\MontreCode{false} by default); +% \item \MontreCode{Couleur}: color of the trace, if requested (\MontreCode{black} by default); +% \item \MontreCode{Debut}: lower bound of the definition set (\MontreCode{\textbackslash pflxmin} by default); +% \item \MontreCode{End}: lower bound of the definition set (\MontreCode{\textbackslash pflxmax} by default); +% \item \MontreCode{Pas}: plot step (it is determined \textit{automatically} at the start but can be modified). +%\end{itemize} +% +%Note that the vertical axis must be adapted according to the parameters of the normal law. +% +%\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} +% \begin{GraphTikz}% +% [x=1.25cm,y=15cm,Origx=5,Xmin=5,Xmax=15,Ymin=0,Ymax=0.3, +% Ygrid=0.1,Ygrids=0.05] +% \DrawAxisGrids[Enlarge=2.5mm]{auto}{auto} +% \DefineNormalDistribution[Name=Gaussian]<phi>{10}{1.5} +% \TracerIntegral +% [Terminals=abs, Colors=blue/cyan!50]% +% {phi(x)}{7}{13} +% \TraceNormalLaw[Color=purple,Start=5,End=15]{phi(x)} +% \end{GraphTikz} +%\end{tcblisting} +% +%\pagebreak +% +%\subsection{Chi-square law}\label{loikhideux} +% +%The idea is to provide something to work with normal laws. +% +%\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only} +% %in the GraphiqueTikz environment +% \DefineKhiTwoLaw[keys]<fct name>{k} +% \TraceLawKhiTwo[keys]{fct(x)} +%\end{tcblisting} +% +%The optional \MontreCode{[keys]} available are: +% +%\smallskip +% +%\begin{itemize} +% \item \MontreCode{Name}: name of the plot (\MontreCode{Gaussian} by default); +% \item \MontreCode{Trace}: boolean to trace the curve (\MontreCode{false} by default); +% \item \MontreCode{Couleur}: color of the trace, if requested (\MontreCode{black} by default); +% \item \MontreCode{Debut}: lower bound of the definition set (\MontreCode{\textbackslash pflxmin} by default); +% \item \MontreCode{End}: lower bound of the definition set (\MontreCode{\textbackslash pflxmax} by default); +% \item \MontreCode{Pas}: plot step (it is determined \textit{automatically} at the start but can be modified). +%\end{itemize} +% +%Note that the vertical axis must be adapted according to the parameter of the chi-square law. +% +%\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} +% \begin{GraphTikz}[ +% x=1.5cm,y=7.5cm, +% Xmin=0,Xmax=8,Xgrid=1,Xgrids=0.5, +% Ymin=0,Ymax=0.5,Ygrid=0.1,Ygrids=0.05 +% ] +% \DrawAxisGrids[Enlarge=2.5mm]{auto}{auto} +% \DefineKhiTwoLaw[Color=red,Start=0.25,Trace]<phiA>{1} +% \DefineKhiTwoLaw[Color=blue,Trace]<phiB>{2} +% \DefineLawKhiDeux[Color=orange,Trace]<phiC>{3} +% \DefineKhiTwoLaw[Color=purple,Trace]<phiD>{4} +% \DefineKhiTwoLaw[Color=yellow,Trace]<phiE>{5} +% \DefineKhiTwoLaw[Color=teal,Trace]<phiF>{6} +% \end{GraphTikz} +%\end{tcblisting} + +\pagebreak + +\section{Commands specific to two-variable statistics} + +\subsection{Limitations} + +Given the specific features of \TikZ, we advise you not to use values that are too \textit{large} at axis level (this can cause problems with years, for example), or else you'll have to \textit{transform} axis and/or data values so that everything is displayed as it should be (also beware of regressions, calculations, etc.). + +\subsection{The point scatter}\label{scatter} + +In addition to commands linked to functions, it is also possible to represent double statistical series. + +\smallskip + +The following paragraph shows that adding a key allows you to add the linear adjustment line. + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only} +%in the GraphiqueTikz environment +\DrawScatter[keys]{ListX}{ListY} +\end{tcblisting} + +The optional \MontreCode{[key]} is: + +\smallskip + +\begin{itemize} + \item \MontreCode{ColorScatter}: color of the cloud points (\MontreCode{black} by default). +\end{itemize} + +\smallskip + +The mandatory arguments allow you to specify: + +\smallskip + +\begin{itemize} + \item the list of x; + \item the list of y. +\end{itemize} + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} +\begin{GraphTikz}% + [x=0.075cm,y=0.03cm,Xmin=0,Xmax=160,Xgrid=20,Xgrids=10, + Origy=250,Ymin=250,Ymax=400,Ygrid=25,Ygrids=5] + %window preparation + \DrawAxisGrids[Enlarge=2.5mm,Font=\small]{0,10,...,160}{250,275,...,400} + %A cloud of dots + \DrawScatter[Style=x,ColorScatter=red]{0,50,100,140}{275,290,315,350} +\end{GraphTikz} +\end{tcblisting} + +\subsection{The regression line}\label{reglin} + +The linear regression line (obtained by the least squares method) can easily be added, using the key \MontreCode{DrawLine}. + +\smallskip + +In this case, new keys are available: + +\smallskip + +\begin{itemize} + \item \MontreCode{ColorLine}: color of the line (\MontreCode{black} by default); + \item \MontreCode{Rounds}: precision of coefficients (\MontreCode{empty} by default); + \item \MontreCode{Start}: initial abscissa of the plot (\MontreCode{\textbackslash pflxmin} by default); + \item \MontreCode{End}: terminal abscissa of the plot (\MontreCode{\textbackslash pflxmax} by default); + \item \MontreCode{Name}: name of the line, for later use (\MontreCode{reglin} by default). +\end{itemize} + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} +\begin{GraphTikz}% + [x=0.075cm,y=0.03cm,Xmin=0,Xmax=160,Xgrid=20,Xgrids=10, + Origy=250,Ymin=250,Ymax=400,Ygrid=25,Ygrids=5] + \DrawAxisGrids[Enlarge=2.5mm,Font=\small]{0,10,...,160}{250,275,...,400} + %cloud and right + \DrawScatter% + [ColorScatter=red,ColorLine=brown,DrawLine]% + {0,50,100,140}{275,290,315,350} + %picture + \DrawRanges[Colors=cyan/magenta,Lines]{d}{120} + %history + \DrawCounterimage[Style=x,Colors=blue/green!50!black,Lines]{reglin}{300} +\end{GraphTikz} +\end{tcblisting} + +\subsection{Other regressions}\label{regressions} + +In partnership with the \MontreCode{xint-regression} package, loaded by the package (but \textit{can be deactivated} via the \MontreCode{[noxintreg]} option), it is possible to work on other types of regression: + +\begin{itemize} + \item linear \fbox{$ax+b$}; + \item quadratic \fbox{$ax^2+bx+c$}; + \item cubic \fbox{$ax^3+bx^2+cx+d$}; + \item power \fbox{$ax^b$}; + \item exponential \fbox{$ab^x$} or \fbox{$e^{ax+b}$} or \fbox{$b e^{ax}$} or \fbox{$C + be^{ax} $}; + \item logarithmic \fbox{$a+b\ln(x)$}; + \item hyperbolic \fbox{$a+\displaystyle\frac{b}{x}$}. +\end{itemize} + +The command, similar to that of defining a curve, is: + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only} +\DrawRegression[keys]<name fct>{type}<rounded>{listex}{listey} +\end{tcblisting} + +The \MontreCode{[keys]} available are, classically: + +\begin{itemize} + \item \MontreCode{Start}: lower bound of the definition set (\MontreCode{\textbackslash pflxmin} by default); + \item \MontreCode{End}: lower bound of the definition set (\MontreCode{\textbackslash pflxmax} by default); + \item \MontreCode{Name}: name of the curve (important for the rest!); + \item \MontreCode{Color}: color of the trace (\MontreCode{black} by default); + \item \MontreCode{Step}: plot step (it is determined \textit{automatically} at the start but can be modified). +\end{itemize} + +\pagebreak + +The second argument, optional and between \MontreCode{<...>}, allows you to name the regression function. + +The third argument, mandatory and between \MontreCode{\{...\}} allows you to choose the type of regression, among: + +\begin{itemize} + \item \MontreCode{lin}: linear \fbox{$ax+b$}; + \item \MontreCode{quad}: quadratic \fbox{$ax^2+bx+c$}; + \item \MontreCode{cub}: cubic \fbox{$ax^3+bx^2+cx+d$}; + \item \MontreCode{pow}: power \fbox{$ax^b$}; + \item \MontreCode{expab}: exponential \fbox{$ab^x$} + \item \MontreCode{hyp}: hyperbolic \fbox{$a+\displaystyle\frac{b}{x}$}; + \item \MontreCode{log}: logarithmic \fbox{$a+b\ln(x)$}; + \item \MontreCode{exp}: exponential \fbox{$e^{ax+b}$}; + \item \MontreCode{expalt}: exponential \fbox{$be^{ax}$}; + \item \MontreCode{expoff=C}: exponential \fbox{$C + be^{ax}$}. +\end{itemize} + +The fourth argument, optional and between \MontreCode{<...>}, allows you to specify the rounding(s) for the coefficients of the regression function. + +The last two arguments are the lists of values of X and Y. + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} +\def\LISTEXX{0,50,100,140}\def\LISTEYY{275,290,315,350}% +ListX := \LISTEXX\\ +ListY := \LISTEYY + +\begin{GraphTikz} + [x=0.05cm,y=0.04cm,Xmin=0,Xmax=160,Xgrid=20,Xgrids=10, + Origy=250,Ymin=250,Ymax=400,Ygrid=25,Ygrids=5] + %window preparation + \DrawAxisGrids[Enlarge=2.5mm,Font=\footnotesize]{auto}{auto} + %A cloud of dots + \DrawScatter[Style=o,ColorScatter=red]{\LISTEXX}{\LISTEYY} + %adjustment expoffset + \DrawRegression[Color=blue,Name=adjust]<adjust>{expoff=250}{\LISTEXX}{\LISTEYY} + %holdings + \DrawRanges[Colors=cyan/magenta,Lines]{adjust}{80} + \DrawCounterimage[Style=x,Colors=blue/green!50!black,Lines]{adjust}{325} +\end{GraphTikz} + +\xintexpoffreg[offset=250,round=3/1]{\LISTEXX}{\LISTEYY}% +We obtain $y=250+\num{\expregoffb}\text{e}^{\num{\expregoffa}x}$ +\end{tcblisting} + +\newpage + +\section{Auxiliary commands} + +\subsection{Intro} + +In addition to purely \textit{graphic} commands, some auxiliary commands are available: + +\begin{itemize} + \item a to format a number with a given precision; + \item one for working on random numbers, with constraints. +\end{itemize} + +\subsection{Formatted rounding}\label{round number} + +The \MontreCode{\textbackslash RoundNb} command allows you to format, using the \MontreCode{siunitx} package, a number (or a calculation), with a given precision. This can be \textit{useful} for formatting results obtained using coordinate retrieval commands, for example. + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only} +\RoundNb[precision]{xint calculation} +\end{tcblisting} + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} +\RoundNb{1/3}\\ +\RoundNb{16.1}\\ +\RoundNb[3]{log(10)}\\ +\end{tcblisting} + +\subsection{Random number under constraints}\label{nbalea} + +The idea of this second command is to be able to determine a random number: + +\begin{itemize} + \item integer or decimal; + \item under constraints (between two fixed values). +\end{itemize} + +This can allow, for example, to work on curves with \textit{random} points, but respecting certain constraints. + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only} +\PickRandomNb(*)[precision (def 0)]{lower limit}{upper limit}[\macro] +\end{tcblisting} + +The star version takes the constraints in strict form ($\text{lower bound} < \text{macro} < \text{upper bound}$) while the normal version takes the constraints in broad form ($\text{lower bound) } \leq \text{macro} \leq \text{upper bound}$). + +\smallskip + +Note that the \textit{terminals} can be existing \textit{macros}! + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} +%a number (2 digits after the decimal point) between 0.75 and 0.95 +%a number (2 digits after the decimal point) between 0.05 and 0.25 +%a number (2 decimal places) between 0.55 and \YrandMax +%a number (2 decimal places) between \YrandMin and 0.45 +\PickRandomNb[2]{0.75}{0.95}[\YrandMax]% +\PickRandomNb[2]{0.05}{0.25}[\YrandMin]% +\PickRandomNb*[2]{0.55}{\YrandMax}[\YrandA]% +\PickRandomNb*[2]{\YrandMin}{0.45}[\YrandB]% +%verification +\num{\YrandMax} \& \num{\YrandMin} \& \num{\YrandA} \& \num{\YrandB} +\end{tcblisting} + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} +%a number (2 digits after the decimal point) between 0.75 and 0.95 +%a number (2 digits after the decimal point) between 0.05 and 0.25 +%a number (2 decimal places) between 0.55 and \YrandMax +%a number (2 decimal places) between \YrandMin and 0.45 +\PickRandomNb[2]{0.75}{0.95}[\YrandMax]% +\PickRandomNb[2]{0.05}{0.25}[\YrandMin]% +\PickRandomNb*[2]{0.55}{\YrandMax}[\YrandA]% +\PickRandomNb*[2]{\YrandMin}{0.45}[\YrandB]% +%verification +\num{\YrandMax} \& \num{\YrandMin} \& \num{\YrandA} \& \num{\YrandB} +\end{tcblisting} + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} +%the curve is designed so that there are 3 antecedents +\PickRandomNb[2]{0.75}{0.95}[\YrandMax]% +\PickRandomNb[2]{0.05}{0.25}[\YrandMin]% +\PickRandomNb*[2]{0.55}{\YrandMax}[\YrandA]% +\PickRandomNb*[2]{\YrandMin}{0.45}[\YrandB]% + +\begin{GraphTikz} + [x=0.075cm,y=7.5cm,Xmin=0,Xmax=150,Xgrid=10,Xgrids=5, + Ymin=0,Ymax=1,Ygrid=0.1,Ygrids=0.05] + \DrawAxisGrids[Last,Enlarge=2.5mm]{auto}{auto} + \DefineInterpoCurve[Color=red,Trace,Name=functiontest,Tension=0.75] + {(0,\YrandA)(40,\YrandMin)(90,\YrandMax)(140,\YrandB)} + \FindCounterimage[Disp=false,Name=ANTECED]{functiontest}{0.5} + \DrawCounterimage[Colors=blue/teal,Lines]{functiontest}{0.5} + \GetXcoord{(ANTECED-1)}[\Aalpha] + \GetXcoord{(ANTECED-2)}[\Bbeta] + \GetXcoord + {(ANTECED-3)}[\Cgamma] +\end{GraphTikz} + +The solutions of $f(x)=\num{0.5}$ are, by graphic reading: +$\begin{cases} + \alpha \approx \RoundNb[0]{\Aalpha} \\ + \beta \approx \RoundNb[0]{\Bbeta} \\ + \gamma \approx \RoundNb[0]{\Cgamma} +\end{cases}$. +\end{tcblisting} + +\subsection{Monte-Carle method} + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only} +%in the GraphiqueTikz environment +\SimulateMonteCarlo[keys]<function>}{number of points}[\nbptsmcok][\nbptsmcko] +\end{tcblisting} + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} +\begin{GraphTikz}% + [x=10cm,y=10cm,Xmin=0,Xmax=1,Xgrid=0.1,Xgrids=0.05, + Ymin=0,Ymax=1,Ygrid=0.1,Ygrids=0.05] + \DrawAxisGrids[Enlarge=2.5mm,Last]{auto}{auto} + \DefineCurve[Trace,Color=teal,Step=0.001]<f>{sqrt(1-x^2)} + \SimulateMonteCarlo<f>{5000} +\end{GraphTikz} + +There is \textcolor{blue}{\num{\nbptsmcok}} blue points, +there is \textcolor{red}{\num{\nbptsmcko}} red points. + +And $\frac{\num{\nbptsmcok}}{\num{\nbptsmc}} +\approx \RoundNb[4]{\nbptsmcok/\nbptsmc}$ +et $\frac{\pi}{4} \approx \RoundNb[4]{pi/4}$. +\end{tcblisting} + +\pagebreak + +\subsection{Some pgfplots macros} + +In addition to pgfplots/axis, there's few \textit{simple} macros in order to work with \MontreCode{pgfplots/axis} environement. + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only} +%find intersection of two [name path] objects defined +\findintersectionspgf[nodename baises]{object1}{object2}[\myt] +%global extraction of coordinates +\gextractxnodepgf{node}[\myxcoord] +\gextractynodepgf{node}[\myycoord] +\gextractxynodepgf{node}[\myxcoord][\myycoord] +%area between curves +\fillbetweencurvespgf[tikz options]{curve1}{curve2}<soft domain options> +%cubic splines +\addplotspline(*)[tikz options]<coeffs>{list of points}[\myspline] +\end{tcblisting} + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only} +%\usepackage{alphalph} + +\begin{tikzpicture} + \begin{axis}% + [% + axis y line=center,axis x line=middle, %axis + axis line style={line width=0.8pt,-latex}, + x=0.33cm,y=0.55cm,xmin=1985,xmax=2030,ymin=56,ymax=70, %units + grid=both,xtick distance=5,ytick distance=2, %gridp + minor x tick num=4,minor y tick num=1, %grids + extra x ticks={1985},extra x tick style={grid=none}, %origx + extra y ticks={56},extra y tick style={grid=none}, %origy + x tick label style={/pgf/number format/.cd,use comma,1000 sep={}}, %year + major tick length={2*3pt},minor tick length={1.5*3pt}, %grads + every tick/.style={line width=0.8pt},enlargelimits=false, %style + enlarge x limits={abs=2.5mm,upper},enlarge y limits={abs=2.5mm,upper}, %énlarge + ] + %spline + y=66 + \addplot[name path global=eqtest,mark=none,red,line width=1.05pt,domain=1985:2030] {66} ; + \def\LISTETEST{1985/60/0§1995/68/0§2015/58/0§2025/69/0§2030/62/-2} + \addplotspline*[line width=1.05pt,violet,name path global=splinecubtest]{\LISTETEST}[\monsplineviolet] + %equation f(x)=66 + \findintersectionspgf[MonItsc]{eqtest}{splinecubtest} + %extraction of coordinates + \gextractxnodepgf{(MonItsc-1)}[\xMonItscA] + \gextractxnodepgf{(MonItsc-2)}[\xMonItscB] + \gextractxnodepgf{(MonItsc-3)}[\xMonItscC] + \gextractxnodepgf{(MonItsc-4)}[\xMonItscD] + %vizualisation + \xintFor* #1 in {\xintSeq{1}{4}}\do{% + \draw[line width=0.9pt,densely dashed,olive,->,>=latex] (MonItsc-#1) -- (\csname xMonItsc\AlphAlph{#1}\endcsname,56) ; + \filldraw[olive] (MonItsc-#1) circle[radius=1.75pt] ; + } + %area + \path [name path=xaxis] (1985,56) -- (2030,56); + \fillbetweencurvespgf{splinecubtest}{xaxis}<domain={\xMonItscB:\xMonItscA}> + \fillbetweencurvespgf{splinecubtest}{xaxis}<domain={\xMonItscD:\xMonItscC}> + \end{axis} +\end{tikzpicture} + +Solutions of $f(x)=66$ are \RoundNb[0]{\xMonItscA} \&\ \RoundNb[0]{\xMonItscB} \&\ \RoundNb[0]{\xMonItscC} \&\ \RoundNb[0]{\xMonItscD}. +\end{tcblisting} + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,text only} +\begin{tikzpicture} + \begin{axis}% + [% + axis y line=center,axis x line=middle, %axis + axis line style={line width=0.8pt,-latex}, + x=0.33cm,y=0.55cm,xmin=1985,xmax=2030,ymin=56,ymax=70, %units + grid=both,xtick distance=5,ytick distance=2, %gridp + minor x tick num=4,minor y tick num=1, %grids + extra x ticks={1985},extra x tick style={grid=none}, %origx + extra y ticks={56},extra y tick style={grid=none}, %origy + x tick label style={/pgf/number format/.cd,use comma,1000 sep={}}, %year + major tick length={2*3pt},minor tick length={1.5*3pt}, %grads + every tick/.style={line width=0.8pt},enlargelimits=false, %style + enlarge x limits={abs=2.5mm,upper},enlarge y limits={abs=2.5mm,upper}, %énlarge + ] + %spline + y=66 + \addplot[name path global=eqtest,mark=none,red,line width=1.05pt,domain=1985:2030] {66} ; + \def\LISTETEST{1985/60/0§1995/68/0§2015/58/0§2025/69/0§2030/62/-2} + \addplotspline*[line width=1.05pt,violet,name path global=splinecubtest]{\LISTETEST}[\monsplineviolet] + %equation f(x)=66 + \findintersectionspgf[MonItsc]{eqtest}{splinecubtest} + %extraction of coordinates + \gextractxnodepgf{(MonItsc-1)}[\xMonItscA] + \gextractxnodepgf{(MonItsc-2)}[\xMonItscB] + \gextractxnodepgf{(MonItsc-3)}[\xMonItscC] + \gextractxnodepgf{(MonItsc-4)}[\xMonItscD] + %vizualisation + \xintFor* #1 in {\xintSeq{1}{4}}\do{% + \draw[line width=0.9pt,densely dashed,olive,->,>=latex] (MonItsc-#1) -- (\csname xMonItsc\AlphAlph{#1}\endcsname,56) ; + \filldraw[olive] (MonItsc-#1) circle[radius=1.75pt] ; + } + %area + \path [name path=xaxis] (1985,56) -- (2030,56); + \fillbetweencurvespgf{splinecubtest}{xaxis}<domain={\xMonItscB:\xMonItscA}> + \fillbetweencurvespgf{splinecubtest}{xaxis}<domain={\xMonItscD:\xMonItscC}> + \end{axis} +\end{tikzpicture} + +Solutions of $f(x)=66$ are \RoundNb[0]{\xMonItscA} \&\ \RoundNb[0]{\xMonItscB} \&\ \RoundNb[0]{\xMonItscC} \&\ \RoundNb[0]{\xMonItscD}. +\end{tcblisting} + + + +\section{History} + +\begin{quote} +\begin{verbatim} +0.2.0 : [Alt] key for Hermite spline + few pgfplots macros +0.1.9 : Bugfix +0.1.8 : New commands [in french doc] (binomial, cabweb,\ldots) +0.1.6 : Vertical asymptote + [in french doc] commands for integrals +0.1.5 : Initial version [en] +\end{verbatim} +\end{quote} + +\end{document}
\ No newline at end of file diff --git a/graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-doc-fr.pdf b/graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-doc-fr.pdf Binary files differindex b97f1cf998..0a5577dafe 100644 --- a/graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-doc-fr.pdf +++ b/graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-doc-fr.pdf diff --git a/graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-doc-fr.tex b/graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-doc-fr.tex index e845f5c4d1..e851265a5f 100644 --- a/graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-doc-fr.tex +++ b/graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-doc-fr.tex @@ -6,12 +6,17 @@ \usepackage[T1]{fontenc} \usepackage[utf8]{inputenc} \usepackage{tkz-grapheur} +\pgfplotsset{compat=newest} +\usepackage{alphalph} \usepackage{amsmath} +\usepackage{enumitem} \usepackage{fancyvrb} \usepackage{fancyhdr} \usepackage{hyperref} \usepackage{nicefrac} +\usepackage{fontawesome5} \usepackage{tcolorbox} +\usepackage{minted2} \tcbuselibrary{skins,minted} \fancyhf{} \renewcommand{\headrulewidth}{0pt} @@ -28,8 +33,8 @@ \hypersetup{pdfborder=0 0 0} \usepackage[margin=2cm]{geometry} \setlength{\parindent}{0pt} -\def\TPversion{0.1.0} -\def\TPdate{11/05/2024} +\def\TPversion{0.2.0} +\def\TPdate{29/10/2024} \usepackage{soul} \usepackage{codehigh} \usepackage{tabularray} @@ -38,7 +43,7 @@ \hl{\vphantom{\texttt{pf}}\texttt{#1}}% } \usepackage[french]{babel} - +\sisetup{group-minimum-digits=4} \renewcommand{\footnoterule}{\vfill\kern -3pt \hrule width 0.4\columnwidth \kern 2.6pt} \begin{document} @@ -54,7 +59,9 @@ \begin{tabular}{c} {\Huge \texttt{tkz-grapheur [fr]}}\\ \\ - {\LARGE Un système de grapheur, basé sur \TikZ.}\\ + {\LARGE Un système de grapheur,}\\ + \\ + {\LARGE basé sur \textsf{\TikZ} et \textsf{xint}.}\\ \\ {\small \texttt{Version \TPversion{} -- \TPdate}} \end{tabular} @@ -67,7 +74,7 @@ \begin{tabular}{c} \texttt{Cédric Pierquet}\\ {\ttfamily c pierquet -- at -- outlook . fr}\\ - \texttt{\url{https://github.com/cpierquet/tkz-grapheur}} \\ + \texttt{\url{https://forge.apps.education.fr/pierquetcedric/package-latex-tkz-grapheur}} \\ \end{tabular} \end{center} @@ -80,8 +87,8 @@ %préparation de la fenêtre \TracerAxesGrilles[Elargir=2.5mm,Police=\small]{0,1,...,10}{0,2,...,16} %déf des fonctions avec nom courbe + nom fonction + expression - \DefinirFonction[Nom=cf]<f>{3*x-6} - \DefinirFonction[Nom=cg]<g>{-(x-6)^2+12} + \DefinirCourbe[Nom=cf]<f>{3*x-6} + \DefinirCourbe[Nom=cg]<g>{-(x-6)^2+12} %antécédents et intersection \TrouverIntersections[Aff=false,Nom=K]{cf}{cg} \TrouverAntecedents[AffDroite,Couleur=orange,Nom=I]{cg}{8} @@ -92,7 +99,7 @@ {g(x)}% {(I-2)}{(J-2)} %intégrale entre les deux courbes - \TracerIntegrale[Bornes=noeuds,Type=entre]{f(x)}[g(x)]{(K-1)}{(K-2)} + \TracerIntegrale[Bornes=noeuds,Type=fct/fct]{f(x)}[g(x)]{(K-1)}{(K-2)} %tracé des courbes et des points \TracerCourbe[Couleur=red]{f(x)} \TracerCourbe[Couleur=teal]{g(x)} @@ -121,13 +128,13 @@ %rajouter des valeurs \RajouterValeursAxeX{0.25,1.4,3.3}{\num{0.25},\num{1.4},\num{3.3}} %fonction trigo (déf + tracé) - \DefinirFonction[Nom=ccos,Debut=0,Fin=pi]<fcos>{cos(x)} - \DefinirFonction[Nom=csin,Debut=0,Fin=pi]<fsin>{sin(x)} + \DefinirCourbe[Nom=ccos,Debut=0,Fin=pi]<fcos>{cos(x)} + \DefinirCourbe[Nom=csin,Debut=0,Fin=pi]<fsin>{sin(x)} %intégrale \TrouverIntersections[Aff=false,Nom=JKL]{ccos}{csin} %\DefinirPts{FIN/pi/0} \TracerIntegrale% - [Bornes=noeud/abs,Type=entre,Couleurs=cyan/cyan!50]% + [Bornes=noeud/abs,Type=fct/fct,Couleurs=cyan/cyan!50]% {fsin(x)}[fcos(x)]% {(JKL-1)}{pi} %tracé des courbes @@ -147,6 +154,7 @@ \vfill +\hfill{\footnotesize\textit{\ttfamily À mon papa.}} \vspace*{5mm} @@ -170,7 +178,7 @@ \subsection{Description et idées générales} -Avec ce modeste package, loin des capacités offertes par exemple par les excellents packages \MontreCode{tkz-*}\footnote{par exemple tkz-base \url{https://ctan.org/pkg/tkz-base} et tkz-fct \url{https://ctan.org/pkg/tkz-fct}.} (d'Alain Matthes) ou \MontreCode{tzplot}\footnote{CTAN : \url{https://ctan.org/pkg/tzplot}.} (de In-Sung Cho), il est possible de travailler sur des graphiques de fonctions, en langage \TikZ, de manière \textit{intuitive} et \textit{explicite}. +Avec ce modeste package, loin des capacités offertes par exemple par les excellents packages \MontreCode{pgfplots}\footnote{CTAN : \url{https://ctan.org/pkg/pgfplots}}, \MontreCode{tkz-*}\footnote{par exemple tkz-base \url{https://ctan.org/pkg/tkz-base} et tkz-fct \url{https://ctan.org/pkg/tkz-fct}.} (d'Alain Matthes) ou \MontreCode{tzplot}\footnote{CTAN : \url{https://ctan.org/pkg/tzplot}.} (de In-Sung Cho), il est possible de travailler sur des graphiques de fonctions, en langage \TikZ, de manière \textit{intuitive} et \textit{explicite}. \smallskip @@ -179,7 +187,7 @@ Concernant le fonctionnement global : \smallskip \begin{itemize} - \item des styles particuliers pour les objets utilisés ont été définis, mais ils peuvent localement être modifiés ; + \item des styles particuliers pour les objets utilisés ont été définis (modifiables localement) ; \item le nom des commandes est sous forme \textit{opérationnelle}, de sorte que la construction des éléments graphiques a une forme quasi \textit{algorithmique}. \end{itemize} @@ -205,7 +213,8 @@ Il sera ensuite possible : \item de tracer des courbes ; \item de déterminer graphiquement des images ou des antécédents ; \item de rajouter des éléments de dérivation (tangentes) ou d'intégration (domaine) ; - \item de tracer une droite d'ajustement linéaire. + \item de tracer une droite d'ajustement linéaire ou la courbe d'un autre ajustement ; + \item \dots \end{itemize} \subsection{Packages utilisés, et options du package} @@ -215,20 +224,21 @@ Le package utilise : \smallskip \begin{itemize} - \item \MontreCode{tikz}, avec les librairies \MontreCode{calc,intersections,patterns,patterns.meta} ; - \item \MontreCode{simplekv} ; - \item \MontreCode{xintexpr} ; - \item \MontreCode{xstring} ; - \item \MontreCode{listofitems}. + \item \MontreCode{tikz}, avec les librairies \MontreCode{calc,intersections,patterns,patterns.meta,bbox} ; + \item \MontreCode{simplekv}, \MontreCode{xintexpr}, \MontreCode{xstring}, \MontreCode{listofitems} ; + \item \MontreCode{pgfplots}, avec la librairie \MontreCode{fillbetween} (désactivable via \MontreCode{[nonpgfplots]}) ; + \item \MontreCode{xint-regression}\footnote{CTAN : \url{https://ctan.org/pkg/xint-regression}.} (pour les régressions, désactivable via \MontreCode{[nonxintreg]}). \end{itemize} \smallskip Le package charge également \MontreCode{siunitx} avec les options classiques \texttt{[fr]}, mais il est possible de ne pas le charger en utilisant l'option \MontreCode{[nonsiunitx]}. -\smallskip +\pagebreak -Le package charge également la librairie \TikZ\ \MontreCode{babel}, mais il est possible de ne pas le charger en utilisant l'option \MontreCode{[nontikzbabel]}. +\subsection{Chargement du package} + +Le package charge également la librairie \TikZ\ \MontreCode{babel}, mais il est possible de ne pas la charger en utilisant l'option \MontreCode{[nontikzbabel]}. \smallskip @@ -243,9 +253,11 @@ Les différentes options sont bien évidemment cumulables. %chargement sans tikz.babel \usepackage[nontikzbabel]{tkz-grapheur} -\end{tcblisting} -\pagebreak +%chargement sans pgfplots + options compat +\usepackage[nonpgfplots]{tkz-grapheur} +\pgfplotsset{compat=...} +\end{tcblisting} À noter également que certaines commandes peuvent utiliser des packages comme \MontreCode{nicefrac}, qui sera donc à charger le cas échéant. @@ -261,20 +273,22 @@ Il est possible, dû aux calculs (multiples) effectués en interne, que le temps La précision des résultats (de détermination) semble être aux environs de $10^{-4}$, ce qui devrait normalement garantir des tracés et lectures \textit{satisfaisantes}. Il est quand même conseillé d'être prudent quant aux résultats obtenus et ceux attendus. +\pagebreak + \subsection{Exemple introductif} On peut par exemple partir de l'exemple suivant, pour \textit{illustrer} le cheminement des commandes de ce package. Les commandes et la syntaxe seront détaillées dans les sections suivantes ! \begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} \begin{GraphiqueTikz}% - [x=7.5cm,y=7.5cm,Xmin=0,Xmax=1.001,Xgrille=0.1,Xgrilles=0.02, + [x=10cm,y=10cm,Xmin=0,Xmax=1.001,Xgrille=0.1,Xgrilles=0.02, Ymin=0,Ymax=1.001,Ygrille=0.1,Ygrilles=0.02] \TracerAxesGrilles[Elargir=2.5mm,Police=\small]% {0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1} {0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1} - \DefinirFonction[Nom=cf,Debut=0,Fin=1]<f>{x*exp(x-1)} - \DefinirFonction[Nom=delta,Debut=0,Fin=1]<D>{x} - \TracerIntegrale[Type=entre]{f(x)}[D(x)]{0}{1} + \DefinirCourbe[Nom=cf,Debut=0,Fin=1]<f>{x*exp(x-1)} + \DefinirCourbe[Nom=delta,Debut=0,Fin=1]<D>{x} + \TracerIntegrale[Type=fct/fct]{f(x)}[D(x)]{0}{1} \TracerCourbe[Couleur=red]{f(x)} \TracerCourbe[Couleur=teal]{D(x)} \PlacerImages[Couleurs=blue/cyan,Traits]{f}{0.8,0.9} @@ -329,14 +343,24 @@ Concernant les styles des \textit{objets}, ils sont donnés ci-dessous. \tikzset{pflgrillep/.style={thin,lightgray}} \tikzset{pflgrilles/.style={very thin,lightgray}} \tikzset{pflaxes/.style={line width=0.8pt,->,>=latex}} +\end{tcblisting} -%style des points (courbe / nuage) +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only} +%style des points (courbe / nuage /labels / montecarlo) +\tikzset{pflpoint/.style={line width=0.95pt}} \tikzset{pflpointc/.style={radius=1.75pt}} \tikzset{pflpointnuage/.style={radius=1.75pt}} +\tikzset{pflpointmc/.style={radius=0.875pt}} +\tikzset{pflnoeud/.style={}} %pour les inner sep par exemple :-) +\tikzset{pflcourbediscont/.style={line width=1.1pt}} +\end{tcblisting} +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only} %style des courbes \tikzset{pflcourbe/.style={line width=1.05pt}} +\end{tcblisting} +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only} %style des traits (normaux, antécédents, images) \tikzset{pfltrait/.style={line width=0.8pt}} \tikzset{pfltraitantec/.style={line width=0.95pt,densely dashed}} @@ -348,6 +372,18 @@ Concernant les styles des \textit{objets}, ils sont donnés ci-dessous. \tikzset{pflflechegd/.style={<->,>=latex}} \end{tcblisting} +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only} +%style des constructions ECC (courbe / paramètres) +\tikzset{pfltraitsparamecc/.style={line width=0.9pt,densely dashed}} +\tikzset{pflcourbeecc/.style={line width=1.05pt}} +\end{tcblisting} + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only} +%style des constructions récurrence +\tikzset{pfltraitrec/.style={line width=0.8pt}} +\tikzset{pfltraitrecpointill/.style={pfltraitrec,densely dashed}} +\end{tcblisting} + L'idée est donc de pouvoir redéfinir globalement ou localement les styles, et éventuellement de rajouter des éléments, en utilisant \mintinline{latex}|monstyle/.append style={...}|. \subsection{Création de l'environnement}\label{creaenvt} @@ -399,7 +435,7 @@ La première commande \textit{utile} va permettre de créer les grilles, les axe \begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only} %dans l'environnement GraphiqueTikz -\TracerAxesGrille[clés]{gradX}{gradY} +\TracerAxesGrilles[clés]{gradX}{gradY} \end{tcblisting} Les \MontreCode{[clés]}, optionnelles, disponibles sont : @@ -460,6 +496,8 @@ Les options possible sont : \end{GraphiqueTikz} \end{tcblisting} +À noter qu'il existe les clés booléennes \MontreCode{[Derriere]} (sans les graduations) et \MontreCode{[Devant]} (sans la grille) pour afficher les axes en mode \textit{sous/sur}-impression dans le cas d'intégrales par exemple. + \begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} \begin{GraphiqueTikz}% [x=2.75cm,y=3cm, @@ -529,9 +567,52 @@ Les arguments obligatoires correspondent aux abscisses (en langage\TikZ) et aux \section{Commandes spécifiques de définitions} +\subsection{Tracer une droite}\label{tracdroite} + +L'idée est de proposer une commande pour tracer une droite, à partir : + +\begin{itemize} + \item de deux points (ou nœuds) ; + \item d'un point (ou nœud) et de la pente. +\end{itemize} + +Il existe également une commande pour une asymptote verticale. + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only} +%dans l'environnement GraphiqueTikz +\TracerDroite[clés]{point ou nœud}{point ou noeud ou pente} +\TracerAsymptote[clés]{abscisse} +\end{tcblisting} + +Les \MontreCode{[clés]}, optionnelles, disponibles sont : + +\smallskip + +\begin{itemize} + \item \MontreCode{Nom} : nom éventuel du tracé (pour réutilisation) ; + \item \MontreCode{Pente} : booléen pour préciser que la pente est utilisée (\MontreCode{false} par défaut) ; + \item \MontreCode{Debut} : début du tracé (\MontreCode{\textbackslash pflxmin} par défaut) ; + \item \MontreCode{Fin} : fin du tracé (\MontreCode{\textbackslash pflxmax} par défaut) ; + \item \MontreCode{Couleur} : couleur du tracé (\MontreCode{black} par défaut). +\end{itemize} + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} +\begin{GraphiqueTikz}% + [x=0.8cm,y=1cm,Xmin=-7,Xmax=4,Ymin=-3,Ymax=5] + \TracerAxesGrilles[Elargir=2.5mm]{auto}{auto} + \DefinirPts[Aff,Couleur=gray]{A/-4/3,B/2/0,C/0/-1} + \TracerDroite[Couleur=red]{(-2,-1)}{(2,4)} + \TracerDroite[Couleur=blue,Debut=-5,Fin=3]{(A)}{(B)} + \TracerDroite[Couleur=olive,Pente]{(C)}{0.25} + \TracerAsymptote[Couleur=brown]{-6} +\end{GraphiqueTikz} +\end{tcblisting} + +\pagebreak + \subsection{Définir une fonction, tracer la courbe d'une fonction}\label{deftracfct} -La première idée est de définir une fonction, pour réutilisation ultérieure. Cette commande \textit{crée} la fonction, sans la tracer, car dans certains cas des éléments devront être tracés au préalable. +L'idée est de définir une fonction, pour réutilisation ultérieure. Cette commande \textit{crée} la fonction, sans la tracer, car dans certains cas des éléments devront être tracés au préalable. \smallskip @@ -539,7 +620,7 @@ Il existe également une commande pour tracer la courbe d'une fonction précéde \begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only} %dans l'environnement GraphiqueTikz -\DefinirFonction[clés]<nom fct>{formule xint} +\DefinirCourbe[clés]<nom fct>{formule xint} \TracerCourbe[clés]{formule xint} \end{tcblisting} @@ -550,9 +631,9 @@ Les \MontreCode{[clés]} pour la définition ou le tracé, optionnelles, disponi \begin{itemize} \item \MontreCode{Debut} : borne inférieure de l'ensemble de définition (\MontreCode{\textbackslash pflxmin} par défaut) ; \item \MontreCode{Fin} : borne inférieure de l'ensemble de définition (\MontreCode{\textbackslash pflxmax} par défaut) ; - \item \MontreCode{Nom} : = nom de la courbe (important pour la suite !) ; - \item \MontreCode{Couleur} : = couleur du tracé (\MontreCode{black} par défaut) ; - \item \MontreCode{Pas} : = pas du tracé (il est déterminé \textit{automatiquement} au départ mais peut être modifié) ; + \item \MontreCode{Nom} : nom de la courbe (important pour la suite !) ; + \item \MontreCode{Couleur} : couleur du tracé (\MontreCode{black} par défaut) ; + \item \MontreCode{Pas} : pas du tracé (il est déterminé \textit{automatiquement} au départ mais peut être modifié) ; \item \MontreCode{Trace} : booléen pour tracer également la courbe (\MontreCode{false} par défaut). \end{itemize} @@ -562,10 +643,11 @@ Les \MontreCode{[clés]} pour la définition ou le tracé, optionnelles, disponi Ymin=40,Ymax=56,Ygrille=2,Ygrilles=1,Origy=40] \TracerAxesGrilles[Elargir=2.5mm,Police=\small]{4,5,...,20}{40,42,...,56} %définition de la fonction + tracé de la courbe - \DefinirFonction[Nom=cf,Debut=5,Fin=19]<f>{-2*x+3+24*log(2*x)} + %la fonction ln a été créée pour xint ! + \DefinirCourbe[Nom=cf,Debut=5,Fin=19]<f>{-2*x+3+24*ln(2*x)} \TracerCourbe[Couleur=red,Debut=5,Fin=19]{f(x)} %ou en une seule commande si "suffisant" - %\DefinirFonction[Nom=cf,Debut=5,Fin=19,Trace]<f>{-2*x+3+24*log(2*x)} + %\DefinirCourbe[Nom=cf,Debut=5,Fin=19,Trace]<f>{-2*x+3+24*ln(2*x)} \end{GraphiqueTikz} \end{tcblisting} @@ -618,8 +700,8 @@ Certaines exploitations demandant des techniques différentes suivant le type de \begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only} %dans l'environnement GraphiqueTikz -\DefinirSpline[clés]{liste des points support}[\macronomspline] -\TracerSpline[clés]{liste des points support}[\macronomspline] +\DefinirCourbeSpline[clés]{liste des points support}[\macronomspline] +\TracerCourbeSpline[clés]{liste des points support}[\macronomspline] \end{tcblisting} Les \MontreCode{[clés]} pour la définition ou le tracé, optionnelles, disponibles sont : @@ -627,10 +709,11 @@ Les \MontreCode{[clés]} pour la définition ou le tracé, optionnelles, disponi \smallskip \begin{itemize} - \item \MontreCode{Nom} : = nom de la courbe d'interpolation (important pour la suite !) ; + \item \MontreCode{Nom} : nom de la courbe d'interpolation (important pour la suite !) ; \item \MontreCode{Coeffs} : modifier (voir la documentation de \textsf{ProfLycee}\footnote{CTAN : \url{https://ctan.org/pkg/proflycee}} les \textit{coefficients} du spline ; - \item \MontreCode{Couleur} : = couleur du tracé (\MontreCode{black} par défaut) ; - \item \MontreCode{Trace} : booléen pour tracer également la courbe (\MontreCode{false} par défaut). + \item \MontreCode{Couleur} : couleur du tracé (\MontreCode{black} par défaut) ; + \item \MontreCode{Trace} : booléen pour tracer également la courbe (\MontreCode{false} par défaut) ; + \item \MontreCode{Alt} : booléen pour activer une autre \textit{méthode de calcul} (\MontreCode{false} par défaut). \end{itemize} L'argument obligatoire permet quant à lui de spécifier la liste des points supports sous la forme \MontreCode{x1/y1/f'1§x2/y2/f'2§...} avec : @@ -644,12 +727,13 @@ L'argument obligatoire permet quant à lui de spécifier la liste des points sup \begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} \begin{GraphiqueTikz}% - [x=0.8cm,y=1cm,Xmin=-7,Xmax=4,Ymin=-3,Ymax=5] + [x=0.8cm,y=0.8cm,Xmin=-7,Xmax=4,Ymin=-3,Ymax=5] \TracerAxesGrilles[Elargir=2.5mm]{-7,-6,...,4}{-3,-2,...,5} %définition de la liste des points support du spline \def\LISTETEST{-6/4/-2§-5/2/-2§-4/0/-2§-2/-2/0§1/2/2§3/3.5/0.5} - %définition et tracé du spline cubique - \DefinirSpline[Nom=splinetest,Trace,Couleur=olive]{\LISTETEST} + %définition et tracé du spline cubique (x2) + \DefinirCourbeSpline[Nom=splinetest,Trace,Couleur=olive]{\LISTETEST} + \DefinirCourbeSpline[Alt,Nom=splinetest,Trace,Couleur=teal]{\LISTETEST} \end{GraphiqueTikz} \end{tcblisting} @@ -661,10 +745,14 @@ La seconde idée est de travailler avec des nœuds \TikZ, qui pourront être uti \smallskip +Il est également possible de définir des nœuds pour des points \textit{image}. + +\smallskip + Certaines commandes (explicités ultérieurement) permettent de déterminer des points particuliers des courbes sous forme de nœuds, donc il semble intéressant de pouvoir en définir directement. \begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only} -%dans l'environnement GraphiqueTikz +%par les coordonnées \DefinirPts[clés]{Nom1/x1/y1,Nom2/x2/y2,...} \end{tcblisting} @@ -677,6 +765,22 @@ Les \MontreCode{[clés]}, optionnelles, disponibles sont : \item \MontreCode{Couleur} : couleur des points, si \MontreCode{Aff=true} (\MontreCode{black} par défaut). \end{itemize} +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only} +%sous forme d'image +\DefinirImage[clés]{objet}{abscisse} +\end{tcblisting} + +Les \MontreCode{[clés]}, optionnelles, disponibles sont : + +\smallskip + +\begin{itemize} + \item \MontreCode{Nom} : nom du nœud (\MontreCode{vide} par défaut) ; + \item \MontreCode{Spline} : booléen pour spécifier qu'un spline est utilisé (\MontreCode{false} par défaut). +\end{itemize} + +Le premier argument obligatoire est l'\textit{objet} considéré (nom de la courbe pour le spline, fonction sinon) ; le second est l'abscisse du point considéré. + \begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} \begin{GraphiqueTikz}% [x=0.9cm,y=0.425cm,Xmin=4,Xmax=20,Origx=4, @@ -686,6 +790,106 @@ Les \MontreCode{[clés]}, optionnelles, disponibles sont : \DefinirFonction[Nom=cf,Debut=5,Fin=19,Trace,Couleur=red]<f>{-2*x+3+24*log(2*x)} %nœuds manuels \DefinirPts[Aff,Couleur=brown]{A/7/42,B/16/49} + %nœud image + \DefinirImage[Nom=IMGf]{f}{14} + \MarquerPts*[Style=x,Couleur=blue]{(IMGf)} +\end{GraphiqueTikz} +\end{tcblisting} + +\pagebreak + +\subsection{Marquage de points}\label{markpts} + +L'idée est de proposer de quoi marquer des points avec un style particulier. + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only} +%dans l'environnement GraphiqueTikz +\MarquerPts(*)[clés]<police>{liste} +\end{tcblisting} + +La version \textit{étoilée} marque les points sans les \og noms \fg, alors que la version \textit{non étoilée} les affiche : + +\begin{itemize} + \item dans le cas de la version \textit{étoilée}, la liste est à donner sous la forme \MontreCode{(ptA),(ptB),...} ; + \item sinon, la liste est à donner sous la forme \MontreCode{(ptA)/labelA/poslabelA,...}. +\end{itemize} + +\smallskip + +Les \MontreCode{[clés]}, optionnelles, disponibles sont : + +\smallskip + +\begin{itemize} + \item \MontreCode{Couleur} : couleur (\MontreCode{black} par défaut) ; + \item \MontreCode{Style} : style des marques (\MontreCode{o} par défaut). +\end{itemize} + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} +\begin{GraphiqueTikz}[x=1.5cm,y=1.5cm,Ymin=-2] + \TracerAxesGrilles[Elargir=2.5mm]{auto}{auto} + \DefinirPts{A/1.75,-1.25}\MarquerPts[Couleur=pink]{(A)/A/below} %rond (par défaut) + \MarquerPts[Couleur=teal]{(1,1)/M/below} + \MarquerPts[Couleur=red,Style=x]{(1.25,1)/$A$/below} %croix + \MarquerPts[Couleur=orange,Style=+]<\small\sffamily>{(1.5,1)/K/below} %plus + \MarquerPts[Couleur=blue,Style=c]{(1.75,1)/P/below} %carré + \MarquerPts[Couleur=gray,Style=d]{(2,1)/P/below} %diamant + \MarquerPts*[Couleur=orange/yellow]{(2,2),(2.5,2.25)} %rond bicolore + \MarquerPts*[Style=+,Couleur=red]{(1,2)} + \MarquerPts*[Style=x,Couleur=blue]{(2.25,1)} + \MarquerPts*[Style=c,Couleur=magenta]{(-2,-1)} + \MarquerPts[Couleur=red,Style=x]{(-1,1)/$A$/below,(-2,2)/$B$/below left} +\end{GraphiqueTikz} +\end{tcblisting} + +À noter qu'il est également possible de modifier la taille des marques \MontreCode{o/x/+/c} via les \MontreCode{[clés]} : + +\begin{itemize} + \item \MontreCode{Taillex=...} (\MontreCode{2pt} par défaut) pour les points \textit{croix} ; + \item \MontreCode{Tailleo=...} (\MontreCode{1.75pt} par défaut) pour les points \textit{cercle} ; + \item \MontreCode{Taillec=...} (\MontreCode{2pt} par défaut) pour les points \textit{carré}. +\end{itemize} + +\pagebreak + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} +\begin{GraphiqueTikz}[x=1cm,y=1cm,Xmin=0,Ymin=0] + \TracerAxesGrilles[Elargir=2.5mm]{auto}{auto} + \MarquerPts[Couleur=red,Style=x,Taillex=3.5pt]{(1.25,1.25)/$A$/below} + \MarquerPts[Couleur=teal,Tailleo=2.5pt]{(2,2)/$A$/right} + \MarquerPts*[Couleur=orange,Style=c,Taillec=4pt]{(0.5,2.5)} +\end{GraphiqueTikz} +\end{tcblisting} + +\subsection{Marquer des points de discontinuité}\label{ptsdiscont} + +Il est possible de marquer des points de discontinuité, mais c'est commande est \textit{déconnectée} des commandes de tracé de courbes/splines. + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only} +%dans l'environnement GraphiqueTikz +\AfficherPtsDiscont[clés]{liste} +\end{tcblisting} + +Le premier argument, \textit{optionnel} et entre \MontreCode{[...]}, contient les \MontreCode{Clés} suivantes : + +\begin{itemize} + \item \MontreCode{Couleur=...} (\MontreCode{black} par défaut) ; + \item \MontreCode{Pos=...} (\MontreCode{D} par défaut) pour choisir la position de la discontinuité (parmi \MontreCode{G/D}) ; + \item \MontreCode{Echelle=...} (\MontreCode{1} par défaut) pour modifier l'échelle du symbole ; + \item \MontreCode{Type=...} (\MontreCode{par} par défaut) pour choisir le type de symbole, parmi \MontreCode{par/cro/rond/demirond}. +\end{itemize} + +Le second argument, obligatoire et entre \MontreCode{\{...\}} permet de préciser la liste des points en lesquels le symbole de discontinuité sera positionné, sous la forme \MontreCode{x1/y1/d1 § x2/y2/d2 § ...} avec les points \MontreCode{(xi;yi)} et \MontreCode{f'(xi)=di}. + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} +\begin{GraphiqueTikz}[x=1cm,y=1cm,Xmin=0,Xmax=10,Ymin=0,Ymax=5] + \TracerAxesGrilles[Elargir=2.5mm]{auto}{auto} + \DefinirCourbeSpline[Trace,Couleur=red]{0/1/-1 § 4/4/0} + \AfficherPtsDiscont{4/4/0} + \AfficherPtsDiscont[Pos=G,Type=cro]{0/1/-1} + \DefinirCourbeSpline[Trace,Couleur=blue]{5/1/1.5 § 8/4/0.5} + \AfficherPtsDiscont[Couleur=blue,Type=rond]{8/4/0.5} + \AfficherPtsDiscont[Couleur=blue,Pos=G,Type=demirond,Echelle=2]{5/1/1.5} \end{GraphiqueTikz} \end{tcblisting} @@ -704,6 +908,30 @@ Les calculs étant effectués en flottant en fonction des unités (re)calculées \RecupererCoordonnees{nœud}[\macrox][\macroy] \end{tcblisting} +\subsection{Placer du texte}\label{placetxt} + +À noter qu'une commande de placement de texte est disponible. + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only} +%dans l'environnement GraphiqueTikz +\PlacerTexte[clés]{(nœud ou coordonnées)}{texte} +\end{tcblisting} + +Les \MontreCode{[clés]} disponibles sont : + +\begin{itemize} + \item \MontreCode{Police=...} (\MontreCode{\textbackslash normalsize\textbackslash normalfont} par défaut) pour la police ; + \item \MontreCode{Couleur=...} (\MontreCode{black} par défaut) pour la couleur ; + \item \MontreCode{Position=...} (\MontreCode{vide} par défaut) pour la position du texte par rapport aux coordonnées. +\end{itemize} + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} + \begin{GraphiqueTikz}[x=1cm,y=1cm,Xmin=0,Xmax=5,Ymin=0,Ymax=1] + \TracerAxesGrilles[Elargir=2.5mm]{auto}{auto} + \PlacerTexte[Couleur=red,Police=\LARGE,Position=right]{(1.5,0.5)}{courbe $C_1$} + \end{GraphiqueTikz} +\end{tcblisting} + \pagebreak \section{Commandes spécifiques d'exploitation des courbes} @@ -716,7 +944,7 @@ La fonction/courbe utilisée doit avoir été déclarée précédemment pour que \begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only} %dans l'environnement GraphiqueTikz -\PlacerImages[clés]{focntion ou courbe}{liste d'abscisses} +\PlacerImages[clés]{fonction ou courbe}{liste d'abscisses} \end{tcblisting} Les \MontreCode{[clés]}, optionnelles, disponibles sont : @@ -746,7 +974,7 @@ Le premier argument obligatoire, permet de spécifier : Ymin=40,Ymax=56,Ygrille=2,Ygrilles=1,Origy=40] \TracerAxesGrilles[Elargir=2.5mm,Police=\small]{4,5,...,20}{40,42,...,56} %définition de la fonction + tracé de la courbe - \DefinirFonction[Nom=cf,Debut=5,Fin=19,Trace,Couleur=red]<f>{-2*x+3+24*log(2*x)} + \DefinirCourbe[Nom=cf,Debut=5,Fin=19,Trace,Couleur=red]<f>{-2*x+3+24*log(2*x)} %images \PlacerImages[Traits,Couleurs=teal/blue]{f}{6,7,8,9,10} \end{GraphiqueTikz} @@ -790,23 +1018,23 @@ Le second argument obligatoire, permet de spécifier la valeur à atteindre. Ymin=40,Ymax=56,Ygrille=2,Ygrilles=1,Origy=40] \TracerAxesGrilles[Elargir=2.5mm,Police=\small]{4,5,...,20}{40,42,...,56} %définition de la fonction + tracé de la courbe - \DefinirFonction[Nom=cf,Debut=5,Fin=19,Trace,Couleur=red]<f>{-2*x+3+24*log(2*x)} + \DefinirCourbe[Nom=cf,Debut=5,Fin=19,Trace,Couleur=red]<f>{-2*x+3+24*log(2*x)} %antécédents \TrouverAntecedents[Couleur=teal,AffDroite,Aff]{cf}{53} %les deux antécédents sont aux nœuds (S-1) et (S-2) \end{GraphiqueTikz} \end{tcblisting} -Les \MontreCode{[clés]}, optionnelles, disponibles sont : - -\smallskip - -\begin{itemize} - \item \MontreCode{Nom} : base du nom des \textbf{nœuds} intersection (\MontreCode{S} par défaut, ce qui donnera \textsf{S-1}, \textsf{S-2}, etc) ; - \item \MontreCode{Aff} : booleen pour afficher les points (\MontreCode{true} par défaut) ; - \item \MontreCode{Couleur} : couleur des points (\MontreCode{black} par défaut) ; - \item \MontreCode{AffDroite} : booleen pour afficher la droite horizontale (\MontreCode{false} par défaut). -\end{itemize} +%Les \MontreCode{[clés]}, optionnelles, disponibles sont : +% +%\smallskip +% +%\begin{itemize} +% \item \MontreCode{Nom} : base du nom des \textbf{nœuds} intersection (\MontreCode{S} par défaut, ce qui donnera \textsf{S-1}, \textsf{S-2}, etc) ; +% \item \MontreCode{Aff} : booleen pour afficher les points (\MontreCode{true} par défaut) ; +% \item \MontreCode{Couleur} : couleur des points (\MontreCode{black} par défaut) ; +% \item \MontreCode{AffDroite} : booleen pour afficher la droite horizontale (\MontreCode{false} par défaut). +%\end{itemize} \pagebreak @@ -845,7 +1073,7 @@ Le second argument obligatoire, permet de spécifier la valeur à atteindre. Ymin=40,Ymax=56,Ygrille=2,Ygrilles=1,Origy=40] \TracerAxesGrilles[Elargir=2.5mm,Police=\small]{4,5,...,20}{40,42,...,56} %définition de la fonction + tracé de la courbe - \DefinirFonction[Nom=cf,Debut=5,Fin=19,Trace,Couleur=red]<f>{-2*x+3+24*log(2*x)} + \DefinirCourbe[Nom=cf,Debut=5,Fin=19,Trace,Couleur=red]<f>{-2*x+3+24*log(2*x)} %antécédents \PlacerAntecedents[Couleurs=teal/cyan,Traits,Nom=PO]{cf}{53} \RecupererAbscisse{(PO-1)}[\premsol] @@ -894,8 +1122,8 @@ Le premier argument obligatoire, permet de spécifier le \textbf{nom} de la seco [x=0.9cm,y=0.425cm,Xmin=4,Xmax=20,Origx=4, Ymin=40,Ymax=56,Ygrille=2,Ygrilles=1,Origy=40] \TracerAxesGrilles[Elargir=2.5mm,Police=\small]{4,5,...,20}{40,42,...,56} - \DefinirFonction[Nom=cf,Debut=5,Fin=19,Trace,Couleur=red]<f>{-2*x+3+24*log(2*x)} - \DefinirFonction[Nom=cg,Debut=5,Fin=19,Trace,Couleur=blue]<f>{0.25*(x-12)^2+46} + \DefinirCourbe[Nom=cf,Debut=5,Fin=19,Trace,Couleur=red]<f>{-2*x+3+24*log(2*x)} + \DefinirCourbe[Nom=cg,Debut=5,Fin=19,Trace,Couleur=blue]<g>{0.25*(x-12)^2+46} %intersections, nommées (TT-1) et (TT-2) \TrouverIntersections[Nom=TT,Couleur=darkgray,Aff,Traits]{cf}{cg} %récupération des points d'intersection @@ -911,7 +1139,90 @@ $(\ArrondirNum[2]{\alphaB};\ArrondirNum[2]{\betaB})$. \pagebreak -\subsection{Intégrales}\label{integr} +\subsection{Extremums}\label{maximum}\label{minimum} + +L'idée (encore \textit{expérimentale}) est de proposer des commandes pour extraire les extremums d'une courbe définie par le package. + +La commande crée le nœud correspondant, et il est du coup possible de récupérer ses coordonnées pour exploitation ultérieure. + +\smallskip + +Il est possible, en le spécifiant, de travailler sur les différentes courbes gérées par le package (fonction, interpolation, spline). + +Pour des courbes singulières, il est possible que les résultats ne soient pas tout à fait ceux attendus\ldots + +\smallskip + +{\small\faBomb} Pour le moment, les \textit{limitations} sont : + +\begin{itemize} + \item pas de gestion d'extremums multiples (seul le premier sera traité)\ldots + \item pas de gestion d'extremums aux bornes du tracé\ldots + \item pas de récupération automatique des paramètres de définition des courbes\ldots + \item le temps de compilation peut être plus long\ldots +\end{itemize} + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only} +%dans l'environnement GraphiqueTikz +\TrouverMaximum[clés]{objet}[nœud créé] +\TrouverMinimum[clés]{objet}[nœud créé] +\end{tcblisting} + +Les \MontreCode{[clés]}, optionnelles, disponibles sont : + +\smallskip + +\begin{itemize} + \item \MontreCode{Methode} : méthode, parmi \MontreCode{fonction/interpo/spline} pour les calculs (\MontreCode{fonction} par défaut) ; + \item \MontreCode{Debut} : début du tracé (\MontreCode{\textbackslash pflxmin} par défaut) ; + \item \MontreCode{Fin} : fin du tracé (\MontreCode{\textbackslash pflxmax} par défaut) ; + \item \MontreCode{Pas} : pas du tracé si \MontreCode{fonction} (il est déterminé \textit{automatiquement} au départ mais peut être modifié) ; + \item \MontreCode{Coeffs} : modifier les \textit{coefficients} du spline si \MontreCode{spline} ; + \item \MontreCode{Tension} : paramétrage de la \textit{tension} du tracé d'interpolation si \MontreCode{interpo}(\MontreCode{0.5} par défaut). +\end{itemize} + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} +\begin{GraphiqueTikz}[x=1cm,y=1cm,Xmin=-1,Xmax=5,Ymin=-1,Ymax=3] + \TracerAxesGrilles[Elargir=2.5mm]{auto}{auto} + \DefinirCourbe[Nom=cf,Debut=0.35,Fin=4.2,Trace]% + <f>{0.6*cos(4.5*(x-4)+2.1)-1.2*sin(x-4)+0.1*x+0.2} + \TrouverMaximum[Debut=0.35,Fin=4.2]{f}[cf-max] + \TrouverMaximum[Debut=3,Fin=4]{f}[cf-maxlocal] + \TrouverMinimum[Debut=1,Fin=2]{f}[cf-minlocal] + \MarquerPts*[Couleur=red,Traits]{(cf-max)} + \MarquerPts*[Couleur=blue,Traits]{(cf-maxlocal)} + \MarquerPts*[Couleur=olive,Traits]{(cf-minlocal)} + \RecupererCoordonnees{(cf-max)}[\MonMaxX][\MonMaxY] +\end{GraphiqueTikz}\\ +Le maximum est $M\approx\ArrondirNum{\MonMaxY}$, atteint en $x\approx\ArrondirNum{\MonMaxX}$ +\end{tcblisting} + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} +\begin{GraphiqueTikz}[x=0.8cm,y=1cm,Xmin=-7,Xmax=4,Ymin=-3,Ymax=5] + \TracerAxesGrilles[Elargir=2.5mm]{-7,-6,...,4}{-3,-2,...,5} + \DefinirCourbeInterpo[Nom=interpotest,Couleur=red,Trace,Tension=1]% + {(-6,4)(-2,-2)(3,3.5)} + \TrouverMinimum[Methode=interpo,Tension=1]{(-6,4)(-2,-2)(3,3.5)}[interpo-min] + \MarquerPts*[Couleur=blue]{(interpo-min)} + \RecupererCoordonnees{(interpo-min)}[\MinInterpoX][\MinInterpoY] +\end{GraphiqueTikz}\\ +Le minimum est $M\approx\ArrondirNum[3]{\MinInterpoY}$, atteint en $x\approx\ArrondirNum[3]{\MinInterpoX}$ +\end{tcblisting} + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} +\begin{GraphiqueTikz}% + [x=1.2cm,y=1.6cm,Xmin=-7,Xmax=4,Ymin=-3,Ymax=3,Ygrille=0.5,Ygrilles=0.25] + \TracerAxesGrilles[Elargir=2.5mm]{auto}{auto} + \def\LISTETEST{-6/2/0§-1/-2/0§2/1/0§3.5/0/-1} + \DefinirCourbeSpline[Nom=splinetest,Trace]{\LISTETEST} + \TrouverMinimum[Methode=spline]{\LISTETEST}[spline-min] + \MarquerPts*[Couleur=red]{(spline-min)} +\end{GraphiqueTikz} +\end{tcblisting} + +\pagebreak + +\subsection{Intégrales (version améliorée)}\label{integr} On peut également travailler avec des intégrales. @@ -923,13 +1234,17 @@ Il est possible de : \begin{itemize} \item représenter une intégrale \textbf{sous} une courbe définie ; - \item représenter une intégrale \textbf{entre} deux courbes (sauf avec des splines\ldots) ; + \item représenter une intégrale \textbf{entre} deux courbes ; \item les bornes d'intégration peuvent être des abscisses et/ou des nœuds. \end{itemize} +\smallskip + +{\small\faBomb} Compte-tenu des différences de traitement entre les courbes par formule, les courbes par interpolation simple ou les courbes par interpolation cubique, les arguments et clés peuvent différer suivant la configuration ! + \begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only} %dans l'environnement GraphiqueTikz -\TracerIntegrale[clés]<options spécifiques>{fonction ou spline}[courbe inf]{A}{B} +\TracerIntegrale[clés]<options spécifiques>{objet1}[objet2]{A}{B} \end{tcblisting} Les \MontreCode{[clés]} pour la définition ou le tracé, optionnelles, disponibles sont : @@ -939,7 +1254,14 @@ Les \MontreCode{[clés]} pour la définition ou le tracé, optionnelles, disponi \item \MontreCode{Style} : type de remplissage, parmi \MontreCode{remplissage}/\MontreCode{hachures} (\MontreCode{remplissage} par défaut) ; \item \MontreCode{Opacite} : opacité (\MontreCode{0.5} par défaut) du remplissage ; \item \MontreCode{Hachures} : style (\MontreCode{north west lines} par défaut) du remplissage hachures ; - \item \MontreCode{Type} : type d'intégrale parmi \MontreCode{dessous}/\MontreCode{entre} (\MontreCode{dessous} par défaut) ; + \item \MontreCode{Type} : type d'intégrale parmi + \begin{itemize} + \item \MontreCode{fct} (défaut) pour une intégrale sous une courbe définie par une formule ; + \item \MontreCode{spl} pour une intégrale sous une courbe définie par un spline cublique ; + \item \MontreCode{fct/fct} pour une intégrale entre deux courbes définie par une formule ; + \item \MontreCode{fct/spl} pour une intégrale entre une courbe (dessus) définie par une formule et une courbe (dessous) définie par un spline cubique ; + \item etc + \end{itemize} \item \MontreCode{Pas} : pas (calculé par défaut sinon) pour le tracé ; \item \MontreCode{Jonction} : jonction des segments (\MontreCode{bevel} par défaut) ; \item \MontreCode{Bornes} : type des bornes parmi : @@ -950,18 +1272,32 @@ Les \MontreCode{[clés]} pour la définition ou le tracé, optionnelles, disponi \item \MontreCode{noeud/abs} pour les bornes données par nœud et abscisse ; \end{itemize} \item \MontreCode{Bord} : booléen (\MontreCode{true} par défaut) pour afficher les traits latéraux,% - \item \MontreCode{Spline} : booléen (\MontreCode{false} par défaut) pour préciser qu'un spline est utilisé ; - \item \MontreCode{NomSpline} : nom (important !) du spline généré précédemment \MontreCode{\textbackslash monspline}. + \item \MontreCode{NomSpline} : macro (important !) du spline généré précédemment pour un spline en version supérieure ; + \item \MontreCode{NomSplineB} : macro (important !) du spline généré précédemment pour un spline en version inférieure ; + \item \MontreCode{NomInterpo} : nom (important !) de la courbe d'interpolation générée précédemment, en version supérieure ; + \item \MontreCode{NomInterpoB} : nom (important !) de la courbe d'interpolation générée précédemment, en version inférieure ; + \item \MontreCode{Tension} : tension pour la courbe d'interpolation générée précédemment, en version supérieure ; + \item \MontreCode{TensionB} : tension de la courbe d'interpolation générée précédemment, en version inférieure. \end{itemize} \smallskip -Le premier argument obligatoire est la fonction ou la courbe du spline. +Le premier argument obligatoire est la fonction ou la courbe du spline ou la liste de points d'interpolation. + +\smallskip + +L'argument suivant, optionnel, est la fonction ou la courbe du spline ou la liste de points d'interpolation. \smallskip Les deux derniers arguments obligatoires sont les bornes de l'intégrale, données sous une forme en adéquation avec la clé \MontreCode{Bornes}. +\pagebreak + +Dans le cas de courbes définies par des \textit{points}, il est nécessaire de travailler sur des intervalles sur lesquels la première courbe est \textbf{au-dessus} de la deuxième. + +Il sera sans doute intéressant de travailler avec les \textit{intersections} dans ce cas. + \begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} \begin{GraphiqueTikz}% [x=0.6cm,y=0.06cm, @@ -969,7 +1305,7 @@ Les deux derniers arguments obligatoires sont les bornes de l'intégrale, donné Ymin=0,Ymax=155,Ygrille=10,Ygrilles=5] \TracerAxesGrilles% [Grads=false,Elargir=2.5mm]{}{} - \DefinirFonction[Nom=cf,Debut=1,Fin=20,Couleur=red]<f>{80*x*exp(-0.2*x)} + \DefinirCourbe[Nom=cf,Debut=1,Fin=20,Couleur=red]<f>{80*x*exp(-0.2*x)} \TracerIntegrale [Bornes=abs,Couleurs=blue/cyan!50]% {f(x)}{3}{12} @@ -984,11 +1320,11 @@ Les deux derniers arguments obligatoires sont les bornes de l'intégrale, donné [x=1.2cm,y=1.6cm,Xmin=-7,Xmax=4,Ymin=-3,Ymax=3,Ygrille=0.5,Ygrilles=0.25] \TracerAxesGrilles[Grads=false,Elargir=2.5mm]{}{} \def\LISTETEST{-6/2/0§-1/-2/0§2/1/0§3.5/0/-1} - \DefinirSpline[Nom=splinetest]{\LISTETEST} - \TracerIntegrale[Spline,Style=hachures,Couleurs=purple]{splinetest}{-5.75}{-4.75} - \TracerIntegrale[Spline,Couleurs=blue]{splinetest}{-2}{-1} - \TracerIntegrale[Spline,Couleurs=orange]{splinetest}{1}{3} - \TracerSpline[Couleur=olive]{\LISTETEST} + \DefinirCourbeSpline[Nom=splinetest]{\LISTETEST} + \TracerIntegrale[Type=spl,Style=hachures,Couleurs=purple]{splinetest}{-5.75}{-4.75} + \TracerIntegrale[Type=spl,Couleurs=blue]{splinetest}{-2}{-1} + \TracerIntegrale[Type=spl,Couleurs=orange]{splinetest}{1}{3} + \TracerCourbeSpline[Couleur=olive]{\LISTETEST} \TracerAxesGrilles[Grille=false,Elargir=2.5mm] {-7,-6,...,4}% {-3,-2.5,...,3} @@ -1039,7 +1375,7 @@ Le dernier argument obligatoire est le point de travail (version abscisse ou nœ [x=0.9cm,y=0.425cm,Xmin=4,Xmax=20,Origx=4, Ymin=40,Ymax=56,Ygrille=2,Ygrilles=1,Origy=40] \TracerAxesGrilles[Elargir=2.5mm,Police=\small]{4,5,...,20}{40,42,...,56} - \DefinirFonction[Nom=cf,Debut=5,Fin=19,Couleur=red,Trace]<f>{-2*x+3+24*log(2*x)} + \DefinirCourbe[Nom=cf,Debut=5,Fin=19,Couleur=red,Trace]<f>{-2*x+3+24*log(2*x)} \TrouverAntecedents[Couleur=teal,Nom=JKL,Aff=false]{cf}{53} %tangente \TracerTangente% @@ -1052,7 +1388,7 @@ Le dernier argument obligatoire est le point de travail (version abscisse ou nœ [x=0.8cm,y=1cm,Xmin=-7,Xmax=4,Ymin=-3,Ymax=5] \TracerAxesGrilles[Elargir=2.5mm]{-7,-6,...,4}{-3,-2,...,5} \def\LISTETEST{-6/4/-0.5§-5/2/-2§-4/0/-2§-2/-2/0§1/2/2§3/3.5/0.5} - \DefinirSpline[Nom=splinetest,Trace,Couleur=olive]{\LISTETEST} + \DefinirCourbeSpline[Nom=splinetest,Trace,Couleur=olive]{\LISTETEST} \TracerTangente[Couleurs=red,Spline,AffPoint]{splinetest}{1} \TracerTangente% [Couleurs=blue,Spline,DecG=1.5,DecD=1.5,AffPoint]{splinetest}{-3}% @@ -1064,9 +1400,381 @@ Le dernier argument obligatoire est le point de travail (version abscisse ou nœ \pagebreak -\section{Commandes spécifiques des statistiques à deux variables} +\subsection{Suites récurrentes et toiles}\label{toilerecurr} + +L'idée est d'obtenir une commande pour tracer la \og toile \fg{} permettant d'obtenir -- graphiquement -- les termes d'une suite récurrente définie par une relation $u_{n+1}=f(u_n)$. + +La commande est compatible avec une fonction précédemment définie, mais également avec une courbe type \textit{spline} précédemment définie. + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only} +%dans l'environnement GraphiqueTikz +\TracerToileRecurrence[clés]{fct ou courbe} +\end{tcblisting} + +Le premier argument, \textit{optionnel} et entre \MontreCode{[...]}, contient les \MontreCode{Clés} suivantes : + +\begin{itemize} + \item \MontreCode{Couleur=...} (\MontreCode{black} par défaut) ; + \item \MontreCode{Spline=...} (\MontreCode{false} par défaut) pour spécifier qu'une courbe \textit{spline} est utilisée ; + \item \MontreCode{No=...} (\MontreCode{0} par défaut) est l'indice initial ; + \item \MontreCode{Uno=...} est qui est la valeur du terme initial (à donner obligatoirement !) ; + \item \MontreCode{Nom=...} (\MontreCode{u} par défaut) est le nom de la suite ; + \item \MontreCode{Nb=...} (\MontreCode{5} par défaut) ; + \item \MontreCode{AffTermes=...} (\MontreCode{false} par défaut) qui est un booléen pour afficher les termes ; + \item \MontreCode{AffPointilles=...} (\MontreCode{true} par défaut) pour afficher les pointillés ; + \item \MontreCode{TailleLabel=...} (\MontreCode{\textbackslash small} par défaut) ; + \item \MontreCode{PosLabel=...} (\MontreCode{below} par défaut). +\end{itemize} + +Le second argument, obligatoire et entre \MontreCode{\{...\}} permet de préciser l'objet avec lequel il faut effectuer les tracés (fonction ou nom\_courbe). + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} +\begin{GraphiqueTikz}% + [x=0.75cm,y=0.75cm,Xmin=0,Xmax=10,Xgrille=1,Xgrilles=0.5, + Ymin=0,Ymax=8,Ygrille=1,Ygrilles=0.5] + \TracerAxesGrilles[Elargir=2.5mm,Police=\small]{auto}{auto} + \DefinirCourbe[Couleur=red,Nom=cf,Debut=0,Fin=10,Trace]<f>{sqrt(5*x)+1} + \TracerCourbe[Couleur=blue]{x} + \TracerToileRecurrence[Couleur=orange,No=1,Uno=1]{f} +\end{GraphiqueTikz} +\end{tcblisting} + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} +\begin{GraphiqueTikz}[x=4cm,y=3cm,Xmin=0,Xmax=2.5,Xgrille=1,Xgrilles=0.25, + Ymin=0,Ymax=1.25,Ygrille=0.5,Ygrilles=0.25] + \TracerAxesGrilles[Elargir=2.5mm,Police=\small]{auto}{auto} + \DefinirCourbeInterpo[Nom=interpotest,Couleur=blue,Trace]% + {(0,0)(0.5,0.75)(1,0.25)(2,1)(2.5,0.25)} + \TracerCourbe[Couleur=olive]{x} + \TracerToileRecurrence% + [AffTermes,Couleur=purple,Spline,No=0,Uno=2,PosLabel=above left]% + {interpotest} +\end{GraphiqueTikz} +\end{tcblisting} + +\pagebreak + +\section{Commandes spécifiques des fonctions de densité} + +\subsection{Loi normale}\label{loinormale} + +L'idée est de proposer de quoi travailler avec des lois normales. + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only} +%dans l'environnement GraphiqueTikz +\DefinirLoiNormale[clés]<nom fct>{mu}{sigma} +\TracerLoiNormale[clés]{fct(x)} +\end{tcblisting} + +Les \MontreCode{[clés]}, optionnelles, disponibles sont : + +\smallskip + +\begin{itemize} + \item \MontreCode{Nom} : nom du tracé (\MontreCode{gaussienne} par défaut) ; + \item \MontreCode{Trace} : booléen pour tracer la courbe(\MontreCode{false} par défaut) ; + \item \MontreCode{Couleur} : couleur du tracé, si demandé (\MontreCode{black} par défaut) ; + \item \MontreCode{Debut} : borne inférieure de l'ensemble de définition (\MontreCode{\textbackslash pflxmin} par défaut) ; + \item \MontreCode{Fin} : borne inférieure de l'ensemble de définition (\MontreCode{\textbackslash pflxmax} par défaut) ; + \item \MontreCode{Pas} : pas du tracé (il est déterminé \textit{automatiquement} au départ mais peut être modifié). +\end{itemize} + +À noter que l'axe vertical est à adapter en fonction des paramètres de la loi normale. + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} +\begin{GraphiqueTikz}% + [x=1.25cm,y=15cm,Origx=5,Xmin=5,Xmax=15,Ymin=0,Ymax=0.3, + Ygrille=0.1,Ygrilles=0.05] + \TracerAxesGrilles[Elargir=2.5mm]{auto}{auto} + \DefinirLoiNormale[Nom=gaussienne]<phi>{10}{1.5} + \TracerIntegrale + [Bornes=abs,Couleurs=blue/cyan!50]% + {phi(x)}{7}{13} + \TracerLoiNormale[Couleur=violet,Debut=5,Fin=15]{phi(x)} +\end{GraphiqueTikz} +\end{tcblisting} + +\pagebreak + +\subsection{Loi du khi deux}\label{loikhideux} + +L'idée est de proposer de quoi travailler avec des lois normales. + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only} +%dans l'environnement GraphiqueTikz +\DefinirLoiKhiDeux[clés]<nom fct>{k} +\TracerLoiKhiDeux[clés]{fct(x)} +\end{tcblisting} + +Les \MontreCode{[clés]}, optionnelles, disponibles sont : + +\smallskip + +\begin{itemize} + \item \MontreCode{Nom} : nom du tracé (\MontreCode{gaussienne} par défaut) ; + \item \MontreCode{Trace} : booléen pour tracer la courbe(\MontreCode{false} par défaut) ; + \item \MontreCode{Couleur} : couleur du tracé, si demandé (\MontreCode{black} par défaut) ; + \item \MontreCode{Debut} : borne inférieure de l'ensemble de définition (\MontreCode{\textbackslash pflxmin} par défaut) ; + \item \MontreCode{Fin} : borne inférieure de l'ensemble de définition (\MontreCode{\textbackslash pflxmax} par défaut) ; + \item \MontreCode{Pas} : pas du tracé (il est déterminé \textit{automatiquement} au départ mais peut être modifié). +\end{itemize} + +À noter que l'axe vertical est à adapter en fonction du paramètre de la loi du khi deux. + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} +\begin{GraphiqueTikz}[ + x=1.5cm,y=7.5cm, + Xmin=0,Xmax=8,Xgrille=1,Xgrilles=0.5, + Ymin=0,Ymax=0.5,Ygrille=0.1,Ygrilles=0.05 + ] + \TracerAxesGrilles[Elargir=2.5mm]{auto}{auto} + \DefinirLoiKhiDeux[Couleur=red,Debut=0.25,Trace]<phiA>{1} + \DefinirLoiKhiDeux[Couleur=blue,Trace]<phiB>{2} + \DefinirLoiKhiDeux[Couleur=orange,Trace]<phiC>{3} + \DefinirLoiKhiDeux[Couleur=violet,Trace]<phiD>{4} + \DefinirLoiKhiDeux[Couleur=yellow,Trace]<phiE>{5} + \DefinirLoiKhiDeux[Couleur=teal,Trace]<phiF>{6} +\end{GraphiqueTikz} +\end{tcblisting} + +\subsection{Histogramme pour une loi binomiale}\label{histobinom} + +Il est également possible (d'une manière moins explicite que dans \MontreCode{ProfLycee}) de représenter l'histogramme d'une loi binomiale (\MontreCode{ProfLycee} permet de déterminer les unités automatiquement, ici elles doivent être précisées et connues). + +Il est également possible de rajouter la loi normale \og associée \fg. + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only} +%dans l'environnement GraphiqueTikz +\TracerHistoBinomiale[clés]<nom fct normale>{n}{p} +\end{tcblisting} + +Le premier argument, optionnel et entre \MontreCode{[...]} propose les clés suivantes : + +\begin{itemize} + + \item \MontreCode{Plage} : plage, sous la forme \MontreCode{a-b} du coloriage éventuel ; + \item \MontreCode{CouleurPlage} : couleur de la plage éventuelle ; + \item \MontreCode{ClipX} : restriction de l'axe Ox, sous la forme \MontreCode{a-b} ; + \item \MontreCode{AffNormale} : booléen (\MontreCode{true} par défaut) pour rajouter la loi normale ; + \item \MontreCode{CouleurNormale} : couleur pour la loi normale. +\end{itemize} + +Les arguments obligatoires et entre \MontreCode{\{...\}} permettent de spécifier les paramètres de la loi binomiale. + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} +%les unités ont été déterminées au préalable... +\begin{GraphiqueTikz}[x=0.2cm,y=50cm,Origx=-0.5,Xmin=-0.5,Xmax=50.5, + Xgrille=5,Xgrilles=1,Ymin=0,Ymax=0.12,Ygrille=0.01,Ygrilles=0.001] + \TracerAxesGrilles[Elargir=2.5mm,Police=\small,Grille=false]% + {0,5,...,50}{auto} + \TracerHistoBinomiale{50}{0.4} +\end{GraphiqueTikz} +\end{tcblisting} + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} +%les unités ont été déterminées au préalable... +\begin{GraphiqueTikz}[x=0.5cm,y=100cm,Origx=14.5,Xmin=14.5,Xmax=35.5, + Xgrille=5,Xgrilles=1,Ymin=0,Ymax=0.09,Ygrille=0.01,Ygrilles=0.001] + \TracerAxesGrilles[Elargir=2.5mm,Police=\small,Grille=false]% + {15,20,...,35}{auto} + \TracerHistoBinomiale% + [ClipX=15-35,Plage=18-25,CouleurPlage=teal,AffNormale,CouleurNormale=red]% + {1000}{0.02} +\end{GraphiqueTikz} +\end{tcblisting} + +\pagebreak + +\section{Commandes spécifiques des méthodes intégrales} + +\subsection{Méthodes géométriques}\label{methodesintergrales} + +L'idée est de proposer plusieurs méthodes graphiques pour illustrer graphiquement une intégrale, via : + +\begin{itemize} + \item une méthode des rectangles (Gauche, Droite ou Milieu) ; + \item la méthode des trapèzes. +\end{itemize} + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only} +%dans l'environnement GraphiqueTikz +\RepresenterMethodeIntegrale[clés]<fonction>{a}{b} +\end{tcblisting} + +Les \MontreCode{Clés} disponibles sont : + +\begin{itemize} + \item \MontreCode{Spline} : booléen pour préciser qu'un spline est utilisé, \MontreCode{false} par défaut ; + \item \MontreCode{Couleur} : couleur des tracés, \MontreCode{red} par défaut ; + \item \MontreCode{NbSubDiv} : nombre de subdivisions, \MontreCode{10} par défaut ; + \item \MontreCode{Methode} : méthode géométrique utilisée, parmi parmi \MontreCode{RectanglesGauche / RectanglesDroite / RectanglesMilieu / Trapezes} pour spécifier la méthode utilisée, \MontreCode{RectanglesGauche} par défaut ; + \item \MontreCode{Remplir} : booléen, \MontreCode{true} par défaut, pour remplir les éléments graphiques ; + \item \MontreCode{CouleurRemplissage} : couleur de remplissage, définie par rapport à la couleur principale par défaut ; + \item \MontreCode{Opacite} : opacité, \MontreCode{0.25} par défaut, du remplissage. +\end{itemize} + +\smallskip + +Le deuxième argument, optionnel et entre \MontreCode{<...>}, correspond à la fonction ou le spline \textbf{précédemment définie} ! + +\smallskip + +Les deux derniers arguments, obligatoires, correspondent aux bornes de l'intégrale. + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} +\begin{GraphiqueTikz} + [x=0.66cm,y=0.033cm,Xmin=0,Xmax=21,Xgrille=2,Xgrilles=1, + Ymin=0,Ymax=160,Ygrille=20,Ygrilles=10] + \TracerAxesGrilles[Elargir=2.5mm]{auto}{auto} + \DefinirCourbe[Couleur=red,Nom=cf,Debut=1,Fin=20,Trace]<f>{80*x*exp(-0.2*x)} + \RepresenterMethodeIntegrale[Couleur=teal]<f>{5}{15} +\end{GraphiqueTikz} +\end{tcblisting} + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} +\begin{GraphiqueTikz} + [x=0.66cm,y=0.033cm,Xmin=0,Xmax=21,Xgrille=2,Xgrilles=1, + Ymin=0,Ymax=160,Ygrille=20,Ygrilles=10] + \TracerAxesGrilles[Elargir=2.5mm]{auto}{auto} + \DefinirCourbe[Couleur=red,Nom=cf,Debut=1,Fin=20,Trace]<f>{80*x*exp(-0.2*x)} + \RepresenterMethodeIntegrale + [Methode=RectanglesDroite,Couleur=orange,NbSubDiv=7]<f>{1}{10} +\end{GraphiqueTikz} +\end{tcblisting} -\subsection{Le nuage de points}\label{nuage} +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} +\begin{GraphiqueTikz} + [x=0.66cm,y=0.033cm,Xmin=0,Xmax=21,Xgrille=2,Xgrilles=1, + Ymin=0,Ymax=160,Ygrille=20,Ygrilles=10] + \TracerAxesGrilles[Elargir=2.5mm]{auto}{auto} + \DefinirCourbe[Couleur=red,Nom=cf,Debut=1,Fin=20,Trace]<f>{80*x*exp(-0.2*x)} + \RepresenterMethodeIntegrale + [Methode=RectanglesMilieu,Couleur=yellow,NbSubDiv=25]<f>{1}{20} +\end{GraphiqueTikz} +\end{tcblisting} + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} +\begin{GraphiqueTikz} + [x=0.66cm,y=0.033cm,Xmin=0,Xmax=21,Xgrille=2,Xgrilles=1, + Ymin=0,Ymax=160,Ygrille=20,Ygrilles=10] + \TracerAxesGrilles[Elargir=2.5mm]{auto}{auto} + \DefinirCourbe[Couleur=red,Nom=cf,Debut=1,Fin=20,Trace]<f>{80*x*exp(-0.2*x)} + \RepresenterMethodeIntegrale + [Methode=Trapezes,Couleur=pink,Remplir=false]<f>{1}{20} +\end{GraphiqueTikz} +\end{tcblisting} + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} +\begin{GraphiqueTikz}% + [x=0.8cm,y=1cm,Xmin=-7,Xmax=4,Ymin=0,Ymax=5] + \TracerAxesGrilles[Elargir=2.5mm]{auto}{auto} + \DefinirListeSpline{-6.5/0/2.5§-2/4/0§3.75/0/-1}[\lstsplineB] + \DefinirCourbeSpline[Nom=splinered]{\lstsplineB} + \TracerCourbeSpline[Couleur=red]{\lstsplineB} + \RepresenterMethodeIntegrale[Methode=RectanglesMilieu,Spline,Couleur=teal]<splinered>{-5}{1.25} +\end{GraphiqueTikz} +\end{tcblisting} + +\subsection{Méthode de Monte-Carlo}\label{montecarlo} + +L'idée est de proposer une commande pour simuler un calcul intégral via la méthode de Monte-Carlo. + +Le code se charge de simuler les \textit{tirages}, et les résultats peuvent être stockés dans des macros. + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only} +%dans l'environnement GraphiqueTikz +\SimulerMonteCarlo[clés]<fonction>{nb essais}[\nbptsmcok][\nbptsmcko] +\end{tcblisting} + +Les \MontreCode{Clés} disponibles sont : + +\begin{itemize} + \item \MontreCode{Couleurs} : couleurs des points, \MontreCode{blue/red} par défaut ; + \item \MontreCode{BornesX} : bornes \textit{horizontales} pour la simulation, valant \MontreCode{\textbackslash pflxmin,\textbackslash pflxmax} par défaut ; + \item \MontreCode{BornesY} : bornes \textit{verticales} pour la simulation, valant \MontreCode{\textbackslash pflymin,\textbackslash pflymax} par défaut. +\end{itemize} + +Le deuxième argument, optionnel et entre \MontreCode{<...>}, est la fonction \textbf{précédemment définie} à utiliser. + +\smallskip + +Les deux derniers arguments, optionnels et entre \MontreCode{[...]}, sont les macros dans lesquelles sont stockées les résultats de la simulation. Ces macros sont \MontreCode{\textbackslash nbptsmcok} et \MontreCode{\textbackslash nbptsmcko} par défaut. + +À noter que la macro \MontreCode{\textbackslash nbptsmc} permet de récupérer le nombre de points utilisés. + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} +%avec \sisetup{group-minimum-digits=4} pour le formatage des "milliers" + +\begin{GraphiqueTikz}% + [x=10cm,y=10cm,Xmin=0,Xmax=1,Xgrille=0.1,Xgrilles=0.05, + Ymin=0,Ymax=1,Ygrille=0.1,Ygrilles=0.05] + \TracerAxesGrilles[Elargir=2.5mm,Dernier]{auto}{auto} + \DefinirCourbe[Trace,Couleur=teal,Pas=0.001]<f>{sqrt(1-x^2)} + \SimulerMonteCarlo<f>{5000} +\end{GraphiqueTikz} + +Le nombre de points bleus est de \textcolor{blue}{\num{\nbptsmcok}}, +le nombre de points rouges est de \textcolor{red}{\num{\nbptsmcko}}. + +La proportion de points bleus est de $\frac{\num{\nbptsmcok}}{\num{\nbptsmc}} +\approx \ArrondirNum[4]{\nbptsmcok/\nbptsmc}$ +et $\frac{\pi}{4} \approx \ArrondirNum[4]{pi/4}$. +\end{tcblisting} + +\pagebreak + +\section{Commandes spécifiques des statistiques} + +\subsection{Limitations} + +Compte-tenu des spécificités de \TikZ, il est conseillé de ne pas utiliser de valeurs trop \textit{grandes} au niveau de axes (cela peut coincer avec des année par exemple\ldots), ou bien il faudra \textit{transformer} les valeurs des axes et/ou des données pour que tout s'affiche comme il faut (attention également aux régressions, aux calculs\ldots). + +\subsection{Courbe des ECC/FCC (1 variable)}\label{cbeECC} + +Il est possible de travailler sur une représentation de la courbe des ECC/FCC. + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only} +\TracerCourbeECC[clés]{liste valeurs}{liste effectifs} +\end{tcblisting} + +Le code se charge de déterminer une valeur des paramètres, pour utilisation ultérieure (avec arrondis éventuels car ils sont obtenus par \textit{conversions}) : + +\begin{itemize} + \item le premier quartile, $Q_1$, est stocké dans la macro \MontreCode{\textbackslash ValPremQuartile} ; + \item la médiane, méd, est stocké dans la macro \MontreCode{\textbackslash ValMed} ; + \item le troisième quartile, $Q_3$, est stocké dans la macro \MontreCode{\textbackslash ValTroisQuartile}. +\end{itemize} + +Les \MontreCode{Clés} disponibles sont : + +\begin{itemize} + \item \MontreCode{Couleur=...} : couleur du tracé, \MontreCode{black} par défaut ; + \item \MontreCode{AffParams} : booléen, \MontreCode{true} par défaut, pour afficher les paramètres ; + \item \MontreCode{CouleursParams=...} : couleur des paramètres, \MontreCode{black} par défaut ; + \item \MontreCode{TraitsComplets} : booléen, \MontreCode{true} par défaut, pour afficher les pointillés en entier +\end{itemize} + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} +\begin{GraphiqueTikz}[x=0.15cm,y=0.03cm,Xmin=0,Xmax=75,Xgrille=10,Xgrilles=5, + Ymin=0,Ymax=200,Ygrille=20,Ygrilles=10] + \TracerAxesGrilles[Elargir=2.5mm,Police=\small]{auto}{auto} + \TracerCourbeECC% + [Couleur=blue,CouleursParams={lime!75!black/pink!75!black}, + TraitsComplets=false]% + {0,15,25,35,40,45,55,65,75}% + {15,20,50,30,35,25,15,10} + %ajouts 'manuels' + \PlacerTexte[Couleur=lime!75!black,Police=\small,Position=below]% + {(\ValPremQuartile,0)}{\ArrondirNum[0]{\ValPremQuartile}} + \PlacerTexte[Couleur=lime!75!black,Police=\small,Position=below]% + {(\ValTroisQuartile,0)}{\ArrondirNum[0]{\ValTroisQuartile}} + \PlacerTexte[Couleur=pink!75!black,Police=\small,Position=below]% + {(\ValMed,0)}{\ArrondirNum[0]{\ValMed}} +\end{GraphiqueTikz} + +\end{tcblisting} + +\subsection{Le nuage de points (2 variables)}\label{nuage} En marge des commandes liées aux fonctions, il est également possible de représenter des séries statistiques doubles. @@ -1105,11 +1813,11 @@ Les arguments, obligatoires, permettent de spécifier : %préparation de la fenêtre \TracerAxesGrilles[Elargir=2.5mm,Police=\small]{0,10,...,160}{250,275,...,400} %nuage de points - \TracerNuage[CouleurNuage=red]{0,50,100,140}{275,290,315,350} + \TracerNuage[Style=x,CouleurNuage=red]{0,50,100,140}{275,290,315,350} \end{GraphiqueTikz} \end{tcblisting} -\subsection{La droite de régression}\label{reglin} +\subsection{La droite de régression (2 variables)}\label{reglin} La droite de régression linéaire (obtenue par la méthode des moindres carrés) peut facilement être rajoutée, en utilisant la clé \MontreCode{TracerDroite}. @@ -1134,15 +1842,91 @@ Dans ce cas, de nouvelles clés sont disponibles : \TracerAxesGrilles[Elargir=2.5mm,Police=\small]{0,10,...,160}{250,275,...,400} %nuage et droite \TracerNuage% - [CouleurDroite=red,CouleurDroite=brown,TracerDroite]% + [CouleurNuage=red,CouleurDroite=brown,TracerDroite]% {0,50,100,140}{275,290,315,350} %image \PlacerImages[Couleurs=cyan/magenta,Traits]{d}{120} %antécédents - \PlacerAntecedents[Couleurs=blue/green!50!black,Traits]{reglin}{300} + \PlacerAntecedents[Style=x,Couleurs=blue/green!50!black,Traits]{reglin}{300} \end{GraphiqueTikz} \end{tcblisting} +\subsection{Autres régressions (2 variables)}\label{regressions} + +En partenariat avec le package \MontreCode{xint-regression}, chargé par le package (mais \textit{désactivable} via l'option \MontreCode{[nonxintreg]}), il est possible de travailler sur d'autres types de régression : + +\begin{itemize} + \item linéaire \fbox{$ax+b$} ; + \item quadratique \fbox{$ax^2+bx+c$} ; + \item cubique \fbox{$ax^3+bx^2+cx+d$} ; + \item puissance \fbox{$ax^b$} ; + \item exponentielle \fbox{$ab^x$} ou \fbox{$e^{ax+b}$} ou \fbox{$b e^{ax}$} ou \fbox{$C + be^{ax}$} ; + \item logarithmique \fbox{$a+b\ln(x)$} ; + \item hyperbolique \fbox{$a+\displaystyle\frac{b}{x}$}. +\end{itemize} + +La commande, similaire à celle de définition d'une courbe, est : + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only} +\TracerAjustement[clés]<non fct>{type}<arrondis>{listex}{listey} +\end{tcblisting} + +Les \MontreCode{[clés]} disponibles sont, de manière classique : + +\begin{itemize} + \item \MontreCode{Debut} : borne inférieure de l'ensemble de définition (\MontreCode{\textbackslash pflxmin} par défaut) ; + \item \MontreCode{Fin} : borne inférieure de l'ensemble de définition (\MontreCode{\textbackslash pflxmax} par défaut) ; + \item \MontreCode{Nom} : nom de la courbe (important pour la suite !) ; + \item \MontreCode{Couleur} : couleur du tracé (\MontreCode{black} par défaut) ; + \item \MontreCode{Pas} : pas du tracé (il est déterminé \textit{automatiquement} au départ mais peut être modifié). +\end{itemize} + +\pagebreak + +Le deuxième argument, optionnel et entre \MontreCode{<...>} permet de nommer la fonction de régression. + +Le troisième argument, obligatoire et entre \MontreCode{\{...\}} permet de choisir le type de régression, parmi : + +\begin{itemize} + \item \MontreCode{lin} : linéaire \fbox{$ax+b$} ; + \item \MontreCode{quad} : quadratique \fbox{$ax^2+bx+c$} ; + \item \MontreCode{cub} : cubique \fbox{$ax^3+bx^2+cx+d$} ; + \item \MontreCode{pow} : puissance \fbox{$ax^b$} ; + \item \MontreCode{expab} : exponentielle \fbox{$ab^x$} + \item \MontreCode{hyp} : hyperbolique \fbox{$a+\displaystyle\frac{b}{x}$} ; + \item \MontreCode{log} : logarithmique \fbox{$a+b\ln(x)$} ; + \item \MontreCode{exp} : exponentielle \fbox{$e^{ax+b}$} ; + \item \MontreCode{expalt} : exponentielle \fbox{$be^{ax}$} ; + \item \MontreCode{expoff=C} : exponentielle \fbox{$C + be^{ax}$}. +\end{itemize} + +Le quatrième argument, optionnel et entre \MontreCode{<...>} permet de spécifier le ou les arrondis pour les coefficients de la fonction de régression. + +Les deux derniers arguments sont les listes des valeurs de X et de Y. + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} +\def\LISTEXX{0,50,100,140}\def\LISTEYY{275,290,315,350}% +ListeX := \LISTEXX\\ +ListeY := \LISTEYY + +\begin{GraphiqueTikz} + [x=0.05cm,y=0.04cm,Xmin=0,Xmax=160,Xgrille=20,Xgrilles=10, + Origy=250,Ymin=250,Ymax=400,Ygrille=25,Ygrilles=5] + %préparation de la fenêtre + \TracerAxesGrilles[Elargir=2.5mm,Police=\footnotesize]{auto}{auto} + %nuage de points + \TracerNuage[Style=o,CouleurNuage=red]{\LISTEXX}{\LISTEYY} + %ajustement expoffset + \TracerAjustement[Couleur=blue,Nom=ajust]<ajust>{expoff=250}{\LISTEXX}{\LISTEYY} + %exploitations + \PlacerImages[Couleurs=cyan/magenta,Traits]{ajust}{80} + \PlacerAntecedents[Style=x,Couleurs=blue/green!50!black,Traits]{ajust}{325} +\end{GraphiqueTikz} + +\xintexpoffreg[offset=250,round=3/1]{\LISTEXX}{\LISTEYY}% +On obtient $y=250+\num{\expregoffb}\text{e}^{\num{\expregoffa}x}$ +\end{tcblisting} + \pagebreak \section{Codes source des exemples de la page d'accueil} @@ -1150,10 +1934,10 @@ Dans ce cas, de nouvelles clés sont disponibles : \begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} \begin{GraphiqueTikz}[x=0.85cm,y=0.35cm,Xmin=0,Xmax=10,Ymin=0,Ymax=16] %préparation de la fenêtre - \TracerAxesGrilles[Elargir=2.5mm,Police=\small]{0,1,...,10}{0,2,...,16} + \TracerAxesGrilles[Derriere,Elargir=2.5mm,Police=\small]{0,1,...,10}{0,2,...,16} %déf des fonctions avec nom courbe + nom fonction + expression (tracés à la fin !) - \DefinirFonction[Nom=cf]<f>{3*x-6} - \DefinirFonction[Nom=cg]<g>{-(x-6)^2+12} + \DefinirCourbe[Nom=cf]<f>{3*x-6} + \DefinirCourbe[Nom=cg]<g>{-(x-6)^2+12} %antécédents et intersection \TrouverIntersections[Aff=false,Nom=K]{cf}{cg} \TrouverAntecedents[AffDroite,Couleur=orange,Nom=I]{cg}{8} @@ -1164,7 +1948,7 @@ Dans ce cas, de nouvelles clés sont disponibles : {g(x)}% {(I-2)}{(J-2)} %intégrale entre les deux courbes - \TracerIntegrale[Bornes=noeuds,Type=entre]% + \TracerIntegrale[Bornes=noeuds,Type=fct/fct]% {f(x)}[g(x)]% {(K-1)}{(K-2)} %tracé des courbes et des points @@ -1177,7 +1961,7 @@ Dans ce cas, de nouvelles clés sont disponibles : %images \PlacerImages[Couleurs=cyan]{g}{7,7.25,7.5} %surimpression des axes - \TracerAxesGrilles[Grads=false,Grille=false,Elargir=2.5mm]{0,1,...,10}{0,2,...,16} + \TracerAxesGrilles[Devant,Elargir=2.5mm]{0,1,...,10}{0,2,...,16} \end{GraphiqueTikz} \end{tcblisting} @@ -1189,18 +1973,16 @@ Dans ce cas, de nouvelles clés sont disponibles : Xmin=0,Xmax=3.5,Xgrille=pi/12,Xgrilles=pi/24, Ymin=-1.05,Ymax=1.05,Ygrille=0.2,Ygrilles=0.05] %préparation de la fenêtre - \TracerAxesGrilles[Grads=false,Elargir=2.5mm,Format=ntrig/nsqrt]% - {pi/6,pi/4,pi/3,pi/2,2*pi/3,3*pi/4,5*pi/6,pi} - {0,sqrt(2)/2,1/2,sqrt(3)/2,1,-1,-sqrt(3)/2,-1/2,-sqrt(2)/2} + \TracerAxesGrilles[Derriere,Elargir=2.5mm,Format=ntrig/nsqrt]{}{} %rajouter des valeurs \RajouterValeursAxeX{0.25,1.4,3.3}{\num{0.25},\num{1.4},\num{3.3}} %fonction trigo (déf + tracé) - \DefinirFonction[Nom=ccos,Debut=0,Fin=pi]<fcos>{cos(x)} - \DefinirFonction[Nom=csin,Debut=0,Fin=pi]<fsin>{sin(x)} + \DefinirCourbe[Nom=ccos,Debut=0,Fin=pi]<fcos>{cos(x)} + \DefinirCourbe[Nom=csin,Debut=0,Fin=pi]<fsin>{sin(x)} %intégrale \TrouverIntersections[Aff=false,Nom=JKL]{ccos}{csin} \TracerIntegrale% - [Bornes=noeud/abs,Type=entre,Couleurs=cyan/cyan!50]% + [Bornes=noeud/abs,Type=fct/fct,Couleurs=cyan/cyan!50]% {fsin(x)}[fcos(x)]% {(JKL-1)}{pi} %tracé des courbes @@ -1212,7 +1994,7 @@ Dans ce cas, de nouvelles clés sont disponibles : \PlacerAntecedents[Couleurs=orange/orange!50!black,Traits]{csin}{sqrt(2)/2} \PlacerAntecedents[Couleurs=green!50!black/green,Traits]{csin}{sqrt(3)/2} %surimpression axes - \TracerAxesGrilles[Grille=false,Elargir=2.5mm,Format=ntrig/nsqrt]% + \TracerAxesGrilles[Devant,Format=ntrig/nsqrt]% {pi/6,pi/4,pi/3,pi/2,2*pi/3,3*pi/4,5*pi/6,pi} {0,sqrt(2)/2,1/2,sqrt(3)/2,1,-1,-sqrt(3)/2,-1/2,-sqrt(2)/2} \end{GraphiqueTikz} @@ -1326,22 +2108,28 @@ $\begin{cases} Les commandes disponibles sont : -\NewDocumentCommand\lstcmd{ m m m}{% - \item[\texttt{#1}] : \mintinline{latex}|#2|\hfill{}page \pageref{#3} +\NewDocumentCommand\lstcmd{ m m m }{% + \item[\footnotesize\texttt{#1}]{\footnotesize : \mintinline{latex}|#2|\hfill{}page \pageref{#3}} } -\begin{description} +\begin{description}[noitemsep] \lstcmd{environnement~~}{\begin{GraphiqueTikz}...\end{GraphiqueTikz}}{creaenvt} \lstcmd{axes et grilles}{\TracerAxesGrille}{creaaxesgr} \lstcmd{aj val axes X~~}{\RajouterValeursAxeX}{ajoutvals} \lstcmd{aj val axes Y~~}{\RajouterValeursAxeY}{ajoutvals} - \lstcmd{def fonction~~~}{\DefinirFonction}{deftracfct} + \lstcmd{def fonction~~~}{\DefinirCourbe}{deftracfct} \lstcmd{tracé courbe~~~}{\TracerCourbe}{deftracfct} \lstcmd{def interpo~~~~}{\DefinirCourbeInterpo}{deftracinterpo} \lstcmd{tracé interpo~~}{\TracerCourbeInterpo}{deftracinterpo} - \lstcmd{def spline~~~~~}{\DefinirSpline}{deftracfctspline} - \lstcmd{tracé spline~~~}{\TracerSpline}{deftracfctspline} + \lstcmd{def spline~~~~~}{\DefinirCourbeSpline}{deftracfctspline} + \lstcmd{tracé spline~~~}{\TracerCourbeSpline}{deftracfctspline} + \lstcmd{tracé droite~~~}{\TracerDroite}{tracdroite} + \lstcmd{asymptote vert~}{\TracerAsymptote}{tracdroite} \lstcmd{def points~~~~~}{\DefinirPts}{defpts} + \lstcmd{def image~~~~~~}{\DefinirImage}{defpts} + \lstcmd{marq pts~~~~~~~}{\MarquerPts}{markpts} + \lstcmd{placer txt~~~~~}{\PlacerTexte}{placetxt} + \lstcmd{pts discont~~~~}{\AfficherPtsDiscont}{ptsdiscont} \lstcmd{récup absc~~~~~}{\RecupererAbscisse}{recupcoordo} \lstcmd{récup ordo~~~~~}{\RecupererOrdonnee}{recupcoordo} \lstcmd{récup coordos~~}{\RecupererCoordonnees}{recupcoordo} @@ -1349,21 +2137,161 @@ Les commandes disponibles sont : \lstcmd{antécédents~~~~}{\TrouverAntecedents}{defanteced} \lstcmd{antécédents~~~~}{\PlacerAntecedents}{tracanteced} \lstcmd{intersection~~~}{\TrouverIntersections}{intersect} + \lstcmd{maximum~~~~~~~~}{\TrouverMaximum}{maximum} + \lstcmd{minimum~~~~~~~~}{\TrouverMinimum}{minimum} \lstcmd{intégrale~~~~~~}{\TracerIntegrale}{integr} + \lstcmd{méthodes int~~~}{\RepresenterMethodeIntegrale}{methodesintergrales} + \lstcmd{Monte-Carlo~~~~}{\SimulerMonteCarlo}{montecarlo} \lstcmd{tangente~~~~~~~}{\TracerTangente}{tgte} + \lstcmd{toile récurr~~~}{\TracerToileRecurrence}{toilerecurr} + \lstcmd{loi normale~~~~}{\DefinirLoiNormale}{loinormale} + \lstcmd{loi normale~~~~}{\TracerLoiNormale}{loinormale} + \lstcmd{loi khideux~~~~}{\DefinirLoiKhiDeux}{loikhideux} + \lstcmd{loi khideux~~~~}{\TracerLoiKhiDeux}{loikhideux} + \lstcmd{loi binom~~~~~~}{\TracerHistoBinomiale}{histobinom} + \lstcmd{courbe ECC~~~~~}{\TracerCourbeECC}{cbeECC} \lstcmd{stats 2 var~~~~}{\TracerNuage}{nuage} + \lstcmd{regressions~~~~}{\TracerAjustement}{regressions} \lstcmd{arrondi~~~~~~~~}{\ArrondirNum}{numarrond} \lstcmd{nb aléat~~~~~~~}{\ChoisirNbAlea}{nbalea} \end{description} +\newpage + +\section{Quelques commandes liées à pgfplots} + +\subsection{Introduction} + +Pour des graphiques avec des fenêtres d'affichage \textit{particulières}, il est fort possible que les commandes \textit{classiques} de \MontreCode{tkz-grapheur} coincent, avec notamment des \MontreCode{dimension tool large}$\ldots$ + +\smallskip + +Dans ce cas, il est possible d'utiliser plutôt l'environnement \MontreCode{axis} de \MontreCode{pgfplots} qui est plus palier ce problème \textit{interne}$\ldots$ + +\MontreCode{tkz-grapheur} ne fournit pas d'environnement dédié pour la création de la fenêtre, mais quelques commandes spécifiques ont été intégrées pour certains points, avec un fonctionnement assez semblable (donc se référer aux paragraphes précédents) à celui des commandes \textit{classiques}. + +\subsection{Macros spécifique pgfplots/axis} + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only} +%déterminer l'intersection de deux objets préalablement définis via [name path] +\findintersectionspgf[base nom nœuds]{objet1}{objet2}[macro nb total] + +%extraction (globale, non limitée à l'environnement) et stockage de coordonnées +\gextractxnodepgf{nœud}[\myxcoord] +\gextractynodepgf{nœud}[\myycoord] +\gextractxynodepgf{nœud}[\myxcoord][\myycoord] + +%domaine entre courbes +\fillbetweencurvespgf[options tikz]{courbe1}{courbe2}<options soft domain> + +%splines cubiques +\addplotspline(*)[options tikz]<coeffs>{liste des points support}[\monspline] +\end{tcblisting} + +\subsection{Exemple illustré} + +\begin{tcblisting}{listing only,listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} +%\usepackage{alphalph} + +\begin{tikzpicture} + \begin{axis}% + [% + axis y line=center,axis x line=middle, %axes + axis line style={line width=0.8pt,-latex}, + x=0.33cm,y=0.55cm,xmin=1985,xmax=2030,ymin=56,ymax=70, %unités + grid=both,xtick distance=5,ytick distance=2, %grillep + minor x tick num=4,minor y tick num=1, %grilles + extra x ticks={1985},extra x tick style={grid=none}, %origx + extra y ticks={56},extra y tick style={grid=none}, %origy + x tick label style={/pgf/number format/.cd,use comma,1000 sep={}}, %année + major tick length={2*3pt},minor tick length={1.5*3pt}, %grads + every tick/.style={line width=0.8pt},enlargelimits=false, %style + enlarge x limits={abs=2.5mm,upper},enlarge y limits={abs=2.5mm,upper}, %élargir + ] + %spline + y=66 + \addplot[name path global=eqtest,mark=none,red,line width=1.05pt,domain=1985:2030] {66} ; + \def\LISTETEST{1985/60/0§1995/68/0§2015/58/0§2025/69/0§2030/62/-2} + \addplotspline*[line width=1.05pt,violet,name path global=splinecubtest]{\LISTETEST}[\monsplineviolet] + %recherche d'antécédents + \findintersectionspgf[MonItsc]{eqtest}{splinecubtest} + %extraction des coordonnées + \gextractxnodepgf{(MonItsc-1)}[\xMonItscA] + \gextractxnodepgf{(MonItsc-2)}[\xMonItscB] + \gextractxnodepgf{(MonItsc-3)}[\xMonItscC] + \gextractxnodepgf{(MonItsc-4)}[\xMonItscD] + %visualisation + \xintFor* #1 in {\xintSeq{1}{4}}\do{% + \draw[line width=0.9pt,densely dashed,olive,->,>=latex] (MonItsc-#1) -- (\csname xMonItsc\AlphAlph{#1}\endcsname,56) ; + \filldraw[olive] (MonItsc-#1) circle[radius=1.75pt] ; + } + %intégrale + \path [name path=xaxis] (1985,56) -- (2030,56); + \fillbetweencurvespgf{splinecubtest}{xaxis}<domain={\xMonItscB:\xMonItscA}> + \fillbetweencurvespgf{splinecubtest}{xaxis}<domain={\xMonItscD:\xMonItscC}> + \end{axis} +\end{tikzpicture} + +Les solutions de $f(x)=66$ sont d'environ \ArrondirNum*[0]{\xMonItscA} \&\ \ArrondirNum*[0]{\xMonItscB} \&\ \ArrondirNum*[0]{\xMonItscC} \&\ \ArrondirNum*[0]{\xMonItscD}. +\end{tcblisting} + +\begin{tikzpicture} + \begin{axis}% + [% + axis y line=center,axis x line=middle, %axes + axis line style={line width=0.8pt,-latex}, + x=0.33cm,y=0.55cm,xmin=1985,xmax=2030,ymin=56,ymax=70, %unités + grid=both,xtick distance=5,ytick distance=2, %grillep + minor x tick num=4,minor y tick num=1, %grilles + extra x ticks={1985},extra x tick style={grid=none}, %originex + extra y ticks={56},extra y tick style={grid=none}, %originey + x tick label style={/pgf/number format/.cd,use comma,1000 sep={}}, %année + major tick length={2*3pt},minor tick length={1.5*3pt}, %grads + every tick/.style={line width=0.8pt},enlargelimits=false, %style + enlarge x limits={abs=2.5mm,upper},enlarge y limits={abs=2.5mm,upper}, %élargir + ] + %spline + y=66 + \addplot[name path global=eqtest,mark=none,red,line width=1.05pt,domain=1985:2030] {66} ; + \def\LISTETEST{1985/60/0§1995/68/0§2015/58/0§2025/69/0§2030/62/-2} + \addplotspline*[line width=1.05pt,violet,name path global=splinecubtest]{\LISTETEST}[\monsplineviolet] + %recherche d'antécédents + \findintersectionspgf[MonItsc]{eqtest}{splinecubtest} + %extraction des coordonnées + \gextractxnodepgf{(MonItsc-1)}[\xMonItscA] + \gextractxnodepgf{(MonItsc-2)}[\xMonItscB] + \gextractxnodepgf{(MonItsc-3)}[\xMonItscC] + \gextractxnodepgf{(MonItsc-4)}[\xMonItscD] + %visualisation + \xintFor* #1 in {\xintSeq{1}{4}}\do{% + \draw[line width=0.9pt,densely dashed,olive,->,>=latex] (MonItsc-#1) -- (\csname xMonItsc\AlphAlph{#1}\endcsname,56) ; + \filldraw[olive] (MonItsc-#1) circle[radius=1.75pt] ; + } + %intégrale + \path [name path=xaxis] (1985,56) -- (2030,56); + \fillbetweencurvespgf{splinecubtest}{xaxis}<domain={\xMonItscB:\xMonItscA}> + \fillbetweencurvespgf{splinecubtest}{xaxis}<domain={\xMonItscD:\xMonItscC}> + \end{axis} +\end{tikzpicture} + +Les solutions de $f(x)=66$ sont d'environ \ArrondirNum*[0]{\xMonItscA} \&\ \ArrondirNum*[0]{\xMonItscB} \&\ \ArrondirNum*[0]{\xMonItscC} \&\ \ArrondirNum*[0]{\xMonItscD}. + \pagebreak \section{Historique} -\begin{quote} +{\footnotesize \begin{quote} \begin{verbatim} +0.2.0 : Méthode alternative des splines cubiques + commandes auxiliaires pgfplots +0.1.9 : Correction d'un bug avec la détermination d'unités +0.1.8 : Courbes ECC/FCC + Toile récurrence + Points discontinuité + HistoBinom +0.1.7 : Méthodes intégrales avec des splines +0.1.6 : Asymptote verticale + Méthodes intégrales (géom + Monte Carlo) +0.1.5 : Correction d'un bug sur les rajouts de valeurs + Nœud pour une image + [en] version ! +0.1.4 : Placement de texte +0.1.3 : Ajout de régressions avec le package xint-regression +0.1.2 : Droites + Extremums +0.1.1 : Densité loi normale et khi deux + Marquage points + Améliorations 0.1.0 : Version initiale \end{verbatim} -\end{quote} +\end{quote}} \end{document}
\ No newline at end of file diff --git a/graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-examples-integrals.pdf b/graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-examples-integrals.pdf Binary files differnew file mode 100644 index 0000000000..917caaab19 --- /dev/null +++ b/graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-examples-integrals.pdf diff --git a/graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-examples-integrals.tex b/graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-examples-integrals.tex new file mode 100644 index 0000000000..068ba103eb --- /dev/null +++ b/graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-examples-integrals.tex @@ -0,0 +1,251 @@ +% !TeX TXS-program:compile = txs:///arara +% arara: pdflatex: {shell: yes, synctex: no, interaction: batchmode} + +\documentclass[a4paper,english,11pt]{article} +\usepackage[margin=1cm,includefoot]{geometry} +\usepackage[english]{tkz-grapheur} +\usepackage{tcolorbox} +\tcbuselibrary{skins,minted} +\usepackage{babel} + +\begin{document} + +\part*{Integrals examples} + +\section{Below cruve, by default} + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} +\begin{GraphTikz}% + [x=0.8cm,y=1cm,Xmin=-7,Xmax=4,Ymin=-3,Ymax=5] + \DrawAxisGrids[Behind,Enlarge=2.5mm]{-7,-6,...,4}{-3,-2,...,5} + \DefineCurve[Name=ch]<h>{0.25*(x+2)^2+1} + \DrawIntegral% + [Colors=blue/cyan,Style=fill]% + {h(x)} %formula + {-5.25}{1.5} + \DrawCurve[Color=red]{h(x)} + \DrawAxisGrids[Above,Enlarge=2.5mm]{-7,-6,...,4}{-3,-2,...,5} +\end{GraphTikz} +\end{tcblisting} + +\section{Behind interpolation curve} + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} +\begin{GraphTikz}% + [x=0.8cm,y=1cm,Xmin=-7,Xmax=4,Ymin=-3,Ymax=5] + \DrawAxisGrids[Grads=false,Enlarge=2.5mm]{-7,-6,...,4}{-3,-2,...,5} + \DefineLstInterpol{(-6,4)(-2,-2)(3,3.5)}[\interpoA] + \DefineInterpoCurve[Name=interpotest,Tension=1.05]{\interpoA} + \DrawIntegral% + [NameInterpo=interpotest,Colors=blue/cyan,Style=fill,Type=itp,Tension=1.05]% + {\interpoA} %pointsinterpo + {-5.25}{1.5} + \DrawInterpoCurve[Color=red,Tension=1.05]{\interpoA} + \DrawAxisGrids[Grid=false,Enlarge=2.5mm]{-7,-6,...,4}{-3,-2,...,5} +\end{GraphTikz} +\end{tcblisting} + +\section{Behind cubic spline} + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} +\begin{GraphTikz}% + [x=0.8cm,y=1cm,Xmin=-7,Xmax=4,Ymin=-3,Ymax=5] + \DrawAxisGrids[Grads=false,Enlarge=2.5mm]{-7,-6,...,4}{-3,-2,...,5} + \DefineLstSpline{-6/4/-2§-5/2/-2§-4/0/-2§-2/-2/0§1/2/2§3/3.5/0.5}[\lstsplineA] + \DefineSplineCurve[Name=splinetest]{\lstsplineA}<\SplineTeal> + \DrawIntegral% + [NameSpline=\SplineTeal,Type=spl,Colors=blue/purple,Style=hatch]% + {splinetest} %namesplinecurve + {-5}{2} + \DrawSplineCurve[Color=teal]{\lstsplineA} + \DrawAxisGrids[Grid=false,Enlarge=2.5mm]{-7,-6,...,4}{-3,-2,...,5} +\end{GraphTikz} +\end{tcblisting} + +\section{Between curves} + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} +\begin{GraphTikz}% + [x=0.8cm,y=1cm,Xmin=-7,Xmax=4,Ymin=-3,Ymax=5] + \DrawAxisGrids[Grads=false,Enlarge=2.5mm]{-7,-6,...,4}{-3,-2,...,5} + \DefineCurve[Name=ch]<h>{0.25*(x+2)^2-1} + \DefineCurve[Name=ck]<k>{-0.25*x+1} + \FindIntersections[Name=ITSC,Disp=false]{ch}{ck} + \DrawIntegral% + [Colors=olive/pink,Style=fill,Type=fct/fct,Bounds=node/abs]% + {h(x)}[k(x)] %formules + {(ITSC-1)}{1.5} + \DrawCurve[Color=red]{h(x)} + \DrawCurve[Color=blue]{k(x)} + \DrawAxisGrids[Grid=false,Enlarge=2.5mm]{-7,-6,...,4}{-3,-2,...,5} +\end{GraphTikz} +\end{tcblisting} + +\section{Between splines} + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} +\begin{GraphTikz}% + [x=0.8cm,y=1cm,Xmin=-7,Xmax=4,Ymin=-3,Ymax=5] + \DrawAxisGrids[Grads=false,Enlarge=2.5mm]{-7,-6,...,4}{-3,-2,...,5} + \DefineLstSpline{-6/4/-2§-5/2/-2§-4/0/-2§-2/-2/0§1/2/2§3/3.5/0.5}[\lstsplineA] + \DefineLstSpline{-6/-2/3§-2/4/0§3/-1/0}[\lstsplineB] + \DefineSplineCurve[Name=splinetestolive]{\lstsplineA}<\SplineOlive> + \DefineSplineCurve[Name=splinetestteal]{\lstsplineB}<\SplineTeal> + \FindIntersections[Name=ITT,Disp=false]{splinetestteal}{splinetestolive} + \DrawIntegral% + [NameSpline=\SplineTeal,NameSplineB=\SplineOlive,Type=spl/spl,Colors=blue/purple,Bounds=nodes]% + {splinetestolive} %Namecourbespline + [splinetestteal] %Namecourbespline + {(ITT-1)}{(ITT-2)} + \DrawSplineCurve[Color=teal]{\lstsplineA} + \DrawSplineCurve[Color=olive]{\lstsplineB} + \DrawAxisGrids[Grid=false,Enlarge=2.5mm]{-7,-6,...,4}{-3,-2,...,5} +\end{GraphTikz} +\end{tcblisting} + +\section{Between interpolations} + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} +\begin{GraphTikz}% + [x=0.8cm,y=1cm,Xmin=-7,Xmax=4,Ymin=-3,Ymax=5] + \DrawAxisGrids[Grads=false,Enlarge=2.5mm]{-7,-6,...,4}{-3,-2,...,5} + \DefineLstInterpol{(-6,4)(-2,-2)(3,3.5)}[\interpoA] + \DefineInterpoCurve[Name=interpotest]{\interpoA} + \DefineLstInterpol{(-6,-2)(-1,4)(3,0)}[\interpoB] + \DefineInterpoCurve[Name=interpotesta]{\interpoB} + \DrawIntegral% + [NameInterpo=interpotesta,NameInterpoB=interpotest,Type=itp/itp,Colors=olive/pink]% + {\interpoB} %pointsinterpo + [\interpoA] %pointsinterpo + {-2}{1} + \DrawInterpoCurve[Color=red]{\interpoA} + \DrawInterpoCurve[Color=blue]{\interpoB} + \DrawAxisGrids[Grid=false,Enlarge=2.5mm]{-7,-6,...,4}{-3,-2,...,5} +\end{GraphTikz} +\end{tcblisting} + +\section{Betweend function and spline} + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} +\begin{GraphTikz}% + [x=0.8cm,y=1cm,Xmin=-7,Xmax=4,Ymin=-3,Ymax=5] + \DrawAxisGrids[Grads=false,Enlarge=2.5mm]{-7,-6,...,4}{-3,-2,...,5} + \DefineCurve[Name=ch]<h>{-0.25*(x+2)^2+3.5} + \DefineLstSpline{-6/4/-2§-5/2/-2§-4/0/-2§-2/-2/0§1/2/2§3/3.5/0.5}[\lstsplineA] + \DefineSplineCurve[Name=splineblue]{\lstsplineA}<\Splineblue> + \DrawIntegral% + [NameSplineB=\Splineblue,Type=fct/spl,Colors=olive/pink]% + {h(x)} %formule + [splineblue] %Namecourbespline + {-3}{0} + \DrawCurve[Color=red]{h(x)} + \DrawSplineCurve[Color=blue]{\lstsplineA} + \DrawAxisGrids[Grid=false,Enlarge=2.5mm]{-7,-6,...,4}{-3,-2,...,5} +\end{GraphTikz} +\end{tcblisting} + +\section{Between spline and function} + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} +\begin{GraphTikz}% + [x=0.8cm,y=1cm,Xmin=-7,Xmax=4,Ymin=-3,Ymax=5] + \DrawAxisGrids[Grads=false,Enlarge=2.5mm]{-7,-6,...,4}{-3,-2,...,5} + \DefineCurve[Name=ch]<h>{0.25*(x+2)^2-2} + \DefineLstSpline{-6/4/2§-5/-2/-2§-4/0/2§-2/2/0§1/-2/-2§3/3.5/-0.5}[\lstsplineA] + \DefineSplineCurve[Name=splineblue]{\lstsplineA}<\Splineblue> + \DrawIntegral% + [NameSpline=\Splineblue,Type=spl/fct,Colors=olive/pink]% + {splineblue} %Namecourbespline + [h(x)] %formule + {-3}{-1} + \DrawCurve[Color=red]{h(x)} + \DrawSplineCurve[Color=blue]{\lstsplineA} + \DrawAxisGrids[Grid=false,Enlarge=2.5mm]{-7,-6,...,4}{-3,-2,...,5} +\end{GraphTikz} +\end{tcblisting} + +\section{Between function and interpo} + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} +\begin{GraphTikz}% + [x=0.8cm,y=1cm,Xmin=-7,Xmax=4,Ymin=-3,Ymax=5] + \DrawAxisGrids[Grads=false,Enlarge=2.5mm]{-7,-6,...,4}{-3,-2,...,5} + \DefineCurve[Name=cm]<m>{-0.25*(x+2)^2+4} + \DefineLstInterpol{(-6,4)(-5,-2)(-2,1)(1,-2)(3,3)}[\interpoB] + \DefineInterpoCurve[Name=interpotestb]{\interpoB} + \DrawIntegral% + [NameInterpoB=interpotestb,Type=fct/itp,Colors=olive/pink]% + {m(x)} %formule + [\interpoB] %pointsinterpo + {-4}{1} + \DrawCurve[Color=red]{m(x)} + \DrawInterpoCurve[Color=blue]{\interpoB} + \DrawAxisGrids[Grid=false,Enlarge=2.5mm]{-7,-6,...,4}{-3,-2,...,5} +\end{GraphTikz} +\end{tcblisting} + +\section{Between interpo and function} + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} +\begin{GraphTikz}% + [x=0.8cm,y=1cm,Xmin=-7,Xmax=4,Ymin=-3,Ymax=5] + \DrawAxisGrids[Grads=false,Enlarge=2.5mm]{-7,-6,...,4}{-3,-2,...,5} + \DefineCurve[Name=courbeQ]<q>{0.25*(x+2)^2-2.5} + \DefineLstInterpol{(-6,-2)(-5,4)(-2,-1)(1,2)(3,-2)}[\interpoA] + \DefineInterpoCurve[Name=interpotest]{\interpoA} + \FindIntersections[Name=FGH,Disp]{interpotest}{courbeQ} + \DrawIntegral% + [NameInterpo=interpotest,Type=itp/fct,Colors=olive/pink,Bounds=nodes]% + {\interpoA} %pointsinterpo + [q(x)] %formule + {(FGH-1)}{(FGH-2)} + \DrawCurve[Color=red]{q(x)} + \DrawInterpoCurve[Color=blue]{\interpoA} + \DrawAxisGrids[Grid=false,Enlarge=2.5mm]{-7,-6,...,4}{-3,-2,...,5} +\end{GraphTikz} +\end{tcblisting} + +\section{Between spline and interpo} + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} +\begin{GraphTikz}% + [x=0.8cm,y=1cm,Xmin=-7,Xmax=4,Ymin=-3,Ymax=5] + \DrawAxisGrids[Grads=false,Enlarge=2.5mm]{-7,-6,...,4}{-3,-2,...,5} + \DefineLstSpline{-6/-2/2§-3/4/0§3/-2/0}[\lstsplineA] + \DefineSplineCurve[Name=splinered]{\lstsplineA}<\Splinered> + \DefineLstInterpol{(-6,4)(-5,-2)(-2,1)(1,-2)(3,3)}[\interpoB] + \DefineInterpoCurve[Name=interpotestb]{\interpoB} + \DrawIntegral% + [NameInterpoB=interpotestb,NameSpline=\Splinered,Type=spl/itp,Colors=olive/pink]% + {splinered} %Namecourbespline + [\interpoB] %pointsinterpo + {-4}{-2} + \DrawSplineCurve[Color=red]{\lstsplineA} + \DrawInterpoCurve[Color=blue]{\interpoB} + \DrawAxisGrids[Grid=false,Enlarge=2.5mm]{-7,-6,...,4}{-3,-2,...,5} +\end{GraphTikz} +\end{tcblisting} + +\section{Between interpo and spline} + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} +\begin{GraphTikz}% + [x=0.8cm,y=1cm,Xmin=-7,Xmax=4,Ymin=-3,Ymax=5] + \DrawAxisGrids[Grads=false,Enlarge=2.5mm]{-7,-6,...,4}{-3,-2,...,5} + \DefineLstSpline{-6/4/-2§-3/-2.25/0§3/3/0}[\lstsplineB] + \DefineSplineCurve[Name=splineblue]{\lstsplineB}<\Splineblue> + \DefineLstInterpol{(-6,-2)(-5,4)(-2,-1)(1,2)(3,-2.5)}[\interpoA] + \DefineInterpoCurve[Name=interpotest]{\interpoA} + \FindIntersections[Name=UIO,Disp]{interpotest}{splineblue} + \DrawIntegral% + [NameInterpo=interpotest,NameSplineB=\Splineblue,Type=itp/spl,Colors=olive/pink,Bounds=nodes]% + {\interpoA} %pointsinterpo + [splineblue] %Namecourbespline + {(UIO-1)}{(UIO-2)} + \DrawSplineCurve[Color=blue]{\lstsplineB} + \DrawInterpoCurve[Color=red]{\interpoA} + \DrawAxisGrids[Grid=false,Enlarge=2.5mm]{-7,-6,...,4}{-3,-2,...,5} +\end{GraphTikz} +\end{tcblisting} + +\end{document}
\ No newline at end of file diff --git a/graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-exemples-integrales.pdf b/graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-exemples-integrales.pdf Binary files differnew file mode 100644 index 0000000000..985d09c617 --- /dev/null +++ b/graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-exemples-integrales.pdf diff --git a/graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-exemples-integrales.tex b/graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-exemples-integrales.tex new file mode 100644 index 0000000000..58fc6473f8 --- /dev/null +++ b/graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-exemples-integrales.tex @@ -0,0 +1,251 @@ +% !TeX TXS-program:compile = txs:///arara +% arara: pdflatex: {shell: yes, synctex: no, interaction: batchmode} + +\documentclass[a4paper,french,11pt]{article} +\usepackage[margin=1cm,includefoot]{geometry} +\usepackage{tkz-grapheur} +\usepackage{tcolorbox} +\tcbuselibrary{skins,minted} +\usepackage{babel} + +\begin{document} + +\part*{Exemples des différents cas d'intégrales} + +\section{Sous courbe, par défaut} + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} +\begin{GraphiqueTikz}% + [x=0.8cm,y=1cm,Xmin=-7,Xmax=4,Ymin=-3,Ymax=5] + \TracerAxesGrilles[Derriere,Elargir=2.5mm]{-7,-6,...,4}{-3,-2,...,5} + \DefinirCourbe[Nom=ch]<h>{0.25*(x+2)^2+1} + \TracerIntegrale% + [Couleurs=blue/cyan,Style=remplissage]% + {h(x)} %formule + {-5.25}{1.5} + \TracerCourbe[Couleur=red]{h(x)} + \TracerAxesGrilles[Devant,Elargir=2.5mm]{-7,-6,...,4}{-3,-2,...,5} +\end{GraphiqueTikz} +\end{tcblisting} + +\section{Sous courbe d'interpolation} + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} +\begin{GraphiqueTikz}% + [x=0.8cm,y=1cm,Xmin=-7,Xmax=4,Ymin=-3,Ymax=5] + \TracerAxesGrilles[Grads=false,Elargir=2.5mm]{-7,-6,...,4}{-3,-2,...,5} + \DefinirListeInterpo{(-6,4)(-2,-2)(3,3.5)}[\interpoA] + \DefinirCourbeInterpo[Nom=interpotest,Tension=1.05]{\interpoA} + \TracerIntegrale% + [NomInterpo=interpotest,Couleurs=blue/cyan,Style=remplissage,Type=itp,Tension=1.05]% + {\interpoA} %pointsinterpo + {-5.25}{1.5} + \TracerCourbeInterpo[Couleur=red,Tension=1.05]{\interpoA} + \TracerAxesGrilles[Grille=false,Elargir=2.5mm]{-7,-6,...,4}{-3,-2,...,5} +\end{GraphiqueTikz} +\end{tcblisting} + +\section{Sous spline cubique} + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} +\begin{GraphiqueTikz}% + [x=0.8cm,y=1cm,Xmin=-7,Xmax=4,Ymin=-3,Ymax=5] + \TracerAxesGrilles[Grads=false,Elargir=2.5mm]{-7,-6,...,4}{-3,-2,...,5} + \DefinirListeSpline{-6/4/-2§-5/2/-2§-4/0/-2§-2/-2/0§1/2/2§3/3.5/0.5}[\lstsplineA] + \DefinirCourbeSpline[Nom=splinetest]{\lstsplineA}<\SplineTeal> + \TracerIntegrale% + [NomSpline=\SplineTeal,Type=spl,Couleurs=blue/purple,Style=hachures]% + {splinetest} %nomcourbespline + {-5}{2} + \TracerCourbeSpline[Couleur=teal]{\lstsplineA} + \TracerAxesGrilles[Grille=false,Elargir=2.5mm]{-7,-6,...,4}{-3,-2,...,5} +\end{GraphiqueTikz} +\end{tcblisting} + +\section{Entre courbes} + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} +\begin{GraphiqueTikz}% + [x=0.8cm,y=1cm,Xmin=-7,Xmax=4,Ymin=-3,Ymax=5] + \TracerAxesGrilles[Grads=false,Elargir=2.5mm]{-7,-6,...,4}{-3,-2,...,5} + \DefinirCourbe[Nom=ch]<h>{0.25*(x+2)^2-1} + \DefinirCourbe[Nom=ck]<k>{-0.25*x+1} + \TrouverIntersections[Nom=ITSC,Aff=false]{ch}{ck} + \TracerIntegrale% + [Couleurs=olive/pink,Style=remplissage,Type=fct/fct,Bornes=noeud/abs]% + {h(x)}[k(x)] %formules + {(ITSC-1)}{1.5} + \TracerCourbe[Couleur=red]{h(x)} + \TracerCourbe[Couleur=blue]{k(x)} + \TracerAxesGrilles[Grille=false,Elargir=2.5mm]{-7,-6,...,4}{-3,-2,...,5} +\end{GraphiqueTikz} +\end{tcblisting} + +\section{Entre splines} + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} +\begin{GraphiqueTikz}% + [x=0.8cm,y=1cm,Xmin=-7,Xmax=4,Ymin=-3,Ymax=5] + \TracerAxesGrilles[Grads=false,Elargir=2.5mm]{-7,-6,...,4}{-3,-2,...,5} + \DefinirListeSpline{-6/4/-2§-5/2/-2§-4/0/-2§-2/-2/0§1/2/2§3/3.5/0.5}[\lstsplineA] + \DefinirListeSpline{-6/-2/3§-2/4/0§3/-1/0}[\lstsplineB] + \DefinirCourbeSpline[Nom=splinetestolive]{\lstsplineA}<\SplineOlive> + \DefinirCourbeSpline[Nom=splinetestteal]{\lstsplineB}<\SplineTeal> + \TrouverIntersections[Nom=ITT,Aff=false]{splinetestteal}{splinetestolive} + \TracerIntegrale% + [NomSpline=\SplineTeal,NomSplineB=\SplineOlive,Type=spl/spl,Couleurs=blue/purple,Bornes=noeuds]% + {splinetestolive} %nomcourbespline + [splinetestteal] %nomcourbespline + {(ITT-1)}{(ITT-2)} + \TracerCourbeSpline[Couleur=teal]{\lstsplineA} + \TracerCourbeSpline[Couleur=olive]{\lstsplineB} + \TracerAxesGrilles[Grille=false,Elargir=2.5mm]{-7,-6,...,4}{-3,-2,...,5} +\end{GraphiqueTikz} +\end{tcblisting} + +\section{Entre interpolations} + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} +\begin{GraphiqueTikz}% + [x=0.8cm,y=1cm,Xmin=-7,Xmax=4,Ymin=-3,Ymax=5] + \TracerAxesGrilles[Grads=false,Elargir=2.5mm]{-7,-6,...,4}{-3,-2,...,5} + \DefinirListeInterpo{(-6,4)(-2,-2)(3,3.5)}[\interpoA] + \DefinirCourbeInterpo[Nom=interpotest]{\interpoA} + \DefinirListeInterpo{(-6,-2)(-1,4)(3,0)}[\interpoB] + \DefinirCourbeInterpo[Nom=interpotesta]{\interpoB} + \TracerIntegrale% + [NomInterpo=interpotesta,NomInterpoB=interpotest,Type=itp/itp,Couleurs=olive/pink]% + {\interpoB} %pointsinterpo + [\interpoA] %pointsinterpo + {-2}{1} + \TracerCourbeInterpo[Couleur=red]{\interpoA} + \TracerCourbeInterpo[Couleur=blue]{\interpoB} + \TracerAxesGrilles[Grille=false,Elargir=2.5mm]{-7,-6,...,4}{-3,-2,...,5} +\end{GraphiqueTikz} +\end{tcblisting} + +\section{Entre fonction et spline} + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} +\begin{GraphiqueTikz}% + [x=0.8cm,y=1cm,Xmin=-7,Xmax=4,Ymin=-3,Ymax=5] + \TracerAxesGrilles[Grads=false,Elargir=2.5mm]{-7,-6,...,4}{-3,-2,...,5} + \DefinirCourbe[Nom=ch]<h>{-0.25*(x+2)^2+3.5} + \DefinirListeSpline{-6/4/-2§-5/2/-2§-4/0/-2§-2/-2/0§1/2/2§3/3.5/0.5}[\lstsplineA] + \DefinirCourbeSpline[Nom=splineblue]{\lstsplineA}<\Splineblue> + \TracerIntegrale% + [NomSplineB=\Splineblue,Type=fct/spl,Couleurs=olive/pink]% + {h(x)} %formule + [splineblue] %nomcourbespline + {-3}{0} + \TracerCourbe[Couleur=red]{h(x)} + \TracerCourbeSpline[Couleur=blue]{\lstsplineA} + \TracerAxesGrilles[Grille=false,Elargir=2.5mm]{-7,-6,...,4}{-3,-2,...,5} +\end{GraphiqueTikz} +\end{tcblisting} + +\section{Entre spline et fonction} + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} +\begin{GraphiqueTikz}% + [x=0.8cm,y=1cm,Xmin=-7,Xmax=4,Ymin=-3,Ymax=5] + \TracerAxesGrilles[Grads=false,Elargir=2.5mm]{-7,-6,...,4}{-3,-2,...,5} + \DefinirCourbe[Nom=ch]<h>{0.25*(x+2)^2-2} + \DefinirListeSpline{-6/4/2§-5/-2/-2§-4/0/2§-2/2/0§1/-2/-2§3/3.5/-0.5}[\lstsplineA] + \DefinirCourbeSpline[Nom=splineblue]{\lstsplineA}<\Splineblue> + \TracerIntegrale% + [NomSpline=\Splineblue,Type=spl/fct,Couleurs=olive/pink]% + {splineblue} %nomcourbespline + [h(x)] %formule + {-3}{-1} + \TracerCourbe[Couleur=red]{h(x)} + \TracerCourbeSpline[Couleur=blue]{\lstsplineA} + \TracerAxesGrilles[Grille=false,Elargir=2.5mm]{-7,-6,...,4}{-3,-2,...,5} +\end{GraphiqueTikz} +\end{tcblisting} + +\section{Entre fonction et interpo} + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} +\begin{GraphiqueTikz}% + [x=0.8cm,y=1cm,Xmin=-7,Xmax=4,Ymin=-3,Ymax=5] + \TracerAxesGrilles[Grads=false,Elargir=2.5mm]{-7,-6,...,4}{-3,-2,...,5} + \DefinirCourbe[Nom=cm]<m>{-0.25*(x+2)^2+4} + \DefinirListeInterpo{(-6,4)(-5,-2)(-2,1)(1,-2)(3,3)}[\interpoB] + \DefinirCourbeInterpo[Nom=interpotestb]{\interpoB} + \TracerIntegrale% + [NomInterpoB=interpotestb,Type=fct/itp,Couleurs=olive/pink]% + {m(x)} %formule + [\interpoB] %pointsinterpo + {-4}{1} + \TracerCourbe[Couleur=red]{m(x)} + \TracerCourbeInterpo[Couleur=blue]{\interpoB} + \TracerAxesGrilles[Grille=false,Elargir=2.5mm]{-7,-6,...,4}{-3,-2,...,5} +\end{GraphiqueTikz} +\end{tcblisting} + +\section{Entre interpo et fonction} + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} +\begin{GraphiqueTikz}% + [x=0.8cm,y=1cm,Xmin=-7,Xmax=4,Ymin=-3,Ymax=5] + \TracerAxesGrilles[Grads=false,Elargir=2.5mm]{-7,-6,...,4}{-3,-2,...,5} + \DefinirCourbe[Nom=courbeQ]<q>{0.25*(x+2)^2-2.5} + \DefinirListeInterpo{(-6,-2)(-5,4)(-2,-1)(1,2)(3,-2)}[\interpoA] + \DefinirCourbeInterpo[Nom=interpotest]{\interpoA} + \TrouverIntersections[Nom=FGH,Aff]{interpotest}{courbeQ} + \TracerIntegrale% + [NomInterpo=interpotest,Type=itp/fct,Couleurs=olive/pink,Bornes=noeuds]% + {\interpoA} %pointsinterpo + [q(x)] %formule + {(FGH-1)}{(FGH-2)} + \TracerCourbe[Couleur=red]{q(x)} + \TracerCourbeInterpo[Couleur=blue]{\interpoA} + \TracerAxesGrilles[Grille=false,Elargir=2.5mm]{-7,-6,...,4}{-3,-2,...,5} +\end{GraphiqueTikz} +\end{tcblisting} + +\section{Entre spline et interpo} + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} +\begin{GraphiqueTikz}% + [x=0.8cm,y=1cm,Xmin=-7,Xmax=4,Ymin=-3,Ymax=5] + \TracerAxesGrilles[Grads=false,Elargir=2.5mm]{-7,-6,...,4}{-3,-2,...,5} + \DefinirListeSpline{-6/-2/2§-3/4/0§3/-2/0}[\lstsplineA] + \DefinirCourbeSpline[Nom=splinered]{\lstsplineA}<\Splinered> + \DefinirListeInterpo{(-6,4)(-5,-2)(-2,1)(1,-2)(3,3)}[\interpoB] + \DefinirCourbeInterpo[Nom=interpotestb]{\interpoB} + \TracerIntegrale% + [NomInterpoB=interpotestb,NomSpline=\Splinered,Type=spl/itp,Couleurs=olive/pink]% + {splinered} %nomcourbespline + [\interpoB] %pointsinterpo + {-4}{-2} + \TracerCourbeSpline[Couleur=red]{\lstsplineA} + \TracerCourbeInterpo[Couleur=blue]{\interpoB} + \TracerAxesGrilles[Grille=false,Elargir=2.5mm]{-7,-6,...,4}{-3,-2,...,5} +\end{GraphiqueTikz} +\end{tcblisting} + +\section{Entre interpo et spline} + +\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5} +\begin{GraphiqueTikz}% + [x=0.8cm,y=1cm,Xmin=-7,Xmax=4,Ymin=-3,Ymax=5] + \TracerAxesGrilles[Grads=false,Elargir=2.5mm]{-7,-6,...,4}{-3,-2,...,5} + \DefinirListeSpline{-6/4/-2§-3/-2.25/0§3/3/0}[\lstsplineB] + \DefinirCourbeSpline[Nom=splineblue]{\lstsplineB}<\Splineblue> + \DefinirListeInterpo{(-6,-2)(-5,4)(-2,-1)(1,2)(3,-2.5)}[\interpoA] + \DefinirCourbeInterpo[Nom=interpotest]{\interpoA} + \TrouverIntersections[Nom=UIO,Aff]{interpotest}{splineblue} + \TracerIntegrale% + [NomInterpo=interpotest,NomSplineB=\Splineblue,Type=itp/spl,Couleurs=olive/pink,Bornes=noeuds]% + {\interpoA} %pointsinterpo + [splineblue] %nomcourbespline + {(UIO-1)}{(UIO-2)} + \TracerCourbeSpline[Couleur=blue]{\lstsplineB} + \TracerCourbeInterpo[Couleur=red]{\interpoA} + \TracerAxesGrilles[Grille=false,Elargir=2.5mm]{-7,-6,...,4}{-3,-2,...,5} +\end{GraphiqueTikz} +\end{tcblisting} + +\end{document}
\ No newline at end of file diff --git a/graphics/pgf/contrib/tkz-grapheur/tex/tkz-grapheur.sty b/graphics/pgf/contrib/tkz-grapheur/tex/tkz-grapheur.sty index 1630132db3..be1337a970 100644 --- a/graphics/pgf/contrib/tkz-grapheur/tex/tkz-grapheur.sty +++ b/graphics/pgf/contrib/tkz-grapheur/tex/tkz-grapheur.sty @@ -2,32 +2,68 @@ % licence : Released under the LaTeX Project Public License v1.3c or later, see http://www.latex-project.org/lppl.txtf \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{tkz-grapheur}[2024/05/11 0.1.0 Des outils en TikZ pour travailler comme avec un grapheur] +\ProvidesPackage{tkz-grapheur}[2024/10/29 0.2.0 Des outils en TikZ pour travailler comme avec un grapheur] %====HISTORIQUE +% v 0.2.0 Petites commandes en lien avec pgfplots + modification mineure splinecubique (calculs Alt) +% v 0.1.9 Correction d'un bug avec la détermination des unités... +% v 0.1.8 Ajout des courbes d'ECC/FCC + Toile récurrence + Points discontinuité + Histobinom +% v 0.1.7 Méthodes intégrales avec des splines +% v 0.1.6 Asymptote verticale + Monte Carlo + Méthode intégrales (rectangles, etc) +% v 0.1.5 Correction d'un bug avec les valeurs manuelles + Nœud pour une image + [en] version ! +% v 0.1.4 Ajout des placements de textes +% v 0.1.3 Régressions, avec xintreg (désactivable) +% v 0.1.2 Max/Min + Droites +% v 0.1.1 Densité loi normale + khi deux + Améliorations diverses % v 0.1.0 Version initiale [fr] -%====OPTION +%====OPTIONS \newif\if@loadsiunitx \@loadsiunitxtrue \DeclareOption{nonsiunitx}{\@loadsiunitxfalse}% +\DeclareOption{nosiunitx}{\@loadsiunitxfalse}% + \newif\if@loadtikzbabel \@loadtikzbabeltrue \DeclareOption{nontikzbabel}{\@loadtikzbabelfalse}% +\DeclareOption{notikzbabel}{\@loadtikzbabelfalse}% + +\newif\if@loadxintreg \@loadxintregtrue +\DeclareOption{nonxintreg}{\@loadxintregfalse}% +\DeclareOption{noxintreg}{\@loadxintregfalse}% + +\newif\if@loadpgfplots \@loadpgfplotstrue +\DeclareOption{nonpgfplots}{\@loadpgfplotsfalse}% +\DeclareOption{nopgfplots}{\@loadpgfplotsfalse}% + +\newif\if@lngenglish \@lngenglishfalse +\DeclareOption{english}{\@lngenglishtrue}% + \DeclareOption*{} \ProcessOptions\relax %====BASE \RequirePackage{tikz} \RequirePackage{ifthen} -\usetikzlibrary{calc,intersections,patterns,patterns.meta} +\if@loadpgfplots + \RequirePackage{pgfplots} + \usepgfplotslibrary{fillbetween} +\fi +\usetikzlibrary{calc,intersections,patterns,patterns.meta,bbox} \RequirePackage{simplekv} \RequirePackage{xintexpr} \RequirePackage{xstring} \RequirePackage{listofitems} +\if@loadxintreg + \RequirePackage{xint-regression} +\fi -%====SIUNITX +%====SIUNITX + [en] \if@loadsiunitx \RequirePackage{siunitx} - \sisetup{locale=FR,output-decimal-marker={,},mode=match,propagate-math-font=true,reset-math-version=false,reset-text-family=false,reset-text-series=false,reset-text-shape=false,text-family-to-math=true,text-series-to-math=true} + \if@lngenglish + \sisetup{mode=match,propagate-math-font=true,reset-math-version=false,reset-text-family=false,reset-text-series=false,reset-text-shape=false,text-family-to-math=true,text-series-to-math=true} + \else + \sisetup{locale=FR,output-decimal-marker={,},mode=match,propagate-math-font=true,reset-math-version=false,reset-text-family=false,reset-text-series=false,reset-text-shape=false,text-family-to-math=true,text-series-to-math=true}%,group-minimum-digits=4} + \fi \fi %====TIKZ.BABEL @@ -35,6 +71,10 @@ \usetikzlibrary{babel} \fi +%++++++++++++++++++++++++++ +%+++++++++FRANÇAIS+++++++++ +%++++++++++++++++++++++++++ + %====COMMANDE POUR NB DECIMAL ALEA ENTRE BORNES \NewDocumentCommand\ChoisirNbAlea{ s O{0} m m O{\monbnalea} }{% \def\tmpborneinf{\xinteval{floor(#3)}}%inf=\tmpborneinf\par% @@ -70,17 +110,37 @@ %====PATCH NUM \@ifundefined{ArrondirNum}% {% - \NewDocumentCommand\ArrondirNum{ O{2} m}{\num{\xintfloateval{round(#2,#1)}}\relax}% + \NewDocumentCommand\ArrondirNum{ s O{2} m}{% + \IfBooleanTF{#1}% + {% + \xintfloateval{round(#3,#2)}\relax% + }% + {% + \num{\xintfloateval{round(#3,#2)}}\relax% + }% + }% }% {% - \RenewDocumentCommand\ArrondirNum{ O{2} m}{\num{\xintfloateval{round(#2,#1)}}\relax}% + \RenewDocumentCommand\ArrondirNum{ s O{2} m}{% + \IfBooleanTF{#1}% + {% + \xintfloateval{round(#3,#2)}\relax% + }% + {% + \num{\xintfloateval{round(#3,#2)}}\relax% + }% + }% }% %====STYLES DE BASE +\tikzset{pflnoeud/.style={}} +\tikzset{pflpoint/.style={line width=0.95pt}} +\tikzset{pflpointmc/.style={radius=0.875pt}} \tikzset{pflpointc/.style={radius=1.75pt}} \tikzset{pflpointnuage/.style={radius=1.75pt}} \tikzset{pflcadre/.style={line width=0.8pt,gray}} \tikzset{pflcourbe/.style={line width=1.05pt}} +\tikzset{pflcourbediscont/.style={line width=1.1pt}} \tikzset{pfltrait/.style={line width=0.8pt}} \tikzset{pflflecheg/.style={<-,>=latex}} \tikzset{pflfleched/.style={->,>=latex}} @@ -102,10 +162,30 @@ Ygrille/.store in=\pflgrilley,Ygrille/.default=1,Ygrille=1, Ygrilles/.store in=\pflgrilleys,Ygrilles/.default=0.5,Ygrilles=0.5 } +\tikzset{% + pics/pflptcroix/.style args={#1/#2}{ + code={ + \draw[pflpoint,rotate=#2] (-#1,0) -- (#1,0); + \draw[pflpoint,rotate=#2] (0,-#1) -- (0, #1); + } + }, + pics/pflptcroix/.default={2pt/45} +} +\tikzset{% + pics/pflptcarre/.style args={#1/#2}{ + code={ + \filldraw[draw=none,pflpoint,rotate=#2] (-#1,-#1) rectangle (#1,#1) ; + } + }, + pics/pflptcarre/.default={2pt/0} +} %====CONSTANTE PI pour xint, à voir si incompatibilité... \xintdefvar pi:=3.141592653589793238462643; +%====focntion ln, en langage xint +\xintdeffloatfunc ln(x) := log(x); + %===COMMANDE INTERNE POUR FORMATER EN FRACTIONS \NewDocumentCommand\FormatterFraction{ s O{} m }{% %*=moins sur le numérateur @@ -267,9 +347,9 @@ } \newcommand\TikZUnites{ - \coordinate (@0) at (0,0) ; - \coordinate (@X) at (1,0) ; - \coordinate (@Y) at (0,1) ; + \coordinate (@0) at (\pflOx,\pflOy) ; + \coordinate (@X) at ({\pflOx+1},\pflOy) ; + \coordinate (@Y) at ({\pflOx},{\pflOy+1}) ; \DistanceEntreNoeuds[\pflxunit]{@0}{@X} \DistanceEntreNoeuds[\pflyunit]{@0}{@Y} } @@ -315,7 +395,9 @@ Police={},% Format=num,% Traits=true,% - Dernier=false + Dernier=false,% + Derriere=false,% + Devant=false } \NewDocumentCommand\FormatterValeurAxex{ m m }{% @@ -353,6 +435,18 @@ \NewDocumentCommand\TracerAxesGrilles{ s O{} m D<>{#3} m D<>{#5} }{% \restoreKV[GraphiqueTikzAxes]% \setKV[GraphiqueTikzAxes]{#2}% + %cas particuliers sous/sur impression + \ifboolKV[GraphiqueTikzAxes]{Derriere}% + {% + \setKV[GraphiqueTikzAxes]{Grads=false} + }% + {}% + \ifboolKV[GraphiqueTikzAxes]{Devant}% + {% + \setKV[GraphiqueTikzAxes]{Grille=false} + }% + {}% + %suite \IfSubStr{\pflformataxes}{/}% {% \StrCut{\pflformataxes}{/}{\pflformataxex}{\pflformataxey}% @@ -397,7 +491,7 @@ %origine \ifboolKV[GraphiqueTikzAxes]{Origine}% {% - \draw ({\pflOx},{\pflOy}) node[below left,font={\useKV[GraphiqueTikzAxes]{Police}}] {\FormatterValeurAxex{\pflformataxex}{\plfOx}} ; + \draw ({\pflOx},{\pflOy}) node[pflnoeud,below left,font={\useKV[GraphiqueTikzAxes]{Police}}] {\FormatterValeurAxex{\pflformataxex}{\pflOx}} ; %\draw (\pflOx,\pflOy) node[below left,font={\useKV[GraphiqueTikzAxes]{Police}}] {\ifboolKV[GraphiqueTikzAxes]{Num}{\num{\pflOx}}{\pflOx}} ; }% {}% @@ -405,22 +499,22 @@ \foreach \x in \tmprangexvalues {% \IfBooleanTF{#1}% {% - \xintifboolexpr{\x == \pflOx}{}{\draw ([yshift=-\pflthickgrad]{\x},{\pflOy}) node[below,font={\useKV[GraphiqueTikzAxes]{Police}}] {\FormatterValeurAxex{\pflformataxex}{\x}} ;} + \xintifboolexpr{\x == \pflOx}{}{\draw ([yshift=-\pflthickgrad]{\x},{\pflOy}) node[pflnoeud,below,font={\useKV[GraphiqueTikzAxes]{Police}}] {\FormatterValeurAxex{\pflformataxex}{\x}} ;} %\xintifboolexpr{\x == \pflOx}{}{\draw ([yshift=-\pflthickgrad]\x,\pflOy) node[below,font={\useKV[GraphiqueTikzAxes]{Police}}] {\ifboolKV[GraphiqueTikzAxes]{Num}{\num{\x}}{\x}} ;} }% {% - \draw ([yshift=-\pflthickgrad]{\x},{\pflOy}) node[below,font={\useKV[GraphiqueTikzAxes]{Police}}] {\FormatterValeurAxex{\pflformataxex}{\x}} ; + \draw ([yshift=-\pflthickgrad]{\x},{\pflOy}) node[pflnoeud,below,font={\useKV[GraphiqueTikzAxes]{Police}}] {\FormatterValeurAxex{\pflformataxex}{\x}} ; %\draw ([yshift=-\pflthickgrad]\x,\pflOy) node[below,font={\useKV[GraphiqueTikzAxes]{Police}}] {\ifboolKV[GraphiqueTikzAxes]{Num}{\num{\x}}{\x}} ; }% }% \foreach \y in \tmprangeyvalues {% \IfBooleanTF{#1}% {% - \xintifboolexpr{\y == \pflOy}{}{\draw ([xshift=-\pflthickgrad]{\pflOx},{\y}) node[left,font={\useKV[GraphiqueTikzAxes]{Police}}] {\FormatterValeurAxey{\pflformataxey}{\y}} ;} + \xintifboolexpr{\y == \pflOy}{}{\draw ([xshift=-\pflthickgrad]{\pflOx},{\y}) node[pflnoeud,left,font={\useKV[GraphiqueTikzAxes]{Police}}] {\FormatterValeurAxey{\pflformataxey}{\y}} ;} %\xintifboolexpr{\y == \pflOy}{}{\draw ([xshift=-\pflthickgrad]\pflOx,\y) node[left,font={\useKV[GraphiqueTikzAxes]{Police}}] {\ifboolKV[GraphiqueTikzAxes]{Num}{\num{\y}}{\y}} ;} }% {% - \draw ([xshift=-\pflthickgrad]{\pflOx},{\y}) node[left,font={\useKV[GraphiqueTikzAxes]{Police}}] {\FormatterValeurAxey{\pflformataxey}{\y}} ; + \draw ([xshift=-\pflthickgrad]{\pflOx},{\y}) node[pflnoeud,left,font={\useKV[GraphiqueTikzAxes]{Police}}] {\FormatterValeurAxey{\pflformataxey}{\y}} ; %\draw ([xshift=-\pflthickgrad]\pflOx,\y) node[left,font={\useKV[GraphiqueTikzAxes]{Police}}] {\ifboolKV[GraphiqueTikzAxes]{Num}{\num{\y}}{\y}} ; }% }% @@ -429,7 +523,7 @@ } %===DEFINIR POINTS -\setKVdefault[GraphiqueTikzDefPoints]{Couleur=black,Aff=false} +\setKVdefault[GraphiqueTikzDefPoints]{Couleur=black,Aff=false,Style=o} \NewDocumentCommand\DefinirPts{ O{} m }{% \restoreKV[GraphiqueTikzDefPoints]% @@ -438,12 +532,186 @@ \coordinate (\tmpnamept) at ({\tmpxpt},{\tmpypt}) ; \ifboolKV[GraphiqueTikzDefPoints]{Aff}% {% - \filldraw[{\useKV[GraphiqueTikzDefPoints]{Couleur}}] (\tmpnamept) circle[pflpointc] ; + \MarquerPts*[Style={\useKV[GraphiqueTikzDefPoints]{Style}},Couleur={\useKV[GraphiqueTikzDefPoints]{Couleur}}]{(\tmpnamept)} + %\filldraw[{\useKV[GraphiqueTikzDefPoints]{Couleur}}] (\tmpnamept) circle[pflpointc] ; }% {}% } } +\defKV[GraphiqueTikzMarkPoints]{% + Couleur=\def\pflcouleurpoints{#1},% + Style=\def\pflstylepoints{#1} +} +\setKVdefault[GraphiqueTikzMarkPoints]{% + Couleur=black,% + Taillec=2pt,% + Taillex=2pt,% + Tailleo=1.75pt,% + Style=o,% + Traits=false +} +\NewDocumentCommand\MarquerPts{ s O{} D<>{\normalfont\normalsize} m }{% + %étoilée = sans label + %2=clés + %3=points + \restoreKV[GraphiqueTikzMarkPoints]% + \setKV[GraphiqueTikzMarkPoints]{#2}% + \IfBooleanTF{#1}% + {% + \IfStrEq{\pflstylepoints}{x}% + {% + \foreach \Point in {#4} {% + \ifboolKV[GraphiqueTikzMarkPoints]{Traits}% + {% + \draw[{\useKV[GraphiqueTikzMarkPoints]{Couleur}},pfltraitantec] let \p1 = \Point in ({\x1},{\pflOy}) |- ({\pflOx},{\y1}) ; + }% + {}% + \draw[{\useKV[GraphiqueTikzMarkPoints]{Couleur}}] \Point pic{pflptcroix={\useKV[GraphiqueTikzMarkPoints]{Taillex}}/45} ; + }% + }% + {}% + \IfStrEq{\pflstylepoints}{+}% + {% + \foreach \Point in {#4} {% + \ifboolKV[GraphiqueTikzMarkPoints]{Traits}% + {% + \draw[{\useKV[GraphiqueTikzMarkPoints]{Couleur}},pfltraitantec] let \p1 = \Point in ({\x1},{\pflOy}) |- ({\pflOx},{\y1}) ; + }% + {}% + \draw[{\useKV[GraphiqueTikzMarkPoints]{Couleur}}] \Point pic{pflptcroix={\useKV[GraphiqueTikzMarkPoints]{Taillex}}/90} ; + }% + }% + {}% + \IfStrEq{\pflstylepoints}{c}% + {% + \foreach \Point in {#4} {% + \ifboolKV[GraphiqueTikzMarkPoints]{Traits}% + {% + \draw[{\useKV[GraphiqueTikzMarkPoints]{Couleur}},pfltraitantec] let \p1 = \Point in ({\x1},{\pflOy}) |- ({\pflOx},{\y1}) ; + }% + {}% + \filldraw[draw=none,fill={\useKV[GraphiqueTikzMarkPoints]{Couleur}}] \Point pic{pflptcarre={\useKV[GraphiqueTikzMarkPoints]{Taillec}}/0} ; + }% + }% + {}% + \IfStrEq{\pflstylepoints}{d}% + {% + \foreach \Point in {#4} {% + \ifboolKV[GraphiqueTikzMarkPoints]{Traits}% + {% + \draw[{\useKV[GraphiqueTikzMarkPoints]{Couleur}},pfltraitantec] let \p1 = \Point in ({\x1},{\pflOy}) |- ({\pflOx},{\y1}) ; + }% + {}% + \filldraw[draw=none,fill={\useKV[GraphiqueTikzMarkPoints]{Couleur}}] \Point pic{pflptcarre={\useKV[GraphiqueTikzMarkPoints]{Tailleo}}/45} ; + }% + }% + {}% + \IfStrEq{\pflstylepoints}{o}% + {% + \IfSubStr{\pflcouleurpoints}{/}% + {% + \StrCut{\pflcouleurpoints}{/}{\pflcouleurpointsA}{\pflcouleurpointsB}% + \foreach \Point in {#4} {% + \ifboolKV[GraphiqueTikzMarkPoints]{Traits}% + {% + \draw[{\useKV[GraphiqueTikzMarkPoints]{Couleur}},pfltraitantec] let \p1 = \Point in ({\x1},{\pflOy}) |- ({\pflOx},{\y1}) ; + }% + {}% + \filldraw[pfltrait,fill=\pflcouleurpointsB,draw=\pflcouleurpointsA] \Point circle[radius={\useKV[GraphiqueTikzMarkPoints]{Tailleo}}] ; + }% + }% + {% + \foreach \Point in {#4} {% + \ifboolKV[GraphiqueTikzMarkPoints]{Traits}% + {% + \draw[{\useKV[GraphiqueTikzMarkPoints]{Couleur}},pfltraitantec] let \p1 = \Point in ({\x1},{\pflOy}) |- ({\pflOx},{\y1}) ; + }% + {}% + \filldraw[\pflcouleurpoints] \Point circle[radius={\useKV[GraphiqueTikzMarkPoints]{Tailleo}}] ; + }% + }% + }% + {}% + }% + {%avec label + \IfStrEq{\pflstylepoints}{x}% + {% + \foreach \Point/\Label/\Pos in {#4} {% + \ifboolKV[GraphiqueTikzMarkPoints]{Traits}% + {% + \draw[{\useKV[GraphiqueTikzMarkPoints]{Couleur}},pfltraitantec] let \p1 = \Point in ({\x1},{\pflOy}) |- ({\pflOx},{\y1}) ; + }% + {}% + \draw[{\useKV[GraphiqueTikzMarkPoints]{Couleur}}] \Point pic{pflptcroix={\useKV[GraphiqueTikzMarkPoints]{Taillex}}/45} node[pflnoeud,\Pos,font=#3] {\Label} ; + }% + }% + {}% + \IfStrEq{\pflstylepoints}{+}% + {% + \foreach \Point/\Label/\Pos in {#4} {% + \ifboolKV[GraphiqueTikzMarkPoints]{Traits}% + {% + \draw[{\useKV[GraphiqueTikzMarkPoints]{Couleur}},pfltraitantec] let \p1 = \Point in ({\x1},{\pflOy}) |- ({\pflOx},{\y1}) ; + }% + {}% + \draw[{\useKV[GraphiqueTikzMarkPoints]{Couleur}}] \Point pic{pflptcroix={\useKV[GraphiqueTikzMarkPoints]{Taillex}}/90} node[pflnoeud,\Pos,font=#3] {\Label} ; + }% + }% + {}% + \IfStrEq{\pflstylepoints}{c}% + {% + \foreach \Point/\Label/\Pos in {#4} {% + \ifboolKV[GraphiqueTikzMarkPoints]{Traits}% + {% + \draw[{\useKV[GraphiqueTikzMarkPoints]{Couleur}},pfltraitantec] let \p1 = \Point in ({\x1},{\pflOy}) |- ({\pflOx},{\y1}) ; + }% + {}% + \filldraw[draw=none,fill={\useKV[GraphiqueTikzMarkPoints]{Couleur}}] \Point pic{pflptcarre={\useKV[GraphiqueTikzMarkPoints]{Taillec}}/0} node[pflnoeud,\Pos,{\useKV[GraphiqueTikzMarkPoints]{Couleur}},font=#3] {\Label} ; + }% + }% + {}% + \IfStrEq{\pflstylepoints}{d}% + {% + \foreach \Point/\Label/\Pos in {#4} {% + \ifboolKV[GraphiqueTikzMarkPoints]{Traits}% + {% + \draw[{\useKV[GraphiqueTikzMarkPoints]{Couleur}},pfltraitantec] let \p1 = \Point in ({\x1},{\pflOy}) |- ({\pflOx},{\y1}) ; + }% + {}% + \filldraw[draw=none,fill={\useKV[GraphiqueTikzMarkPoints]{Couleur}}] \Point pic{pflptcarre={\useKV[GraphiqueTikzMarkPoints]{Tailleo}}/45} node[pflnoeud,\Pos,{\useKV[GraphiqueTikzMarkPoints]{Couleur}},font=#3] {\Label} ; + }% + }% + {}% + \IfStrEq{\pflstylepoints}{o}% + {% + \IfSubStr{\pflcouleurpoints}{/}% + {% + \StrCut{\pflcouleurpoints}{/}{\pflcouleurpointsA}{\pflcouleurpointsB}% + \foreach \Point/\Label/\Pos in {#4} {% + \ifboolKV[GraphiqueTikzMarkPoints]{Traits}% + {% + \draw[{\useKV[GraphiqueTikzMarkPoints]{Couleur}},pfltraitantec] let \p1 = \Point in ({\x1},{\pflOy}) |- ({\pflOx},{\y1}) ; + }% + {}% + \draw[pfltrait,\pflcouleurpointsA,fill=\pflcouleurpointsB] \Point circle[radius={\useKV[GraphiqueTikzMarkPoints]{Tailleo}}] node[pflnoeud,\Pos,font=#3] {\Label} ; + }% + }% + {% + \foreach \Point/\Label/\Pos in {#4} {% + \ifboolKV[GraphiqueTikzMarkPoints]{Traits}% + {% + \draw[{\useKV[GraphiqueTikzMarkPoints]{Couleur}},pfltraitantec] let \p1 = \Point in ({\x1},{\pflOy}) |- ({\pflOx},{\y1}) ; + }% + {}% + \filldraw[\pflcouleurpoints] \Point circle[radius={\useKV[GraphiqueTikzMarkPoints]{Tailleo}}] node[pflnoeud,\Pos,font=#3] {\Label} ; + }% + }% + }% + {}% + }% +} + %===AJOUTER DES VALEURS MANUELLEMENT \NewDocumentCommand\RajouterValeursAxeX{ O{} m m }{% \restoreKV[GraphiqueTikzAxes]% @@ -454,7 +722,7 @@ \foreach \i in {1,...,\LstValXlen}{% \itemtomacro\LstValX[\i]\mavalx% \itemtomacro\LstValFmtX[\i]\mavalfmtx% - \draw ([yshift=-\pflthickgrad]{\mavalx},{\pflOy}) node[below,font={\useKV[GraphiqueTikzAxes]{Police}}] {\mavalfmtx} ; + \draw ([yshift=-\pflthickgrad]{\mavalx},{\pflOy}) node[pflnoeud,below,font={\useKV[GraphiqueTikzAxes]{Police}}] {\mavalfmtx} ; }% } @@ -464,14 +732,14 @@ \ifboolKV[GraphiqueTikzAxes]{Traits}{\foreach \y in {#2}{\draw[pfltrait] ([xshift=\pflthickgrad]{\pflOx},{\y})--++({-2*\pflthickgrad},0) ;}}{}% \readlist*\LstValY{#2}% \readlist*\LstValFmtY{#3}% - \foreach \i in {1,...,\LstValXlen}{% + \foreach \i in {1,...,\LstValYlen}{% \itemtomacro\LstValY[\i]\mavaly% \itemtomacro\LstValFmtY[\i]\mavalfmty% - \draw ([xshift=-\pflthickgrad]{\pflOx},{\mavaly}) node[left,font={\useKV[GraphiqueTikzAxes]{Police}}] {\mavalfmty} ; + \draw ([xshift=-\pflthickgrad]{\pflOx},{\mavaly}) node[pflnoeud,left,font={\useKV[GraphiqueTikzAxes]{Police}}] {\mavalfmty} ; }% } -%====FONCTION ET COURBE +%====FONCTIONS ET COURBES 'classique + interpo + spline' \defKV[GraphiqueTikzCourbe]{% Pas=\def\pflstepcurve{#1},% Nom=\def\pflnamecurve{#1} @@ -487,15 +755,44 @@ Tension=0.5 } -\NewDocumentCommand\DefinirFonction{ O{} D<>{f} m }{% +\NewDocumentCommand\DefinirFonction{ O{} D<>{f} m }{%old version \restoreKV[GraphiqueTikzCourbe]% \setKV[GraphiqueTikzCourbe]{#1}% \xintdeffloatfunc #2(x) := #3 ; \IfStrEq{\pflstepcurve}{}% - {% - \xdef\pflstepcurve{\xintfloateval{((\useKV[GraphiqueTikzCourbe]{Fin})-(\useKV[GraphiqueTikzCourbe]{Debut}))/100}}% - }% - {}% + {% + \xdef\pflstepcurve{\xintfloateval{((\useKV[GraphiqueTikzCourbe]{Fin})-(\useKV[GraphiqueTikzCourbe]{Debut}))/100}}% + }% + {}% + \ifboolKV[GraphiqueTikzCourbe]{Clip}{\begin{scope}\clip ({\pflxmin},{\pflymin}) rectangle ({\pflxmax},{\pflymax});}{} + \clip ({\pflxmin},{\pflymin}) rectangle ({\pflxmax},{\pflymax}); + \ifboolKV[GraphiqueTikzCourbe]{Trace}% + {% + \path[draw,pflcourbe,{\useKV[GraphiqueTikzCourbe]{Couleur}},name path global=\pflnamecurve] plot[smooth] coordinates {% + \xintthecoords\xintfloatexpr + seq((x,#2(x)),x={\useKV[GraphiqueTikzCourbe]{Debut}}..[\pflstepcurve]..{\useKV[GraphiqueTikzCourbe]{Fin}},{\useKV[GraphiqueTikzCourbe]{Fin}}) + \relax + }; + }% + {% + \path[draw=none,pflcourbe,{\useKV[GraphiqueTikzCourbe]{Couleur}},name path global=\pflnamecurve] plot[smooth] coordinates {% + \xintthecoords\xintfloatexpr + seq((x,#2(x)),x={\useKV[GraphiqueTikzCourbe]{Debut}}..[\pflstepcurve]..{\useKV[GraphiqueTikzCourbe]{Fin}},{\useKV[GraphiqueTikzCourbe]{Fin}}) + \relax + }; + }% + \ifboolKV[GraphiqueTikzCourbe]{Clip}{\end{scope}}{} +} + +\NewDocumentCommand\DefinirCourbe{ O{} D<>{f} m }{% + \restoreKV[GraphiqueTikzCourbe]% + \setKV[GraphiqueTikzCourbe]{#1}% + \xintdeffloatfunc #2(x) := #3 ; + \IfStrEq{\pflstepcurve}{}% + {% + \xdef\pflstepcurve{\xintfloateval{((\useKV[GraphiqueTikzCourbe]{Fin})-(\useKV[GraphiqueTikzCourbe]{Debut}))/100}}% + }% + {}% \ifboolKV[GraphiqueTikzCourbe]{Clip}{\begin{scope}\clip ({\pflxmin},{\pflymin}) rectangle ({\pflxmax},{\pflymax});}{} \clip ({\pflxmin},{\pflymin}) rectangle ({\pflxmax},{\pflymax}); \ifboolKV[GraphiqueTikzCourbe]{Trace}% @@ -543,6 +840,10 @@ \ifboolKV[GraphiqueTikzCourbe]{Clip}{\end{scope}}{} } +\NewDocumentCommand\DefinirListeInterpo{ m O{\malisteinterpo} }{% + \def#2{#1}% +} + \NewDocumentCommand\DefinirCourbeInterpo{ O{} m }{% \restoreKV[GraphiqueTikzCourbe]% \setKV[GraphiqueTikzCourbe]{#1}% @@ -566,6 +867,145 @@ \end{scope} } +\NewDocumentCommand\DefinirListeSpline{ m O{\malistespline} }{% + \def#2{#1}% +} + +\newcommand\pflextractcoeff[2]{%1=liste,2=numero + \setsepchar{§}% + \readlist*\lcoeffs{#1} + \ifnum \lcoeffslen=1 + \def\COEFFA{#1} + \def\COEFFB{#1} + \else + \itemtomacro\lcoeffs[#2]\COEFF + \IfSubStr{\COEFF}{/}% + {\StrCut{\COEFF}{/}{\COEFFA}{\COEFFB}}% + {\def\COEFFA{\COEFF}\def\COEFFB{\COEFF}} + \fi +} + +\defKV[GraphiqueTikzSpline]{% + Nom=\def\pflsplinename{#1},% + Coeffs=\def\pflsplinecoeffs{#1} +} + +\setKVdefault[GraphiqueTikzSpline]{% + Nom=spline,% + Couleur=black,% + Coeffs=3,% + Trace=false,% + Alt=false +} + +\NewDocumentCommand\GenererSpline{ s m m O{\monspline} }{% + %1=liste + \setsepchar[.]{§./}% + \readlist*\SPLlistepoints{#2}% + %les données + \def\tmpsplinenumdeb{1} + \def\tmpsplinenumfin{\SPLlistepointslen}% + \pflextractcoeff{#3}{\tmpsplinenumdeb}% + %nb de calculs + \def\SPLnbsplines{\inteval{\tmpsplinenumfin-1}}% + %extraction des coordonnées + \itemtomacro\SPLlistepoints[\tmpsplinenumdeb,1]\xa% + \itemtomacro\SPLlistepoints[\tmpsplinenumdeb,2]\ya% + \itemtomacro\SPLlistepoints[\tmpsplinenumdeb,3]\fprimea% + \itemtomacro\SPLlistepoints[\tmpsplinenumdeb,1]\xb% + \itemtomacro\SPLlistepoints[\tmpsplinenumdeb,2]\yb% + \itemtomacro\SPLlistepoints[\tmpsplinenumdeb,3]\fprimeb% + \IfBooleanTF{#1}% + {% + \xdef#4{(\xa,\ya) ..controls +({(\xb-\xa)/\COEFFA},{\fprimea*(\xb-\xa)/\COEFFA}) and +({-(\xb-\xa)/\COEFFA},{-\fprimeb*(\xb-\xa)/\COEFFA}).. (\xb,\yb)}% + }% + {% + \xdef#4{(\xa,\ya) ..controls +({atan \fprimea}:{(\xb-\xa)/\COEFFA}) and +({-180 + atan \fprimeb}:{(\xb-\xa)/\COEFFA}).. (\xb,\yb)}% + }% + \foreach \i in {\tmpsplinenumdeb,...,\SPLnbsplines}{% + %extraction des coeffs de compensation + \pflextractcoeff{#3}{\i}% + \def\j{\inteval{\i+1}}% + \itemtomacro\SPLlistepoints[\i,1]\xa% + \itemtomacro\SPLlistepoints[\i,2]\ya% + \itemtomacro\SPLlistepoints[\i,3]\fprimea% + \itemtomacro\SPLlistepoints[\j,1]\xb% + \itemtomacro\SPLlistepoints[\j,2]\yb% + \itemtomacro\SPLlistepoints[\j,3]\fprimeb% + \IfBooleanTF{#1}% + {% + \xdef#4{#4 ..controls +({(\xb-\xa)/\COEFFA},{\fprimea*(\xb-\xa)/\COEFFA}) and +({-(\xb-\xa)/\COEFFA},{-\fprimeb*(\xb-\xa)/\COEFFA}).. (\xb,\yb)}% + }% + {% + \xdef#4{#4 ..controls +({atan \fprimea}:{(\xb-\xa)/\COEFFA}) and +({-180 + atan \fprimeb}:{(\xb-\xa)/\COEFFB}).. (\xb,\yb)}% + }% + }% +} + +\NewDocumentCommand\DefinirCourbeSpline{ O{} m D<>{\monspline} }{% + %1=liste + \restoreKV[GraphiqueTikzSpline]% + \setKV[GraphiqueTikzSpline]{#1}% + \ifboolKV[GraphiqueTikzSpline]{Alt}% + {% + \GenererSpline*{#2}{\pflsplinecoeffs}[#3]% + }% + {% + \GenererSpline{#2}{\pflsplinecoeffs}[#3]% + }% + \begin{scope} + \ifboolKV[GraphiqueTikzSpline]{Trace}% + {% + \path[draw,pflcourbe,{\useKV[GraphiqueTikzSpline]{Couleur}},name path global=\pflsplinename] #3 ; + }% + {% + \path[draw=none,pflcourbe,name path global=\pflsplinename] #3 ; + }% + \end{scope} +} + +\NewDocumentCommand\DefinirSpline{ O{} m D<>{\monspline} }{%old version + %1=liste + \restoreKV[GraphiqueTikzSpline]% + \setKV[GraphiqueTikzSpline]{#1}% + \GenererSpline{#2}{\pflsplinecoeffs}[#3]% + \begin{scope} + \ifboolKV[GraphiqueTikzSpline]{Trace}% + {% + \path[draw,pflcourbe,{\useKV[GraphiqueTikzSpline]{Couleur}},name path global=\pflsplinename] #3 ; + }% + {% + \path[draw=none,pflcourbe,name path global=\pflsplinename] #3 ; + }% + \end{scope} +} + +\NewDocumentCommand\TracerCourbeSpline{ O{} m D<>{\monspline} }{% + %1=liste + \restoreKV[GraphiqueTikzSpline]% + \setKV[GraphiqueTikzSpline]{#1}% + \ifboolKV[GraphiqueTikzSpline]{Alt}% + {% + \GenererSpline*{#2}{\pflsplinecoeffs}[#3]% + }% + {% + \GenererSpline{#2}{\pflsplinecoeffs}[#3]% + }% + \begin{scope} + \draw[pflcourbe,{\useKV[GraphiqueTikzSpline]{Couleur}}] #3 ; + \end{scope} +} + +\NewDocumentCommand\TracerSpline{ O{} m D<>{\monspline} }{%old version + %1=liste + \restoreKV[GraphiqueTikzSpline]% + \setKV[GraphiqueTikzSpline]{#1}% + \GenererSpline{#2}{\pflsplinecoeffs}[#3]% + \begin{scope} + \draw[pflcourbe,{\useKV[GraphiqueTikzSpline]{Couleur}}] #3 ; + \end{scope} +} + %===INTERSECTION & ANTÉCÉDENTS \defKV[GraphiqueTikzIntersect]{% Nom=\def\pflintercurves{#1} @@ -575,7 +1015,8 @@ Aff=true, Couleur=black, AffDroite=false,% - Traits=false + Traits=false,% + Style=o } \NewDocumentCommand\TrouverIntersections{ O{} m m D<>{\myt} }{% @@ -592,7 +1033,8 @@ \draw[pfltraitimg,{\useKV[GraphiqueTikzIntersect]{Couleur}}]let \p1 = (\pflintercurves-\i) in (\pflintercurves-\i) -- ({\x1},{\pflOy}) ; }% {}% - \filldraw[{\useKV[GraphiqueTikzIntersect]{Couleur}}] (\pflintercurves-\i) circle[pflpointc] ; + \MarquerPts*[Style={\useKV[GraphiqueTikzIntersect]{Style}},Couleur={\useKV[GraphiqueTikzIntersect]{Couleur}}]{(\pflintercurves-\i)} + %\filldraw[{\useKV[GraphiqueTikzIntersect]{Couleur}}] (\pflintercurves-\i) circle[pflpointc] ; } }% }% @@ -617,7 +1059,8 @@ \xintifboolexpr{#4 == 0}{}% {% \foreach \i in {1,...,#4}{% - \filldraw[{\useKV[GraphiqueTikzIntersect]{Couleur}}] (\pflintercurves-\i) circle[pflpointc] ; + \MarquerPts*[Style={\useKV[GraphiqueTikzIntersect]{Style}},Couleur={\useKV[GraphiqueTikzIntersect]{Couleur}}]{(\pflintercurves-\i)} + %\filldraw[{\useKV[GraphiqueTikzIntersect]{Couleur}}] (\pflintercurves-\i) circle[pflpointc] ; } }% }% @@ -625,7 +1068,148 @@ \end{scope} } +%====MONTE CARLO +\defKV[graphiquetikzmontecarlo]{% + Couleurs=\def\graphtikzmccols{#1},% + BornesX=\def\graphtikzmcxbornes{#1},% + BornesY=\def\graphtikzmcybornes{#1} +} + +\setKVdefault[graphiquetikzmontecarlo]{% + Couleurs={blue/red},% + BornesX={\pflxmin,\pflxmax},% + BornesY={\pflymin,\pflymax} +} + +\NewDocumentCommand\SimulerMonteCarlo{ O{} D<>{f} m O{\nbptsmcok} O{\nbptsmcko} }{% + \restoreKV[graphiquetikzmontecarlo]% + \setKV[graphiquetikzmontecarlo]{#1}% + \StrCut{\graphtikzmccols}{/}{\tmpMCcolOK}{\tmpMCcolKO}% + \StrCut{\graphtikzmcxbornes}{,}{\tmpMCxmin}{\tmpMCxmax}% + \StrCut{\graphtikzmcybornes}{,}{\tmpMCymin}{\tmpMCymax}% + \xdef#4{0}% + \xdef#5{0}% + \xdef\nbptsmc{#3}% + \foreach \i in {1,...,#3}{% + \xdef\tmpMCrandX{\xintfloateval{random()*((\tmpMCxmax)-(\tmpMCxmin))+(\tmpMCxmin)}}% + \xdef\tmpMCrandY{\xintfloateval{random()*((\tmpMCymax)-(\tmpMCymin))+(\tmpMCymin)}}% + \xdef\tmpMCrandfX{\xintfloateval{#2(\tmpMCrandX)}}% + \xintifboolexpr{ \tmpMCrandfX > \tmpMCrandY }% + {% + \xdef#4{\xinteval{#4+1}}% + \filldraw[\tmpMCcolOK] (\tmpMCrandX,\tmpMCrandY) circle[pflpointmc] ; + }% + {% + \xdef#5{\xinteval{#5+1}}% + \filldraw[\tmpMCcolKO] (\tmpMCrandX,\tmpMCrandY) circle[pflpointmc] ; + }% + }% +} + +%====MÉTHODES INTÉGRALES + +\defKV[graphiquetikzintegr]{% + Couleur=\def\graphtikzintgrcol{#1},% + CouleurRemplissage=\def\graphtikzintgrcolrempl{#1},% + NbSubDiv=\def\graphtikzintgrnb{#1},% + Methode=\def\graphtikzintgrtype{#1},% + Opacite=\def\graphtikzintgropac{#1} +} + +\setKVdefault[graphiquetikzintegr]{% + Couleur=red,% + NbSubDiv=10,% + Methode=RectanglesGauche,% + Remplir=true,% + CouleurRemplissage={\graphtikzintgrcol!25},% + Opacite=0.25,% + Spline=false +} + +\NewDocumentCommand\RepresenterMethodeIntegrale{ O{} D<>{f} m m }{%opts+nom_fct/spline+a+b + \useKVdefault[graphiquetikzintegr]% + \setKV[graphiquetikzintegr]{#1}% + \ifboolKV[graphiquetikzintegr]{Remplir}% + {% + \tikzset{pflfigureintegr/.style={pfltrait,\graphtikzintgrcol,fill=\graphtikzintgrcolrempl,fill opacity=\graphtikzintgropac}}% + }% + {% + \tikzset{pflfigureintegr/.style={pfltrait,\graphtikzintgrcol}}% + }% + \tikzset{figureintegr/.style={pfltrait,\graphtikzintgrcol,fill=\graphtikzintgrcolrempl,fill opacity=\graphtikzintgropac}}% + \def\TmpH{(#4-#3)/\graphtikzintgrnb} + \ifboolKV[graphiquetikzintegr]{Spline}% + {% + \IfEq{\graphtikzintgrtype}{RectanglesGauche}% + {% + \foreach \i in {0,...,\inteval{\graphtikzintgrnb-1}}{% + \path[draw=none,pflcourbe,name path=tmpintmethod] ({#3+\i*\TmpH},{\pflymin})--({#3+\i*\TmpH},{\pflymax}) ; + \path[name intersections={of=#2 and tmpintmethod,name=KLM}] ; + \draw[pflfigureintegr] let \p1 = (KLM-1) in ({#3+\i*\TmpH},{0}) rectangle++ ({\TmpH},{\y1}) ; + }% + }% + {}% + \IfEq{\graphtikzintgrtype}{RectanglesDroite}% + {% + \foreach \i in {0,...,\inteval{\graphtikzintgrnb-1}}{% + \path[draw=none,pflcourbe,name path=tmpintmethod] ({#3+(\i+1)*\TmpH},{\pflymin})--({#3+(\i+1)*\TmpH},{\pflymax}) ; + \path[name intersections={of=#2 and tmpintmethod,name=KLM}] ; + \draw[pflfigureintegr] let \p1 = (KLM-1) in ({#3+\i*\TmpH},{0}) rectangle++ ({\TmpH},{\y1}) ; + }% + }% + {}% + \IfEq{\graphtikzintgrtype}{RectanglesMilieu}% + {% + \foreach \i in {0,...,\inteval{\graphtikzintgrnb-1}}{% + \path[draw=none,pflcourbe,name path=tmpintmethod] ({#3+(\i+0.5)*\TmpH},{\pflymin})--({#3+(\i+0.5)*\TmpH},{\pflymax}) ; + \path[name intersections={of=#2 and tmpintmethod,name=KLM}] ; + \draw[pflfigureintegr] let \p1 = (KLM-1) in ({#3+\i*\TmpH},{0}) rectangle++ ({\TmpH},{\y1}) ; + }% + }% + {}% + \IfEq{\graphtikzintgrtype}{Trapezes}% + {% + \foreach \i in {0,...,\inteval{\graphtikzintgrnb-1}}{% + \path[draw=none,pflcourbe,name path=tmpintmethodg] ({#3+(\i)*\TmpH},{\pflymin})--({#3+(\i)*\TmpH},{\pflymax}) ; + \path[name intersections={of=#2 and tmpintmethodg,name=KLMg}] ; + \path[draw=none,pflcourbe,name path=tmpintmethodd] ({#3+(\i+1)*\TmpH},{\pflymin})--({#3+(\i+1)*\TmpH},{\pflymax}) ; + \path[name intersections={of=#2 and tmpintmethodd,name=KLMd}] ; + \draw[pflfigureintegr] ({#3+\i*\TmpH},{0}) -- (KLMg-1) -- (KLMd-1) -- ({#3+(\i+1)*\TmpH},{0}) -- cycle ; + }% + }% + {}% + }% + {% + \IfEq{\graphtikzintgrtype}{RectanglesGauche}% + {% + \foreach \i in {0,...,\inteval{\graphtikzintgrnb-1}}% + \draw[pflfigureintegr] ({#3+\i*\TmpH},{0}) rectangle++ ({\TmpH},{\xintfloateval{#2(#3+\i*\TmpH)}}) ; + }% + {}% + \IfEq{\graphtikzintgrtype}{RectanglesDroite}% + {% + \foreach \i in {0,...,\inteval{\graphtikzintgrnb-1}}% + \draw[pflfigureintegr] ({#3+\i*\TmpH},{0}) rectangle++ ({\TmpH},{\xintfloateval{#2(#3+(\i+1)*\TmpH)}}) ; + }% + {}% + \IfEq{\graphtikzintgrtype}{RectanglesMilieu}% + {% + \foreach \i in {0,...,\inteval{\graphtikzintgrnb-1}}% + \draw[pflfigureintegr] ({#3+\i*\TmpH},{0}) rectangle++ ({\TmpH},{\xintfloateval{#2(#3+(\i+0.5)*\TmpH)}}) ; + }% + {}% + \IfEq{\graphtikzintgrtype}{Trapezes}% + {% + \foreach \i in {0,...,\inteval{\graphtikzintgrnb-1}}% + \draw[pflfigureintegr] ({#3+\i*\TmpH},{0}) -- ({#3+\i*\TmpH},{\xintfloateval{#2(#3+\i*\TmpH)}}) -- ({#3+(\i+1)*\TmpH},{\xintfloateval{#2(#3+(\i+1)*\TmpH)}}) -- ({#3+(\i+1)*\TmpH},{0}) -- cycle ; + }% + {}% + }% +} + + %====INTÉGRALES +%v2 avec modification de la clé [Type=...] ? \defKV[GraphiqueTikzIntegr]{% Couleurs=\def\pfldomtikzcolors{#1},% Style=\def\pfldomtikzstyle{#1},% @@ -635,20 +1219,29 @@ Pas=\def\pflstepcurve{#1},% Bornes=\def\pflintbornes{#1},% Jonction=\def\pfldomtikzjoin{#1},% - NomSpline=\def\pfldomtikznamespline{#1} + NomInterpo=\def\pfldomtikznameinterpo{#1},% + NomInterpoB=\def\pfldomtikznameinterpob{#1},% + NomSpline=\def\pfldomtikznamespline{#1},% + NomSplineB=\def\pfldomtikznamesplineb{#1} } \setKVdefault[GraphiqueTikzIntegr]{% Couleurs=gray,% Style=remplissage,% Opacite=0.5,% Hachures={north west lines},% - Type=dessous,% + Type=fct,% Pas={},% Jonction=bevel,% Bornes=abs,% Bord=true,% Spline=false,% - NomSpline={\monspline} + SplineB=false,% + NomInterpo={\moninterpo},% + NomInterpoB={\moninterpoB},% + NomSpline={\monspline},% + NomSplineB={\monsplineB},% + Tension=0.5,% + TensionB=0.5 } \NewDocumentCommand\TracerIntegrale{ O{} D<>{} m O{0} m m }{% @@ -675,15 +1268,15 @@ \tikzset{integralebordtikzstyle/.style={draw=none}} }% \IfStrEq{\pfldomtikzstyle}{hachures}% - {% - \tikzset{integraletikzstyle/.style={pfltrait,pattern=\pfldomtikzhatch,pattern color=\pfldomtikzcolorfond,line join=\pfldomtikzjoin}} - }% - {}% + {% + \tikzset{integraletikzstyle/.style={pfltrait,pattern=\pfldomtikzhatch,pattern color=\pfldomtikzcolorfond,line join=\pfldomtikzjoin}} + }% + {}% \IfStrEq{\pfldomtikzstyle}{remplissage}% - {% - \tikzset{integraletikzstyle/.style={pfltrait,fill=\pfldomtikzcolorfond,fill opacity=\pfldomtikzopac,line join=\pfldomtikzjoin}} - }% - {}% + {% + \tikzset{integraletikzstyle/.style={pfltrait,fill=\pfldomtikzcolorfond,fill opacity=\pfldomtikzopac,line join=\pfldomtikzjoin}} + }% + {}% %extraction des infos x/y \IfStrEqCase{\pflintbornes}{% {abs}% @@ -715,43 +1308,193 @@ \xdef\absnoeudB{#6}% }% }% - %suite + %suite avec les nbs points \IfStrEq{\pflstepcurve}{}% {% \xdef\pflstepcurve{\xintfloateval{((\absnoeudB)-(\absnoeudA))/100}}% }% {}% - \IfStrEq{\pfldomtikztype}{dessous}% - {% - \ifboolKV[GraphiqueTikzIntegr]{Spline}% - {% - \begin{scope} - \clip ({\absnoeudA},{\pflymin}) rectangle ({\absnoeudB},{\pflymax}) ; - \filldraw[integraletikzstyle,integralebordtikzstyle,#2] ({\absnoeudA},{\pflOy}) -- \pfldomtikznamespline -- ({\absnoeudB},{\pflOy}) -- cycle ; - \end{scope} - \path[draw=none,pflcourbe,name path=tmpintbornea] ({\absnoeudA},{\pflymin})--({\absnoeudA},{\pflymax}) ; - \path[name intersections={of=#3 and tmpintbornea,name=YYY}] ; - \draw[\pfldomtikzcolorbord,pfltrait] ({\absnoeudA},{\pflOy})-- (YYY-1) ; - \path[draw=none,pflcourbe,name path=tmpintborneb] ({\absnoeudB},{\pflymin})--({\absnoeudB},{\pflymax}) ; - \path[name intersections={of=#3 and tmpintborneb,name=ZZZ}] ; - \draw[\pfldomtikzcolorbord,pfltrait] ({\absnoeudB},{\pflOy})-- (ZZZ-1) ; - }% - {% - \begin{scope} - \clip ({\pflxmin},{\pflymin}) rectangle ({\pflxmax},{\pflymax}); - \draw[integraletikzstyle,integralebordtikzstyle,#2] ({\absnoeudA},{\pflOy}) -- plot[smooth] coordinates {\xintthecoords\xintfloatexpr seq((x,#3),x=\absnoeudA..[\pflstepcurve]..\absnoeudB,\absnoeudB)\relax} -- ({\absnoeudB},{\pflOy}) -- cycle ; - \end{scope} - }% - }% - {}% - \IfStrEq{\pfldomtikztype}{entre}% - {% - \begin{scope} - \clip ({\pflxmin},{\pflymin}) rectangle ({\pflxmax},{\pflymax}); - \draw[integraletikzstyle,integralebordtikzstyle,#2] plot[smooth] coordinates {\xintthecoords\xintfloatexpr seq((x,#3),x=\absnoeudA..[\pflstepcurve]..\absnoeudB,\absnoeudB)\relax} -- plot[smooth] coordinates {\xintthecoords\xintfloatexpr seq((x,#4),x=\absnoeudB..[-(\pflstepcurve)]..\absnoeudA,\absnoeudA)\relax} -- cycle ; - \end{scope} - }% - {}% + %TRACÉSen fonction des types de courbes + \IfStrEq{\pfldomtikztype}{fct}% + {%OK + \begin{scope} + \clip ({\pflxmin},{\pflymin}) rectangle ({\pflxmax},{\pflymax}); + \draw[integraletikzstyle,integralebordtikzstyle,#2] ({\absnoeudA},{\pflOy}) -- plot[smooth] coordinates {\xintthecoords\xintfloatexpr seq((x,#3),x=\absnoeudA..[\pflstepcurve]..\absnoeudB,\absnoeudB)\relax} -- ({\absnoeudB},{\pflOy}) -- cycle ; + \end{scope} + }% + {}% + \IfStrEq{\pfldomtikztype}{spl}%avec 3=courbe spline + clé [Spline] à utiliser ! + {%OK + \begin{scope} + \clip ({\absnoeudA},{\pflymin}) rectangle ({\absnoeudB},{\pflymax}) ; + \filldraw[integraletikzstyle,integralebordtikzstyle,#2] ({\absnoeudA},{\pflOy}) -- \pfldomtikznamespline -- ({\absnoeudB},{\pflOy}) -- cycle ; + \end{scope} + \path[draw=none,pflcourbe,name path=tmpintbornea] ({\absnoeudA},{\pflymin})--({\absnoeudA},{\pflymax}) ; + \path[name intersections={of=#3 and tmpintbornea,name=YYY}] ; + \draw[\pfldomtikzcolorbord,pfltrait] ({\absnoeudA},{\pflOy})-- (YYY-1) ; + \path[draw=none,pflcourbe,name path=tmpintborneb] ({\absnoeudB},{\pflymin})--({\absnoeudB},{\pflymax}) ; + \path[name intersections={of=#3 and tmpintborneb,name=ZZZ}] ; + \draw[\pfldomtikzcolorbord,pfltrait] ({\absnoeudB},{\pflOy})-- (ZZZ-1) ; + }% + {}% + \IfStrEq{\pfldomtikztype}{itp}%avec 3=courbe interpo + {%OK + \begin{scope} + \clip ({\absnoeudA},{\pflymin}) rectangle ({\absnoeudB},{\pflymax}) ; + \filldraw[integraletikzstyle,integralebordtikzstyle,#2] ({\absnoeudA},{\pflOy}) -- plot [smooth,tension={\useKV[GraphiqueTikzIntegr]{Tension}}] coordinates {#3} -- ({\absnoeudB},{\pflOy}) -- cycle ; + \end{scope} + \path[draw=none,pflcourbe,name path=tmpintbornea] ({\absnoeudA},{\pflymin})--({\absnoeudA},{\pflymax}) ; + \path[name intersections={of=tmpintbornea and \pfldomtikznameinterpo,name=YYY}] ; + \draw[\pfldomtikzcolorbord,pfltrait] ({\absnoeudA},{\pflOy})-- (YYY-1) ; + \path[draw=none,pflcourbe,name path=tmpintborneb] ({\absnoeudB},{\pflymin})--({\absnoeudB},{\pflymax}) ; + \path[name intersections={of=tmpintborneb and \pfldomtikznameinterpo,name=ZZZ}] ; + \draw[\pfldomtikzcolorbord,pfltrait] ({\absnoeudB},{\pflOy})-- (ZZZ-1) ; + }% + {}% + \IfStrEq{\pfldomtikztype}{fct/fct}%avec #3=formule et #4=formule + {% + \begin{scope} + \clip ({\pflxmin},{\pflymin}) rectangle ({\pflxmax},{\pflymax}); + \draw[integraletikzstyle,integralebordtikzstyle,#2] plot[smooth] coordinates {\xintthecoords\xintfloatexpr seq((x,#3),x=\absnoeudA..[\pflstepcurve]..\absnoeudB,\absnoeudB)\relax} -- plot[smooth] coordinates {\xintthecoords\xintfloatexpr seq((x,#4),x=\absnoeudB..[-(\pflstepcurve)]..\absnoeudA,\absnoeudA)\relax} -- cycle ; + \end{scope} + }% + {}% + \IfStrEq{\pfldomtikztype}{spl/spl}%avec #3=cbe spline + #4=cbe splineB + {% + \begin{scope} + \clip ({\absnoeudA},{\pflymin}) rectangle ({\absnoeudB},{\pflymax}) ; + \clip ({\absnoeudA},{\pflymin}) -- \pfldomtikznamespline -- ({\absnoeudB},{\pflymin}) -- cycle ; + \clip ({\absnoeudA},{\pflymax}) -- \pfldomtikznamesplineb -- ({\absnoeudB},{\pflymax}) -- cycle ; + \filldraw[integraletikzstyle,integralebordtikzstyle,#2] ({\absnoeudA},{\pflymin}) rectangle ({\absnoeudB},{\pflymax}) ; + \end{scope} + \path[draw=none,pflcourbe,name path=tmpintbornea] ({\absnoeudA},{\pflymin})--({\absnoeudA},{\pflymax}) ; + \path[name intersections={of=#3 and tmpintbornea,name=YYYA}] ; + \path[name intersections={of=#4 and tmpintbornea,name=ZZZA}] ; + \path[draw=none,pflcourbe,name path=tmpintborneb] ({\absnoeudB},{\pflymin})--({\absnoeudB},{\pflymax}) ; + \path[name intersections={of=#3 and tmpintborneb,name=YYYB}] ; + \path[name intersections={of=#4 and tmpintborneb,name=ZZZB}] ; + \draw[\pfldomtikzcolorbord,pfltrait] (YYYA-1)-- (ZZZA-1) ; + \draw[\pfldomtikzcolorbord,pfltrait] (YYYB-1)-- (ZZZB-1) ; + }% + {}% + \IfStrEq{\pfldomtikztype}{itp/itp}%avec #3=cbe interpo + #4=cbe interpoB + {% + \begin{scope} + \clip ({\absnoeudA},{\pflymin}) rectangle ({\absnoeudB},{\pflymax}) ; + \clip ({\absnoeudA},{\pflymin}) -- plot [smooth,tension={\useKV[GraphiqueTikzIntegr]{Tension}}] coordinates {#3} -- ({\absnoeudB},{\pflymin}) ; + \clip ({\absnoeudA},{\pflymax}) -- plot [smooth,tension={\useKV[GraphiqueTikzIntegr]{TensionB}}] coordinates {#4} -- ({\absnoeudB},{\pflymax}) ; + \filldraw[integraletikzstyle,integralebordtikzstyle,#2] ({\absnoeudA},{\pflymin}) rectangle ({\absnoeudB},{\pflymax}) ; + \end{scope} + \path[draw=none,pflcourbe,name path=tmpintbornea] ({\absnoeudA},{\pflymin})--({\absnoeudA},{\pflymax}) ; + \path[name intersections={of=tmpintbornea and \pfldomtikznameinterpo,name=YYYA}] ; + \path[name intersections={of=tmpintbornea and \pfldomtikznameinterpob,name=ZZZA}] ; + \path[draw=none,pflcourbe,name path=tmpintborneb] ({\absnoeudB},{\pflymin})--({\absnoeudB},{\pflymax}) ; + \path[name intersections={of=tmpintborneb and \pfldomtikznameinterpo,name=YYYB}] ; + \path[name intersections={of=tmpintborneb and \pfldomtikznameinterpob,name=ZZZB}] ; + \draw[\pfldomtikzcolorbord,pfltrait] (YYYA-1)-- (ZZZA-1) ; + \draw[\pfldomtikzcolorbord,pfltrait] (YYYB-1)-- (ZZZB-1) ; + }% + {}% + \IfStrEq{\pfldomtikztype}{fct/spl}%avec #3=formule + #4=spline + {% + \begin{scope} + \clip ({\absnoeudA},{\pflymin}) rectangle ({\absnoeudB},{\pflymax}) ; + \clip ({\absnoeudA},{\pflymin}) -- plot[smooth] coordinates {\xintthecoords\xintfloatexpr seq((x,#3),x=\absnoeudA..[\pflstepcurve]..\absnoeudB,\absnoeudB)\relax} -- ({\absnoeudB},{\pflymin}) -- cycle ; + \clip ({\absnoeudA},{\pflymax}) -- \pfldomtikznamesplineb -- ({\absnoeudB},{\pflymax}) -- cycle ; + \filldraw[integraletikzstyle,integralebordtikzstyle,#2] ({\absnoeudA},{\pflymin}) rectangle ({\absnoeudB},{\pflymax}) ; + \end{scope} + \path[draw=none,pflcourbe,name path=tmpintbornea] ({\absnoeudA},{\pflymin})--({\absnoeudA},{\pflymax}) ; + \path[name intersections={of=tmpintbornea and #4,name=ZZZA}] ; + \path[draw=none,pflcourbe,name path=tmpintborneb] ({\absnoeudB},{\pflymin})--({\absnoeudB},{\pflymax}) ; + \path[name intersections={of=tmpintborneb and #4,name=ZZZB}] ; + \draw[\pfldomtikzcolorbord,pfltrait] ({\absnoeudA},{\xintfloateval{subs(#3,x=\absnoeudA)}})-- (ZZZA-1) ; + \draw[\pfldomtikzcolorbord,pfltrait] ({\absnoeudB},{\xintfloateval{subs(#3,x=\absnoeudB)}})-- (ZZZB-1) ; + }% + {}% + \IfStrEq{\pfldomtikztype}{spl/fct}%avec #3=spline + #4=fct + {% + \begin{scope} + \clip ({\absnoeudA},{\pflymin}) rectangle ({\absnoeudB},{\pflymax}) ; + \clip ({\absnoeudA},{\pflymax}) -- plot[smooth] coordinates {\xintthecoords\xintfloatexpr seq((x,#4),x=\absnoeudA..[\pflstepcurve]..\absnoeudB,\absnoeudB)\relax} -- ({\absnoeudB},{\pflymax}) -- cycle ; + \clip ({\absnoeudA},{\pflymin}) -- \pfldomtikznamespline -- ({\absnoeudB},{\pflymin}) -- cycle ; + \filldraw[integraletikzstyle,integralebordtikzstyle,#2] ({\absnoeudA},{\pflymin}) rectangle ({\absnoeudB},{\pflymax}) ; + \end{scope} + \path[draw=none,pflcourbe,name path=tmpintbornea] ({\absnoeudA},{\pflymin})--({\absnoeudA},{\pflymax}) ; + \path[name intersections={of=tmpintbornea and #3,name=ZZZA}] ; + \path[draw=none,pflcourbe,name path=tmpintborneb] ({\absnoeudB},{\pflymin})--({\absnoeudB},{\pflymax}) ; + \path[name intersections={of=tmpintborneb and #3,name=ZZZB}] ; + \draw[\pfldomtikzcolorbord,pfltrait] ({\absnoeudA},{\xintfloateval{subs(#4,x=\absnoeudA)}})-- (ZZZA-1) ; + \draw[\pfldomtikzcolorbord,pfltrait] ({\absnoeudB},{\xintfloateval{subs(#4,x=\absnoeudB)}})-- (ZZZB-1) ; + }% + {}% + \IfStrEq{\pfldomtikztype}{fct/itp}%avec #3=formule + #4=liste interpo + {% + \begin{scope} + \clip ({\absnoeudA},{\pflymin}) rectangle ({\absnoeudB},{\pflymax}) ; + \clip ({\absnoeudA},{\pflymin}) -- plot[smooth] coordinates {\xintthecoords\xintfloatexpr seq((x,#3),x=\absnoeudA..[\pflstepcurve]..\absnoeudB,\absnoeudB)\relax} -- ({\absnoeudB},{\pflymin}) -- cycle ; + \clip ({\absnoeudA},{\pflymax}) -- plot [smooth,tension={\useKV[GraphiqueTikzIntegr]{TensionB}}] coordinates {#4} -- ({\absnoeudB},{\pflymax}) ; + \filldraw[integraletikzstyle,integralebordtikzstyle,#2] ({\absnoeudA},{\pflymin}) rectangle ({\absnoeudB},{\pflymax}) ; + \end{scope} + \path[draw=none,pflcourbe,name path=tmpintbornea] ({\absnoeudA},{\pflymin})--({\absnoeudA},{\pflymax}) ; + \path[draw=none,pflcourbe,name path=tmpintborneb] ({\absnoeudB},{\pflymin})--({\absnoeudB},{\pflymax}) ; + \path[name intersections={of=tmpintbornea and \pfldomtikznameinterpob,name=ZZZAA}] ; + \path[name intersections={of=tmpintborneb and \pfldomtikznameinterpob,name=ZZZAB}] ; + \draw[\pfldomtikzcolorbord,pfltrait] ({\absnoeudA},{\xintfloateval{subs(#3,x=\absnoeudA)}})-- (ZZZAA-1) ; + \draw[\pfldomtikzcolorbord,pfltrait] ({\absnoeudB},{\xintfloateval{subs(#3,x=\absnoeudB)}})-- (ZZZAB-1) ; + }% + {}% + \IfStrEq{\pfldomtikztype}{itp/fct}% + {% + \begin{scope} + \clip ({\absnoeudA},{\pflymin}) rectangle ({\absnoeudB},{\pflymax}) ; + \clip ({\absnoeudA},{\pflymax}) -- plot[smooth] coordinates {\xintthecoords\xintfloatexpr seq((x,#4),x=\absnoeudA..[\pflstepcurve]..\absnoeudB,\absnoeudB)\relax} -- ({\absnoeudB},{\pflymax}) -- cycle ; + \clip ({\absnoeudA},{\pflymin}) -- plot [smooth,tension={\useKV[GraphiqueTikzIntegr]{Tension}}] coordinates {#3} -- ({\absnoeudB},{\pflymin}) ; + \filldraw[integraletikzstyle,integralebordtikzstyle,#2] ({\absnoeudA},{\pflymin}) rectangle ({\absnoeudB},{\pflymax}) ; + \end{scope} + \path[draw=none,pflcourbe,name path=tmpintbornea] ({\absnoeudA},{\pflymin})--({\absnoeudA},{\pflymax}) ; + \path[draw=none,pflcourbe,name path=tmpintborneb] ({\absnoeudB},{\pflymin})--({\absnoeudB},{\pflymax}) ; + \path[name intersections={of=tmpintbornea and \pfldomtikznameinterpo,name=ZZZAA}] ; + \path[name intersections={of=tmpintborneb and \pfldomtikznameinterpo,name=ZZZAB}] ; + \draw[\pfldomtikzcolorbord,pfltrait] ({\absnoeudA},{\xintfloateval{subs(#4,x=\absnoeudA)}})-- (ZZZAA-1) ; + \draw[\pfldomtikzcolorbord,pfltrait] ({\absnoeudB},{\xintfloateval{subs(#4,x=\absnoeudB)}})-- (ZZZAB-1) ; + }% + {}% + \IfStrEq{\pfldomtikztype}{itp/spl}% + {% + \begin{scope} + \clip ({\absnoeudA},{\pflymin}) rectangle ({\absnoeudB},{\pflymax}) ; + \clip ({\absnoeudA},{\pflymin}) -- plot [smooth,tension={\useKV[GraphiqueTikzIntegr]{Tension}}] coordinates {#3} -- ({\absnoeudB},{\pflymin}) ; + \clip ({\absnoeudA},{\pflymax}) -- \pfldomtikznamesplineb -- ({\absnoeudB},{\pflymax}) -- cycle ; + \filldraw[integraletikzstyle,integralebordtikzstyle,#2] ({\absnoeudA},{\pflymin}) rectangle ({\absnoeudB},{\pflymax}) ; + \end{scope} + \path[draw=none,pflcourbe,name path=tmpintbornea] ({\absnoeudA},{\pflymin})--({\absnoeudA},{\pflymax}) ;%borne inf + \path[draw=none,pflcourbe,name path=tmpintborneb] ({\absnoeudB},{\pflymin})--({\absnoeudB},{\pflymax}) ;%borne sup + \path[name intersections={of=tmpintbornea and \pfldomtikznameinterpo,name=YYYKAA}] ; + \path[name intersections={of=tmpintborneb and \pfldomtikznameinterpo,name=YYYKBB}] ; + \path[name intersections={of=tmpintbornea and #4,name=ZZZKAA}] ; + \path[name intersections={of=tmpintborneb and #4,name=ZZZKBB}] ; + \draw[\pfldomtikzcolorbord,pfltrait] (YYYKAA-1)-- (ZZZKAA-1) ; + \draw[\pfldomtikzcolorbord,pfltrait] (YYYKBB-1)-- (ZZZKBB-1) ; + }% + {}% + \IfStrEq{\pfldomtikztype}{spl/itp}% + {% + \begin{scope} + \clip ({\absnoeudA},{\pflymin}) rectangle ({\absnoeudB},{\pflymax}) ; + \clip ({\absnoeudA},{\pflymax}) -- plot [smooth,tension={\useKV[GraphiqueTikzIntegr]{TensionB}}] coordinates {#4} -- ({\absnoeudB},{\pflymax}) ; + \clip ({\absnoeudA},{\pflymin}) -- \pfldomtikznamespline -- ({\absnoeudB},{\pflymin}) -- cycle ; + \filldraw[integraletikzstyle,integralebordtikzstyle,#2] ({\absnoeudA},{\pflymin}) rectangle ({\absnoeudB},{\pflymax}) ; + \end{scope} + \path[draw=none,pflcourbe,name path=tmpintbornea] ({\absnoeudA},{\pflymin})--({\absnoeudA},{\pflymax}) ;%borne inf + \path[draw=none,pflcourbe,name path=tmpintborneb] ({\absnoeudB},{\pflymin})--({\absnoeudB},{\pflymax}) ;%borne sup + \path[name intersections={of=tmpintbornea and \pfldomtikznameinterpob,name=YYYKAA}] ; + \path[name intersections={of=tmpintborneb and \pfldomtikznameinterpob,name=YYYKBB}] ; + \path[name intersections={of=tmpintbornea and #3,name=ZZZKAA}] ; + \path[name intersections={of=tmpintborneb and #3,name=ZZZKBB}] ; + \draw[\pfldomtikzcolorbord,pfltrait] (YYYKAA-1)-- (ZZZKAA-1) ; + \draw[\pfldomtikzcolorbord,pfltrait] (YYYKBB-1)-- (ZZZKBB-1) ; + }% + {}% } \NewDocumentCommand\PlacerPoints{ s O{black} D<>{\normalfont\normalsize} m }{% @@ -763,7 +1506,7 @@ }% {% \foreach \Point/\Pos/\Label in {#4}{% - \filldraw[#2] \Point circle[pflpointc] node[\Pos,font=#3] {\Label} ; + \filldraw[#2] \Point circle[pflpointc] node[pflnoeud,\Pos,font=#3] {\Label} ; } }% } @@ -772,17 +1515,22 @@ \defKV[GraphiqueTikzRegLin]{% Arrondis=\def\pflarrondisreglin{#1}, Nom=\def\pflnamereglin{#1}, + NomPara=\def\pflnameregquad{#1}, Debut=\def\pflreglinmin{#1}, Fin=\def\pflreglinmax{#1} } \setKVdefault[GraphiqueTikzRegLin]{ CouleurNuage=black, CouleurDroite=black, + CouleurPara=black, Arrondis={}, Debut={\pflxmin}, Fin={\pflxmax}, - Nom=reglin, - TracerDroite=false + Nom=reglin,% + NomPara=quadreg,% + TracerDroite=false,% + TracerParabole=false,% + Style=o } \NewDocumentCommand\TracerNuage{ O{} D<>{d} m m }{% @@ -797,14 +1545,13 @@ \def\LNB{\inteval{\LXlen}} %nuage \foreach \i in {1,...,\LXlen}{% - \filldraw[{\useKV[GraphiqueTikzRegLin]{CouleurNuage}}] ({\LX[\i]},{\LY[\i]}) circle[pflpointnuage] ; + \itemtomacro\LX[\i]\tmpmavalx% + \itemtomacro\LY[\i]\tmpmavaly% + \MarquerPts*[Style={\useKV[GraphiqueTikzRegLin]{Style}},Couleur={\useKV[GraphiqueTikzRegLin]{CouleurNuage}}]{(\tmpmavalx,\tmpmavaly)}% } %droite de régression \ifboolKV[GraphiqueTikzRegLin]{TracerDroite}% {% - %mini LX - \def\tmpxminreglin{\fpeval{min(#2)}} - \def\tmpxmaxreglin{\fpeval{max(#2)}} %somme des LX et des LY OK \xdef\LXSomme{0} \xdef\LYSomme{0} @@ -859,19 +1606,158 @@ \end{scope} }% {}% + \ifboolKV[GraphiqueTikzRegLin]{TracerParabole}% + {% + %somme importantes + \xdef\LXSomme{0}% + \xdef\LXCSomme{0}% + \xdef\LYSomme{0}% + \xdef\LXXSomme{0}% + \xdef\LXYSomme{0}% + \xdef\LXXCSomme{0}% + \xdef\LXCXCSomme{0}% + \xdef\LXCYSomme{0}% + %calculs + \foreach \i in {1,2,...,\LNB}{% + \xdef\LXSomme{\xintfloateval{\LXSomme+\LX[\i]}}% + \xdef\LXCSomme{\xintfloateval{\LXCSomme+(\LX[\i])^2}}% + }% + \foreach \i in {1,2,...,\LNB}{% + \xdef\LYSomme{\xintfloateval{\LYSomme+\LY[\i]}}% + }% + \xdef\LXmoy{\xintfloateval{\LXSomme/\LNB}}% + \xdef\LYmoy{\xintfloateval{\LYSomme/\LNB}}% + \xdef\LXCmoy{\xintfloateval{\LXCSomme/\LNB}}% + %calculs suites + \foreach \i in {1,2,...,\LNB}{% + \xdef\LXXSomme{\xintfloateval{\LXXSomme+(\LX[\i]-\LXmoy)^2}}% + \xdef\LXYSomme{\xintfloateval{\LXYSomme+(\LX[\i]-\LXmoy)*(\LY[\i]-\LYmoy)}}% + \xdef\LXXCSomme{\xintfloateval{\LXXCSomme+(\LX[\i]-\LXmoy)*((\LX[\i])*(\LX[\i])-\LXCmoy)}}% + \xdef\LXCXCSomme{\xintfloateval{\LXCXCSomme+((\LX[\i])^2-\LXCmoy)^2}}% + \xdef\LXCYSomme{\xintfloateval{\LXCYSomme+((\LX[\i])^2-\LXCmoy)*(\LY[\i]-\LYmoy)}}% + }% + %COEFFS OK + \IfStrEq{\pflarrondisreglin}{}% + {% + \xdef\tmpcoeffregquadb{\xintfloateval{(\LXYSomme*\LXCXCSomme-\LXCYSomme*\LXXCSomme)/(\LXXSomme*\LXCXCSomme-(\LXXCSomme)^2)}} + \xdef\tmpcoeffregquada{\xintfloateval{(\LXCYSomme*\LXXSomme-\LXYSomme*\LXXCSomme)/(\LXXSomme*\LXCXCSomme-(\LXXCSomme)^2)}} + \xdef\tmpcoeffregquadc{\xintfloateval{\LYmoy-\tmpcoeffregquadb*\LXmoy-\tmpcoeffregquada*\LXCmoy}} + }% + {% + \xdef\tmpcoeffregquadb{\xintfloateval{round((\LXYSomme*\LXCXCSomme-\LXCYSomme*\LXXCSomme)/(\LXXSomme*\LXCXCSomme-(\LXXCSomme)^2),\pflarrondisreglin)}} + \xdef\tmpcoeffregquada{\xintfloateval{round((\LXCYSomme*\LXXSomme-\LXYSomme*\LXXCSomme)/(\LXXSomme*\LXCXCSomme-(\LXXCSomme)^2),\pflarrondisreglin)}} + \xdef\tmpcoeffregquadc{\xintfloateval{round(\LYmoy-\tmpcoeffregquadb*\LXmoy-\tmpcoeffregquada*\LXCmoy,\pflarrondisreglin)}} + }% + \xintdeffloatfunc #2(x) := (\tmpcoeffregquada)*x^2+(\tmpcoeffregquadb)*x+\tmpcoeffregquadc ; + %tracé + \begin{scope} + \clip ({\pflxmin},{\pflymin}) rectangle ({\pflxmax},{\pflymax}); + \draw[pflcourbe,{\useKV[GraphiqueTikzRegLin]{CouleurPara}},name path global=\pflnameregquad,samples=250,domain=\pflreglinmin:\pflreglinmax] plot (\x,{\tmpcoeffregquada*(\x)^2+\tmpcoeffregquadb*\x+\tmpcoeffregquadc}) ; + \end{scope} + }% + {}% +} + +\if@loadxintreg +%régressions alternatives +\NewDocumentCommand\TracerAjustement{ O{} D<>{cbajust} m D<>{} m m }{% + %1=options de tracés + %2=nom courbe + %3=type + %4=arrondis + %5=liste X + %6=liste Y + \IfStrEq{#3}{lin}% + {% + \xintlinreg[round={#4}]{#5}{#6}% + \DefinirFonction[#1,Trace]<#2>{\linrega*x+\linregb}% + }% + {}% + \IfStrEq{#3}{quad}% + {% + \xintquadreg[round={#4}]{#5}{#6}% + \DefinirFonction[#1,Trace]<#2>{\quadrega*x^2+\quadregb*x+\quadregc}% + }% + {}% + \IfStrEq{#3}{pow}% + {% + \xintpowreg[round={#4}]{#5}{#6}% + \DefinirFonction[#1,Trace]<#2>{\powrega*x^(\powregb)}% + }% + {}% + \IfStrEq{#3}{expab}% + {% + \xintexpabreg[round={#4}]{#5}{#6}% + \DefinirFonction[#1,Trace]<#2>{\expabrega*(\expabregb)^x}% + }% + {}% + \IfStrEq{#3}{hyp}% + {% + \xinthypreg[round={#4}]{#5}{#6}% + \DefinirFonction[#1,Trace]<#2>{\hyprega+(\hypregb)/x}% + }% + {}% + \IfStrEq{#3}{log}% + {% + \xintlogreg[round={#4}]{#5}{#6}% + \DefinirFonction[#1,Trace]<#2>{\logrega+(\logregb)*log(x)}% + }% + {}% + \IfStrEq{#3}{exp}% + {% + \xintexpreg[round={#4}]{#5}{#6}% + \DefinirFonction[#1,Trace]<#2>{exp(\exprega*x+\expregb)}% + }% + {}% + \IfStrEq{#3}{expalt}% + {% + \xintexpreg[Alt,round={#4}]{#5}{#6}% + \DefinirFonction[#1,Trace]<#2>{\expregb*exp(\exprega*x)}% + }% + {}% + \IfStrEq{#3}{cub}% + {% + \xintcubreg[round={#4}]{#5}{#6}% + \DefinirFonction[#1,Trace]<#2>{\cubrega*x^3+\cubregb*x^2+\cubregc*x+\cubregd}% + }% + {}% + \IfSubStr{#3}{expoff}% + {% + \StrBehind{#3}{=}[\expoffset]% + \xintexpoffreg[round={#4},offset=\expoffset]{#5}{#6}% + \DefinirFonction[#1,Trace]<#2>{\expoffset+\expregoffb*exp(\expregoffa*x)}% + }% + {}% } +\fi %===IMAGES & ANTÉCÉDENTS \defKV[GraphiqueTikzImg]{ Couleurs=\def\pflimgcolors{#1},% - Nom=\def\pflantecednoms{#1} + Nom=\def\pflantecednoms{#1}% } \setKVdefault[GraphiqueTikzImg]{ - Couleurs=black, - Traits=false, + Couleurs=black,% + Traits=false,% Spline=false,% - Nom={} + Nom={},% + Style=o +} + +\NewDocumentCommand\DefinirImage{ O{} m m }{% + \useKVdefault[GraphiqueTikzImg]% + \setKV[GraphiqueTikzImg]{#1}% + \ifboolKV[GraphiqueTikzImg]{Spline}% + {% + \path[draw=none,pflcourbe,name path=tmpimage] ({#3},{\pflymin})--({#3},{\pflymax}) ; + \path[name intersections={of=#2 and tmpimage,name=ZZZZ}] ; + \coordinate (\pflantecednoms) at (ZZZZ-1) ; + }% + {% + \xdef\tmpresimg{\xintfloateval{#2(#3)}}% + \coordinate (\pflantecednoms) at ({#3},{\tmpresimg}) ; + }% } \NewDocumentCommand\PlacerImages{ O{} m m }{% @@ -894,7 +1780,8 @@ \draw[\pflimgcolorline,pfltraitimg] let \p1 = (ZZ-1) in ({\x1},{\pflOy}) |- ({\pflOx},{\y1}) ; }% {}% - \filldraw[\pflimgcolorpt] (ZZ-1) circle[radius=2pt] ; + \MarquerPts*[Style={\useKV[GraphiqueTikzImg]{Style}},Couleur=\pflimgcolorpt]{(ZZ-1)} + %\filldraw[\pflimgcolorpt] (ZZ-1) circle[radius=2pt] ; } }% {% @@ -905,9 +1792,10 @@ \draw[\pflimgcolorline,pfltraitimg] ({\i},{\pflOy}) |- ({\pflOx},{\tmpresimg}) ; }% {}% - \filldraw[\pflimgcolorpt] ({\i},{\tmpresimg}) circle[radius=2pt] ; + \MarquerPts*[Style={\useKV[GraphiqueTikzImg]{Style}},Couleur=\pflimgcolorpt]{({\i},{\tmpresimg})} + %\filldraw[\pflimgcolorpt] ({\i},{\tmpresimg}) circle[radius=2pt] ; }% - } + }% } \NewDocumentCommand\PlacerAntecedents{ O{} m m }{%avec le nom de la courbe... @@ -943,14 +1831,1221 @@ \draw[\pflimgcolorline,pfltraitimg] let \p1 = (ZZ-\i) in (ZZ-\i) -- ({\x1},{\pflOy}) ; }% {}% - \filldraw[\pflimgcolorpt] (ZZ-\i) circle[radius=2pt] ; + \MarquerPts*[Style={\useKV[GraphiqueTikzImg]{Style}},Couleur=\pflimgcolorpt]{(ZZ-\i)} + %\filldraw[\pflimgcolorpt] (ZZ-\i) circle[radius=2pt] ; }% }% \end{scope} } -%====SPLINES CUBIQUES -\newcommand\pflextractcoeff[2]{%1=liste,2=numero +%===NOMBRE DÉRIVÉ ET TANGENTE (EXPÉRIEMENTAL) +\NewDocumentCommand\CalculerNbDerive{ s m m m }{%*=gauche+nomfct+abspt+h + \IfBooleanTF{#1}% + {% + \xdef\TmpResNbDeriv{\xintfloateval{(#2(#3)-#2(#3-#4))/(#4)}}% + }% + {% + \xdef\TmpResNbDeriv{\xintfloateval{(#2(#3+#4)-#2(#3))/(#4)}}% + }% +} + +\defKV[GraphiqueTikzTgte]{% + Couleurs=\def\pfltgttikzcolors{#1},% + DecG=\def\pfltgttikzkl{#1},% + DecD=\def\pfltgttikzkr{#1},% + h=\def\pfltgttikzh{#1},% + Sens=\def\pfltgttikzsens{#1},% + Delta=\def\tmptgtedelta{#1} +} +\setKVdefault[GraphiqueTikzTgte]{% + Couleurs=black,% + DecG=1,% + DecD=1,% + AffPoint=false,% + Spline=false,% + h=0.1,% + Sens=gd,% + Noeud=false,% + Delta=0.01,% + Style=o +} + +\NewDocumentCommand\TracerTangente{ O{} m m D<>{} }{% + \restoreKV[GraphiqueTikzTgte]% + \setKV[GraphiqueTikzTgte]{#1}% + %en fonction de la gestion de l'abscisse + \ifboolKV[GraphiqueTikzTgte]{Noeud}% + {% + \path #3; + \pgfgetlastxy{\macrox}{\macroy}% + \xdef\pfltgttikzx{\xintfloateval{(\ConvertirPtToCm{\macrox})/(\pflxunit)}}% + }% + {% + \xdef\pfltgttikzx{#3}% + }% + %parties communes + \IfSubStr{\pfltgttikzcolors}{/}% + {% + \StrCut{\pfltgttikzcolors}{/}{\pfltgttikzline}{\pfltgttikzpoint} + }% + {% + \xdef\pfltgttikzline{\pfltgttikzcolors}\xdef\pfltgttikzpoint{\pfltgttikzcolors} + }% + \xdef\tmptgtdeb{\xintfloateval{\pfltgttikzx-(\pfltgttikzkl)}}% + \xdef\tmptgtfin{\xintfloateval{\pfltgttikzx+(\pfltgttikzkr)}}% + %suivant le type de courbe + \ifboolKV[GraphiqueTikzTgte]{Spline}% + {% + \path[name path=tmpimage] ({\pfltgttikzx},{\pflymin})--({\pfltgttikzx},{\pflymax}) ; + \path[name intersections={of=#2 and tmpimage,name=TANp}] ; + \IfStrEq{\pfltgttikzsens}{gd}% + {% + \path[name path=L-vline] ({\pfltgttikzx-\tmptgtedelta},{\pflymin}) -- ({\pfltgttikzx-\tmptgtedelta},{\pflymax}) ; + \path[name path=R-vline] ({\pfltgttikzx+\tmptgtedelta},{\pflymin}) -- ({\pfltgttikzx+\tmptgtedelta},{\pflymax}) ; + %\coordinate (LXcoor) at ($(TANp-1)+({-\tmptgtedelta},0)$) ; + %\coordinate (RXcoor) at ($(TANp-1)+({\tmptgtedelta},0)$) ; + }% + {}% + \IfStrEq{\pfltgttikzsens}{g}% + {% + \path[name path=L-vline] ({\pfltgttikzx-\tmptgtedelta},{\pflymin}) -- ({\pfltgttikzx-\tmptgtedelta},{\pflymax}) ; + \path[name path=R-vline] ({\pfltgttikzx},{\pflymin}) -- ({\pfltgttikzx},{\pflymax}) ; + %\coordinate (LXcoor) at ($(TANp-1)+({-\tmptgtedelta},0)$) ; + %\coordinate (RXcoor) at (TANp-1) ; + \def\tmptgtfin{\pfltgttikzx}% + }% + {}% + \IfStrEq{\pfltgttikzsens}{d}% + {% + \path[name path=L-vline] ({\pfltgttikzx},{\pflymin}) -- ({\pfltgttikzx},{\pflymax}) ; + \path[name path=R-vline] ({\pfltgttikzx+\tmptgtedelta},{\pflymin}) -- ({\pfltgttikzx+\tmptgtedelta},{\pflymax}) ; + \def\tmptgtdeb{\pfltgttikzx}% + }% + {}% + \path[name intersections={of=#2 and L-vline,name=LXcut}] ; + \path[name intersections={of=#2 and R-vline,name=RXcut}] ; + \coordinate (tzXproj) at ($(LXcut-1)!(TANp-1)!(RXcut-1)$) ; % projection + \coordinate (LLpoint) at ($(LXcut-1)+(TANp-1)-(tzXproj)$) ; % move + \coordinate (RRpoint) at ($(RXcut-1)+(TANp-1)-(tzXproj)$) ; % move + \path (LLpoint); + \pgfgetlastxy{\macrox}{\macroy}% + \xdef\tzTANLLX{\xintfloateval{(\ConvertirPtToCm{\macrox})/(\pflxunit)}}% + \xdef\tzTANLLY{\xintfloateval{(\ConvertirPtToCm{\macroy})/(\pflyunit)}}% + \path (RRpoint); + \pgfgetlastxy{\macrox}{\macroy}% + \xdef\tzTANRRX{\xintfloateval{(\ConvertirPtToCm{\macrox})/(\pflxunit)}}% + \xdef\tzTANRRY{\xintfloateval{(\ConvertirPtToCm{\macroy})/(\pflyunit)}}% + \def\tztangentLFn{(\tzTANRRY-\tzTANLLY)/(\tzTANRRX-\tzTANLLX)*(\x-\tzTANLLX)+\tzTANLLY}% + \begin{scope} + \clip ({\pflxmin},{\pflymin}) rectangle ({\pflxmax},{\pflymax}) ; + \draw[pfltrait,\pfltgttikzline,domain=\tmptgtdeb:\tmptgtfin,samples=2,#4] plot (\x,{\tztangentLFn}) ; + \end{scope} + }% + {% + \IfStrEq{\pfltgttikzsens}{g}% + {% + \CalculerNbDerive*{#2}{\pfltgttikzx}{\pfltgttikzh}% + }% + {% + \CalculerNbDerive{#2}{\pfltgttikzx}{\pfltgttikzh}% + }% + \begin{scope} + \clip ({\pflxmin},{\pflymin}) rectangle ({\pflxmax},{\pflymax}) ; + \draw[pfltrait,\pfltgttikzline,#4] plot[smooth] coordinates {% + \xintthecoords\xintfloatexpr + seq((x,\TmpResNbDeriv*(x-(\pfltgttikzx))+#2(\pfltgttikzx)),x=\tmptgtdeb,\tmptgtfin) + \relax + }; + \end{scope} + }% + \ifboolKV[GraphiqueTikzTgte]{AffPoint}% + {% + \ifboolKV[GraphiqueTikzTgte]{Spline}% + {% + \MarquerPts*[Style={\useKV[GraphiqueTikzTgte]{Style}},Couleur=\pfltgttikzpoint]{(TANp-1)} + %\filldraw[] (TANp-1) circle[pflpointc] ; + }% + {% + \xdef\tmpimgtgt{\xintfloateval{#2(\pfltgttikzx)}}% + \MarquerPts*[Style={\useKV[GraphiqueTikzTgte]{Style}},Couleur=\pfltgttikzpoint]{({\pfltgttikzx},\tmpimgtgt)} + %\filldraw[\pfltgttikzpoint] ({\pfltgttikzx},\tmpimgtgt) circle[pflpointc] ; + }% + }% + {}% +} + +%====loi normale +\defKV[GraphiqueTikzGaussienne]{% + Pas=\def\pflgaussstep{#1},% + Nom=\def\pflgaussname{#1} +} + +\setKVdefault[GraphiqueTikzGaussienne]{% + Nom=gaussienne,% + Couleur=black,% + Trace=false,% + Pas={},% + Debut={\pflxmin},% + Fin={\pflxmax} +} + +\NewDocumentCommand\DefinirLoiNormale{ O{} D<>{phi} m m }{% + %1=options + %2=mu + %3=sigma + \restoreKV[GraphiqueTikzGaussienne]% + \setKV[GraphiqueTikzGaussienne]{#1}% + \xintdeffloatfunc #2(x) := 1/((#4)*sqrt(2*pi))*exp(-0.5*((x-(#3))/(#4))^2) ;% + \IfStrEq{\pflgaussstep}{}% + {% + \xdef\pflgaussstep{\xintfloateval{((\useKV[GraphiqueTikzGaussienne]{Fin})-(\useKV[GraphiqueTikzGaussienne]{Debut}))/100}}% + }% + {}% + \begin{scope} + \clip ({\pflxmin},{\pflymin}) rectangle ({\pflxmax},{\pflymax}); + \ifboolKV[GraphiqueTikzGaussienne]{Trace}% + {% + \path[draw,pflcourbe,{\useKV[GraphiqueTikzGaussienne]{Couleur}},name path global=\pflgaussname] plot[smooth] coordinates {% + \xintthecoords\xintfloatexpr + seq((x,#2(x)),x={\useKV[GraphiqueTikzGaussienne]{Debut}}..[\pflgaussstep]..{\useKV[GraphiqueTikzGaussienne]{Fin}},{\useKV[GraphiqueTikzGaussienne]{Fin}}) + \relax + } ; + }% + {% + \path[draw=none,pflcourbe,name path global=\pflgaussname] plot[smooth] coordinates {% + \xintthecoords\xintfloatexpr + seq((x,#2(x)),x={\useKV[GraphiqueTikzGaussienne]{Debut}}..[\pflgaussstep]..{\useKV[GraphiqueTikzGaussienne]{Fin}},{\useKV[GraphiqueTikzGaussienne]{Fin}}) + \relax + } ; + }% + \end{scope} +} + +\NewDocumentCommand\TracerLoiNormale{ O{} m }{% + %1=options + %2=mu + %3=sigma + \restoreKV[GraphiqueTikzGaussienne]% + \setKV[GraphiqueTikzGaussienne]{#1}% + \IfStrEq{\pflgaussstep}{}% + {% + \xdef\pflgaussstep{\xintfloateval{((\useKV[GraphiqueTikzGaussienne]{Fin})-(\useKV[GraphiqueTikzGaussienne]{Debut}))/100}}% + }% + {}% + \begin{scope} + \clip ({\pflxmin},{\pflymin}) rectangle ({\pflxmax},{\pflymax}); + \draw[pflcourbe,{\useKV[GraphiqueTikzGaussienne]{Couleur}}] plot[smooth] coordinates {% + \xintthecoords\xintfloatexpr + seq((x,#2),x={\useKV[GraphiqueTikzGaussienne]{Debut}}..[\pflgaussstep]..{\useKV[GraphiqueTikzGaussienne]{Fin}},{\useKV[GraphiqueTikzGaussienne]{Fin}}) + \relax + } ; + \end{scope} +} + +%==== DENSITÉ KHIDEUX +\xintdeffloatfunc pflrecigamma(x) := x+0.577215664901*x^2-0.65587807152056*x^3-0.042002635033944*x^4+0.16653861138228*x^5-0.042197734555571*x^6; +\xintdeffloatfunc pflgamma(x) := (x==1)?{1}{(abs(x)<=0.5)?{1/pflrecigamma(x)}{(x-1)*pflgamma(x-1)}}; +\xintdeffloatfunc pflkhideux(x,k) := (x<0)?{0}{(1/(2^(k/2)*pflgamma(k/2)))*x^(k/2-1)*exp(-x/2)}; + +\NewDocumentCommand\DefinirLoiKhiDeux{ O{} D<>{khi} m }{% + %1=options + %2=mu + %3=sigma + \restoreKV[GraphiqueTikzGaussienne]% + \setKV[GraphiqueTikzGaussienne]{#1}% + \xintdeffloatfunc #2(x) := (x<0)?{0}{(1/(2^((#3)/2)*pflgamma((#3)/2)))*x^((#3)/2-1)*exp(-x/2)}; + \IfStrEq{\pflgaussstep}{}% + {% + \xdef\pflgaussstep{\xintfloateval{((\useKV[GraphiqueTikzGaussienne]{Fin})-(\useKV[GraphiqueTikzGaussienne]{Debut}))/100}}% + }% + {}% + \begin{scope} + \clip ({\pflxmin},{\pflymin}) rectangle ({\pflxmax},{\pflymax}); + \ifboolKV[GraphiqueTikzGaussienne]{Trace}% + {% + \path[draw,pflcourbe,{\useKV[GraphiqueTikzGaussienne]{Couleur}},name path global=\pflgaussname] plot[smooth] coordinates {% + \xintthecoords\xintfloatexpr + seq((x,#2(x)),x={\useKV[GraphiqueTikzGaussienne]{Debut}}..[\pflgaussstep]..{\useKV[GraphiqueTikzGaussienne]{Fin}},{\useKV[GraphiqueTikzGaussienne]{Fin}}) + \relax + } ; + }% + {% + \path[draw=none,pflcourbe,name path global=\pflgaussname] plot[smooth] coordinates {% + \xintthecoords\xintfloatexpr + seq((x,#2(x)),x={\useKV[GraphiqueTikzGaussienne]{Debut}}..[\pflgaussstep]..{\useKV[GraphiqueTikzGaussienne]{Fin}},{\useKV[GraphiqueTikzGaussienne]{Fin}}) + \relax + } ; + }% + \end{scope} +} + +\NewDocumentCommand\TracerLoiKhiDeux{ O{} m }{% + %1=options + %2=mu + %3=sigma + \restoreKV[GraphiqueTikzGaussienne]% + \setKV[GraphiqueTikzGaussienne]{#1}% + \IfStrEq{\pflgaussstep}{}% + {% + \xdef\pflgaussstep{\xintfloateval{((\useKV[GraphiqueTikzGaussienne]{Fin})-(\useKV[GraphiqueTikzGaussienne]{Debut}))/100}}% + }% + {}% + \begin{scope} + \clip ({\pflxmin},{\pflymin}) rectangle ({\pflxmax},{\pflymax}); + \draw[pflcourbe,{\useKV[GraphiqueTikzGaussienne]{Couleur}}] plot[smooth] coordinates {% + \xintthecoords\xintfloatexpr + seq((x,#2),x={\useKV[GraphiqueTikzGaussienne]{Debut}}..[\pflgaussstep]..{\useKV[GraphiqueTikzGaussienne]{Fin}},{\useKV[GraphiqueTikzGaussienne]{Fin}}) + \relax + } ; + \end{scope} +} + +%====droite +\defKV[GraphiquetikzDroite]{% + Nom=\def\pfldroitename{#1} +} + +\setKVdefault[GraphiquetikzDroite]{% + Pente=false,% + Couleur=black,% + Debut={\pflxmin},% + Fin={\pflxmax},% + Nom={} +} + +\NewDocumentCommand\TracerDroite{ O{} m m D<>{} }{% + \restoreKV[GraphiquetikzDroite]% + \setKV[GraphiquetikzDroite]{#1}% + %1er point + \path #2;% + \pgfgetlastxy{\macrox}{\macroy}% + \xdef\pfldtetikzxA{\xintfloateval{(\ConvertirPtToCm{\macrox})/(\pflxunit)}}% + \xdef\pfldtetikzyA{\xintfloateval{(\ConvertirPtToCm{\macroy})/(\pflyunit)}}% + %2ème point si besoin + \ifboolKV[GraphiquetikzDroite]{Pente}% + {% + \xdef\pfldtepente{\xintfloateval{#3}}% + }% + {% + \path #3;% + \pgfgetlastxy{\macrox}{\macroy}% + \xdef\pfldtetikzxB{\xintfloateval{(\ConvertirPtToCm{\macrox})/(\pflxunit)}}% + \xdef\pfldtetikzyB{\xintfloateval{(\ConvertirPtToCm{\macroy})/(\pflyunit)}}% + \xdef\pfldtepente{\xintfloateval{(\pfldtetikzyB-\pfldtetikzyA)/(\pfldtetikzxB-\pfldtetikzxA)}}% + }% + \begin{scope} + \clip ({\pflxmin},{\pflymin}) rectangle ({\pflxmax},{\pflymax}) ; + \xintifboolexpr{\pfldtetikzxA == \pfldtetikzxB}% + {% + \IfEq{\pfldroitename}{}% + {% + \draw[pfltrait,{\useKV[GraphiquetikzDroite]{Couleur}},#4] (\pfldtetikzxA,\pflymin) -- (\pfldtetikzxA,\pflymax) ; + }% + {% + \draw[pfltrait,{\useKV[GraphiquetikzDroite]{Couleur}},#4,name path global=\pfldroitename] (\pfldtetikzxA,\pflymin) -- (\pfldtetikzxA,\pflymax) ; + }% + }% + {% + \IfEq{\pfldroitename}{}% + {% + \draw[pfltrait,{\useKV[GraphiquetikzDroite]{Couleur}},domain={\useKV[GraphiquetikzDroite]{Debut}}:{\useKV[GraphiquetikzDroite]{Fin}},samples=2,#4] plot (\x,{\pfldtepente*(\x-\pfldtetikzxA)+\pfldtetikzyA}) ; + }% + {% + \draw[pfltrait,{\useKV[GraphiquetikzDroite]{Couleur}},domain={\useKV[GraphiquetikzDroite]{Debut}}:{\useKV[GraphiquetikzDroite]{Fin}},samples=2,name path global=\pfldroitename,#4] plot (\x,{\pfldtepente*(\x-\pfldtetikzxA)+\pfldtetikzyA}) ; + }% + }% + \end{scope} +} + +%====asymptote +\NewDocumentCommand\TracerAsymptote{ O{} m D<>{} }{% + \restoreKV[GraphiquetikzDroite]% + \setKV[GraphiquetikzDroite]{#1}% + %tracé + \draw[pfltrait,{\useKV[GraphiquetikzDroite]{Couleur}},#3] ({#2},{\pflymin})--({#2},{\pflymax}) ; +} + + +%====MinMax +\defKV[GraphiqueTikzMinMax]{% + Pas=\def\pflminmaxstep{#1},% + Methode=\def\pflminmaxmethode{#1},% + Coeffs=\def\pflminmaxcoeffs{#1} +} +\setKVdefault[GraphiqueTikzMinMax]{% + Debut={\pflxmin},% + Fin={\pflxmax},% + Pas={},% + Tension=0.5,% + Methode=fonction,% + Coeffs=3 +} + +\NewDocumentCommand\TrouverMaximum{ O{} m O{c-max} }{% + %1=clés + %2=paramètres en fonction de [Methode] + \restoreKV[GraphiqueTikzMinMax]% + \setKV[GraphiqueTikzMinMax]{#1}% + \IfStrEq{\pflstepcurve}{}% + {% + \xdef\pflminmaxstep{\xintfloateval{((\useKV[GraphiqueTikzMinMax]{Fin})-(\useKV[GraphiqueTikzMinMax]{Debut}))/100}}% + }% + {}% + \begin{scope}[bezier bounding box,local bounding box=bbtmpmax] + \IfStrEq{\pflminmaxmethode}{fonction}% + {% + \path[draw=none,name path=curvetmpmax] plot[smooth] coordinates {% + \xintthecoords\xintfloatexpr + seq((x,#2(x)),x={\useKV[GraphiqueTikzMinMax]{Debut}}..[\pflstepcurve]..{\useKV[GraphiqueTikzMinMax]{Fin}},{\useKV[GraphiqueTikzMinMax]{Fin}}) + \relax + }; + }% + {}% + \IfStrEq{\pflminmaxmethode}{interpo}% + {% + \path[draw=none,name path=curvetmpmax] plot[smooth,tension={\useKV[GraphiqueTikzMinMax]{Tension}}] coordinates {#2}; + }% + {}% + \IfStrEq{\pflminmaxmethode}{spline}% + {% + \GenererSpline{#2}{\pflminmaxcoeffs}[\tmpsplineminmax]% + \path[draw=none,name path=curvetmpmax] \tmpsplineminmax ; + }% + {}% + %retour + \path[name path=tmpmax] ([yshift=-0.25\pgflinewidth]bbtmpmax.north east) -- ([yshift=-0.25\pgflinewidth]bbtmpmax.north west) ; + \path[name intersections={of=curvetmpmax and tmpmax,name=#3}] ; + \coordinate (#3) at ($0.5*(#3-1)+0.5*(#3-2)+(0,0.25\pgflinewidth)$) ; + \end{scope} +} + +\NewDocumentCommand\TrouverMinimum{ O{} m O{c-min} }{% + %1=clés + %2=paramètres en fonction de [Methode] + \restoreKV[GraphiqueTikzMinMax]% + \setKV[GraphiqueTikzMinMax]{#1}% + \IfStrEq{\pflstepcurve}{}% + {% + \xdef\pflminmaxstep{\xintfloateval{((\useKV[GraphiqueTikzMinMax]{Fin})-(\useKV[GraphiqueTikzMinMax]{Debut}))/100}}% + }% + {}% + \begin{scope}[bezier bounding box,local bounding box=bbtmpmin] + \IfStrEq{\pflminmaxmethode}{fonction}% + {% + \path[draw=none,name path=curvetmpmin] plot[smooth] coordinates {% + \xintthecoords\xintfloatexpr + seq((x,#2(x)),x={\useKV[GraphiqueTikzMinMax]{Debut}}..[\pflstepcurve]..{\useKV[GraphiqueTikzMinMax]{Fin}},{\useKV[GraphiqueTikzMinMax]{Fin}}) + \relax + }; + }% + {}% + \IfStrEq{\pflminmaxmethode}{interpo}% + {% + \path[draw=none,name path=curvetmpmin] plot[smooth,tension={\useKV[GraphiqueTikzMinMax]{Tension}}] coordinates {#2}; + }% + {}% + \IfStrEq{\pflminmaxmethode}{spline}% + {% + \GenererSpline{#2}{\pflminmaxcoeffs}[\tmpsplineminmax]% + \path[draw=none,name path=curvetmpmin] \tmpsplineminmax ; + }% + {}% + %retour + \path[name path=tmpmin] ([yshift=0.25\pgflinewidth]bbtmpmin.south east) -- ([yshift=0.25\pgflinewidth]bbtmpmin.south west) ; + \path[name intersections={of=curvetmpmin and tmpmin,name=#3}] ; + \coordinate (#3) at ($0.5*(#3-1)+0.5*(#3-2)+(0,-0.25\pgflinewidth)$) ; + \end{scope} +} + +%====TEXTES +\defKV[GraphiqueTikzNode]{% + Couleur=\def\pflnodecol{#1},% + Police=\def\pflnodefonte{#1},% + Position=\def\pfnodepos{#1} +} +\setKVdefault[GraphiqueTikzNode]{% + Couleur=black,% + Police={\normalfont\normalsize},% + Position={} +} +\NewDocumentCommand\PlacerTexte{ O{} m m }{% + \restoreKV[GraphiqueTikzNode]% + \setKV[GraphiqueTikzNode]{#1}% + \draw #2 node[pflnoeud,font=\pflnodefonte,text=\pflnodecol,\pfnodepos] {#3} ; +} + +%++++++++++++++++++++++++++ +%++++++++++ENGLISH+++++++++ +%++++++++++++++++++++++++++ + +%====COMMANDE POUR NB DECIMAL ALEA ENTRE BORNES +\NewDocumentCommand\PickRandomNb{ s O{0} m m O{\mmyrandomnb} }{% + \def\tmpborneinf{\xinteval{floor(#3)}}%inf=\tmpborneinf\par% + \def\tmpbornesup{\xinteval{ceil(#4)}}%sup=\tmpbornesup\par% + \xintifboolexpr{#2 == 0}% + {% + \xdef#5{\fpeval{randint(\tmpborneinf,\tmpbornesup)}}% + }% + {% + \def\tmptest{0}% + \whiledo{\tmptest=0}{% + \xintifboolexpr{(\tmpbornesup-\tmpborneinf) == 1}% + {% + \xdef\tmpresalea{\fpeval{\tmpborneinf+round(rand(),#2)}}% + }% + {% + \xdef\tmpresalea{\fpeval{round(randint(\tmpborneinf,\tmpbornesup)+rand(),#2)}}% + }% + %essai=\tmpresalea\par + \IfBooleanTF{#1}% + {% + \xintifboolexpr{\tmpresalea < #4 'and' \tmpresalea > #3 }{\def\tmptest{1}}{\def\tmptest{0}}% + }% + {% + \xintifboolexpr{\tmpresalea <= #4 'and' \tmpresalea >= #3 }{\def\tmptest{1}}{\def\tmptest{0}}% + }% + }% + \xdef#5{\tmpresalea}% + %res=% + }% +} + +%====PATCH NUM +\@ifundefined{RoundNb}% + {% + \NewDocumentCommand\RoundNb{ O{2} m}{\num{\xintfloateval{round(#2,#1)}}\relax}% + }% + {% + \RenewDocumentCommand\RoundNb{ O{2} m}{\num{\xintfloateval{round(#2,#1)}}\relax}% + }% + +%====STYLES DE BASE +\tikzset{tkzgrphnode/.style={}} +\tikzset{tkzgrphpoint/.style={line width=0.95pt}} +\tikzset{tkzgrphpointc/.style={radius=1.75pt}} +\tikzset{tkzgrphpointmc/.style={radius=0.875pt}} +\tikzset{tkzgrphscatter/.style={radius=1.75pt}} +\tikzset{tkzgrphframe/.style={line width=0.8pt,gray}} +\tikzset{tkzgrphcurve/.style={line width=1.05pt}} +\tikzset{tkzgrphline/.style={line width=0.8pt}} +\tikzset{tkzgrpharrowl/.style={<-,>=latex}} +\tikzset{tkzgrpharrowr/.style={->,>=latex}} +\tikzset{tkzgrpharrowlr/.style={<->,>=latex}} +\tikzset{tkzgrphcounterimage/.style={line width=0.9pt,densely dashed}} +\tikzset{tkzgrphrange/.style={line width=0.9pt,densely dashed,->,>=latex}} +\tikzset{tkzgrphgridp/.style={thin,lightgray}} +\tikzset{tkzgrphgrids/.style={very thin,lightgray}} +\tikzset{tkzgrphaxes/.style={line width=0.8pt,->,>=latex}} +\tikzset{ + Xgrid/.store in=\pflgrillex,Xgrid/.default=1,Xgrid=1, + Xgrids/.store in=\pflgrillexs,Xgrids/.default=0.5,Xgrids=0.5, + Ygrid/.store in=\pflgrilley,Ygrid/.default=1,Ygrid=1, + Ygrids/.store in=\pflgrilleys,Ygrids/.default=0.5,Ygrids=0.5 +} +\tikzset{% + pics/tkzgraphcross/.style args={#1/#2}{ + code={ + \draw[tkzgrphpoint,rotate=#2] (-#1,0) -- (#1,0); + \draw[tkzgrphpoint,rotate=#2] (0,-#1) -- (0, #1); + } + }, + pics/tkzgraphcross/.default={2pt/45} +} +\tikzset{% + pics/tkzgraphsquare/.style args={#1/#2}{ + code={ + \filldraw[draw=none,tkzgrphpoint,rotate=#2] (-#1,-#1) rectangle (#1,#1) ; + } + }, + pics/tkzgraphsquare/.default={2pt/0} +} + +%===COMMANDE INTERNE POUR FORMATER EN FRACTIONS +\NewDocumentCommand\FormatFraction{ s O{} m }{% + %*=moins sur le numérateur + %2=argument.optionnel[d/t/dec=...] + %3=argument mandataire {calcul ou fraction} + \def\calculargument{\xintPRaw{\xintIrr{\xinteval{#3}}}}%on calcule et on transforme en A/B + \IfSubStr{\calculargument}{/}%on teste si le symbole / apparaît + {%si oui := fraction + \StrBefore{\calculargument}{/}[\numerateur]%on extrait le numérateur + \StrBehind{\calculargument}{/}[\denominateur]%on extrait le dénominateur + \ifblank{#2}% + {% + \IfBooleanTF{#1}% + {\ensuremath{\frac{\num{\numerateur}}{\num{\denominateur}}}}% + {% + \ifthenelse{\numerateur < 0}% + {\ensuremath{-\frac{\num{\fpeval{abs(\numerateur)}}}{\num{\denominateur}}}}% + {\ensuremath{\frac{\num{\numerateur}}{\num{\denominateur}}}}% + }% + }% + {}%si l'argument optionnel est vide + \IfStrEq{#2}{d}% + {% + \IfBooleanTF{#1}% + {\ensuremath{\displaystyle\frac{\num{\numerateur}}{\num{\denominateur}}}}% + {% + \ifthenelse{\numerateur < 0}% + {\ensuremath{-\displaystyle\frac{\num{\fpeval{abs(\numerateur)}}}{\num{\denominateur}}}}% + {\ensuremath{\displaystyle\frac{\num{\numerateur}}{\num{\denominateur}}}}% + }% + }% + {}%si l'argument optionnel est vide + \IfStrEq{#2}{t}% + {% + \IfBooleanTF{#1}% + {\ensuremath{\tfrac{\num{\numerateur}}{\num{\denominateur}}}}% + {% + \ifthenelse{\numerateur < 0}% + {\ensuremath{-\frac{\num{\fpeval{abs(\numerateur)}}}{\num{\denominateur}}}}% + {\ensuremath{\frac{\num{\numerateur}}{\num{\denominateur}}}}% + }% + }% + {}%si l'argument optionnel est vide + \IfStrEq{#2}{n}% + {% + \ensuremath{\nicefrac{\num{\numerateur}}{\num{\denominateur}}}% + }% + {}%si l'argument optionnel est vide + }{%si non := entier + \num{\calculargument}%on affiche l'entier, avec le package siunitx + }% +} + +%affichage d'un label en radians +\NewDocumentCommand\FormatTrig{ O{t} m }{%étoilée en dfrac + \IfStrEq{#2}{0}%cas où l'argument vaut 0 + {\def\restmp{0}}% + {% + \StrDel{#2}{*}[\restmpsansmoins]% + \StrSubstitute{\restmpsansmoins}{pi}{\pi}[\restmppi]% + \IfSubStr{#2}{/}% + {% + \StrCut{\restmppi}{/}\tmpnum\tmpdenom% + \IfSubStr{\tmpnum}{-}% + {% + \StrDel{\tmpnum}{-}[\restmppinum]% + \IfStrEqCase{#1}{% + {t}{\def\restmp{-\frac{\restmppinum}{\tmpdenom}}}% + {d}{\def\restmp{-\displaystyle\frac{\restmppinum}{\tmpdenom}}}% + {n}{\def\restmp{\nicefrac{-\restmppinum}{\tmpdenom}}}% + }% + }% + {% + \IfStrEqCase{#1}{% + {t}{\def\restmp{\frac{\tmpnum}{\tmpdenom}}}% + {d}{\def\restmp{\displaystyle\frac{\tmpnum}{\tmpdenom}}}% + {n}{\def\restmp{\nicefrac{\tmpnum}{\tmpdenom}}}% + }% + }% + }% + {% + \def\restmp{\restmppi}% + }% + }% + \ensuremath{\restmp}% +} + +%====FORMATAGE DES RACINES SIMPLES +\NewDocumentCommand\FormatSqrt{ O{t} m }{% + \IfStrEq{#2}{0}%cas où l'argument vaut 0 + {\ensuremath{0}}% + {% + \IfSubStr{#2}{sqrt}% + {% + \StrDel{#2}{*}[\tmpargbrut]% + \StrBetween[1,1]{\tmpargbrut}{sqrt(}{)}[\tmpargnumrac]% + \StrBefore{\tmpargbrut}{sqrt}[\tmparavantrac]% + \IfStrEqCase{\tmparavantrac}{ + {}{\xdef\tmparavantrac{}}% + {-}{\xdef\tmparavantrac{-}}% + }[\xdef\tmparavantrac{\num{\tmparavantrac}}]% + \IfSubStr{\tmpargbrut}{/}% + {% + \StrBehind{\tmpargbrut}{/}[\tmpargdenomrac]% + \IfStrEqCase{#1}{% + {d}{% + \ensuremath{\displaystyle\frac{\tmparavantrac\sqrt{\num{\tmpargnumrac}}}{\num{\tmpargdenomrac}}}% + }% + {t}{% + \ensuremath{\frac{\tmparavantrac\sqrt{\num{\tmpargnumrac}}}{\num{\tmpargdenomrac}}}% + }% + {n}{% + \ensuremath{\nicefrac{\tmparavantrac\sqrt{\num{\tmpargnumrac}}}{\num{\tmpargdenomrac}}}% + }% + }% + }% + {% + \ensuremath{\tmparavantrac\sqrt{\num{\tmpargnumrac}}}% + }% + }% + {% + \FormatFraction[#1]{#2}% + }% + }% +} + +%====COMMANDE INTERNE DE CONVERSION +\ExplSyntaxOn + \NewDocumentCommand\ConvertPtToCm{ m } { \dim_to_decimal_in_unit:nn { #1 } { 1 cm } } +\ExplSyntaxOff + +%====RECUPERER COORDONNEES NOEUD +\NewDocumentCommand\GetXcoord{ m O{\myxcoord} }{% + \path #1; + \pgfgetlastxy{\macrox}{\macroy}% + \xdef#2{\xintfloateval{(\ConvertPtToCm{\macrox})/(\pflxunit)}}% +} +\NewDocumentCommand\GetYcoord{ m O{\myycoord} }{% + \path #1; + \pgfgetlastxy{\macrox}{\macroy}% + \xdef#2{\xintfloateval{(\ConvertPtToCm{\macroy})/(\pflyunit)}}% +} + +\NewDocumentCommand\GetXYcoord{ m O{\myxcoord} O{\myycoord} }{% + \GetXcoord{#1}[#2]% + \GetYcoord{#1}[#3]% +} + +%===UNITÉS +\newcommand\DistBetweenNodes[3][\MyTmpDist]{% + \pgfpointdiff{\pgfpointanchor{#2}{center}} + {\pgfpointanchor{#3}{center}} + % no need to use a new dimen + \pgf@xa=\pgf@x + \pgf@ya=\pgf@y + % to convert from pt to cm + \pgfmathparse{veclen(\pgf@xa,\pgf@ya)/28.45274} + \global\let#1\pgfmathresult %macro globale +} + +\newcommand\TikZUnits{ + \coordinate (@0) at (0,0) ; + \coordinate (@X) at (1,0) ; + \coordinate (@Y) at (0,1) ; + \DistBetweenNodes[\pflxunit]{@0}{@X} + \DistBetweenNodes[\pflyunit]{@0}{@Y} +} + +%====ENVIRONNEMENT +\defKV[GraphicTikz]{% + GradThick=\def\pflthickgrad{#1} +} +\setKVdefault[GraphicTikz]{% + Frame=false,% + GradThick=3pt +} + +\NewDocumentEnvironment{GraphTikz}{ O{} D<>{} }% +%1 = options tikz, classiques +%2 = clés spécifiques +{% + \restoreKV[GraphicTikz]% + \setKV[GraphicTikz]{#2}% + %l'environnement + \begin{tikzpicture}[#1]% + %unités x/y pour des calculs de coordonnées + \TikZUnits + %noeuds + \coordinate (bbxTop) at (current bounding box.north) ; + \coordinate (bbxBottom) at (current bounding box.south) ; + \ifboolKV[GraphicTikz]{Frame}{\draw[tkzgrphframe] ({\pflxmin},{\pflymin}) rectangle ({\pflxmax},{\pflymax}) ;}{}% + %back to normal +}% +{% + \end{tikzpicture}% +} + +%====AXES +\defKV[GraphicTikzAxis]{ + Format=\def\pflformataxes{#1} +} +\setKVdefault[GraphicTikzAxis]{% + Grid=true,% + Enlarge=0,% + Grads=true,% + Origin=false,% + Font={},% + Format=num,% + Lines=true,% + Last=false,% + Behind=false,% + Above=false +} + +\NewDocumentCommand\FormatXaxisValues{ m m }{% + \IfStrEqCase{#1}{% + {num}{\num{#2}}% + {year}{#2}% + {frac}{\FormatFrac{#2}}% + {dfrac}{\FormatFrac[d]{#2}}% + {nfrac}{\FormatFrac[n]{#2}}% + {trig}{\FormatTrig{#2}}% + {dtrig}{\FormatTrig[d]{#2}}% + {ntrig}{\FormatTrig[n]{#2}}% + {sqrt}{\FormatSqrt{#2}}% + {dsqrt}{\FormatSqrt[d]{#2}}% + {nsqrt}{\FormatSqrt[n]{#2}}% + }[#2]% +} + +\NewDocumentCommand\FormatYaxisValues{ m m }{% + \IfStrEqCase{#1}{% + {num}{\num{#2}}% + {year}{#2}% + {frac}{\FormatSqrt{#2}}% + {dfrac}{\FormatFrac[d]{#2}}% + {nfrac}{\FormatFrac[n]{#2}}% + {trig}{\FormatTrig{#2}}% + {dtrig}{\FormatTrig[d]{#2}}% + {ntrig}{\FormatTrig[n]{#2}}% + {sqrt}{\FormatSqrt{#2}}% + {dsqrt}{\FormatSqrt[d]{#2}}% + {nsqrt}{\FormatSqrt[n]{#2}}% + }[#2]% +} + +\NewDocumentCommand\DrawAxisGrids{ s O{} m D<>{#3} m D<>{#5} }{% + \restoreKV[GraphicTikzAxis]% + \setKV[GraphicTikzAxis]{#2}% + %cas particuliers sous/sur impression + \ifboolKV[GraphicTikzAxis]{Behind}% + {% + \setKV[GraphicTikzAxis]{Grads=false} + }% + {}% + \ifboolKV[GraphicTikzAxis]{Above}% + {% + \setKV[GraphicTikzAxis]{Grid=false} + }% + {}% + %suite + \IfSubStr{\pflformataxes}{/}% + {% + \StrCut{\pflformataxes}{/}{\pflformataxex}{\pflformataxey}% + }% + {% + \xdef\pflformataxex{\pflformataxes}\xdef\pflformataxey{\pflformataxes}% + }% + \ifboolKV[GraphicTikzAxis]{Grid}% + {% + \draw[tkzgrphgrids,xstep=\pflgrillexs,ystep=\pflgrilleys] ({\pflxmin},{\pflymin}) grid ({\pflxmax},{\pflymax}); + \draw[tkzgrphgridp,xstep=\pflgrillex,ystep=\pflgrilley] ({\pflxmin},{\pflymin}) grid ({\pflxmax},{\pflymax}); + \ifboolKV[GraphicTikzAxis]{Last}% + {% + \draw[tkzgrphgridp] ({\pflxmin},{\pflymax})--({\pflxmax},{\pflymax}) ; + \draw[tkzgrphgridp] ({\pflxmax},{\pflymin})--({\pflxmax},{\pflymax}) ; + }% + {}% + }% + {}% + \draw[tkzgrphaxes] ({\pflxmin},{\pflOy}) -- ([xshift={\useKV[GraphicTikzAxis]{Enlarge}}]{\pflxmax},{\pflOy}) ; + \draw[tkzgrphaxes] ({\pflOx},{\pflymin}) -- ([yshift={\useKV[GraphicTikzAxis]{Enlarge}}]{\pflOx},{\pflymax}) ; + \IfEq{#3}{auto}% + {% + \xdef\tmprangexvalues{\xintfloateval{seq(i,i=\pflxmin..[\pflgrillex]..\pflxmax)}}\StrDel{\tmprangexvalues}{ }[\tmprangexvalues]% + \xdef\pflformataxex{num}% + }% + {% + \xdef\tmprangexvalues{#3}% + }% + \IfEq{#5}{auto}% + {% + \xdef\tmprangeyvalues{\xintfloateval{seq(i,i=\pflymin..[\pflgrilley]..\pflymax)}}\StrDel{\tmprangeyvalues}{ }[\tmprangeyvalues]% + \xdef\pflformataxey{num}% + }% + {% + \xdef\tmprangeyvalues{#5}% + }% + \foreach \x in \tmprangexvalues {\draw[tkzgrphline] ([yshift=\pflthickgrad]{\x},{\pflOy})--++(0,{-2*\pflthickgrad}) ;} + \foreach \y in \tmprangeyvalues {\draw[tkzgrphline] ([xshift=\pflthickgrad]{\pflOx},{\y})--++({-2*\pflthickgrad},0) ;} + \ifboolKV[GraphicTikzAxis]{Grads}% + {% + %origine + \ifboolKV[GraphicTikzAxis]{Origin}% + {% + \draw ({\pflOx},{\pflOy}) node[tkzgrphnode,below left,font={\useKV[GraphicTikzAxis]{Font}}] {\FormatXaxisValues{\pflformataxex}{\pflOx}} ; + %\draw (\pflOx,\pflOy) node[below left,font={\useKV[GraphicTikzAxis]{Font}}] {\ifboolKV[GraphicTikzAxis]{Num}{\num{\pflOx}}{\pflOx}} ; + }% + {}% + %graduations x, sauf si auto... + \foreach \x in \tmprangexvalues {% + \IfBooleanTF{#1}% + {% + \xintifboolexpr{\x == \pflOx}{}{\draw ([yshift=-\pflthickgrad]{\x},{\pflOy}) node[tkzgrphnode,below,font={\useKV[GraphicTikzAxis]{Font}}] {\FormatXaxisValues{\pflformataxex}{\x}} ;} + %\xintifboolexpr{\x == \pflOx}{}{\draw ([yshift=-\pflthickgrad]\x,\pflOy) node[below,font={\useKV[GraphicTikzAxis]{Font}}] {\ifboolKV[GraphicTikzAxis]{Num}{\num{\x}}{\x}} ;} + }% + {% + \draw ([yshift=-\pflthickgrad]{\x},{\pflOy}) node[tkzgrphnode,below,font={\useKV[GraphicTikzAxis]{Font}}] {\FormatXaxisValues{\pflformataxex}{\x}} ; + %\draw ([yshift=-\pflthickgrad]\x,\pflOy) node[below,font={\useKV[GraphicTikzAxis]{Font}}] {\ifboolKV[GraphicTikzAxis]{Num}{\num{\x}}{\x}} ; + }% + }% + \foreach \y in \tmprangeyvalues {% + \IfBooleanTF{#1}% + {% + \xintifboolexpr{\y == \pflOy}{}{\draw ([xshift=-\pflthickgrad]{\pflOx},{\y}) node[tkzgrphnode,left,font={\useKV[GraphicTikzAxis]{Font}}] {\FormatYaxisValues{\pflformataxey}{\y}} ;} + %\xintifboolexpr{\y == \pflOy}{}{\draw ([xshift=-\pflthickgrad]\pflOx,\y) node[left,font={\useKV[GraphicTikzAxis]{Font}}] {\ifboolKV[GraphicTikzAxis]{Num}{\num{\y}}{\y}} ;} + }% + {% + \draw ([xshift=-\pflthickgrad]{\pflOx},{\y}) node[tkzgrphnode,left,font={\useKV[GraphicTikzAxis]{Font}}] {\FormatYaxisValues{\pflformataxey}{\y}} ; + %\draw ([xshift=-\pflthickgrad]\pflOx,\y) node[left,font={\useKV[GraphicTikzAxis]{Font}}] {\ifboolKV[GraphicTikzAxis]{Num}{\num{\y}}{\y}} ; + }% + }% + }% + {}% +} + +%===DEFINIR POINTS +\setKVdefault[GraphicTikzDefPoints]{Color=black,Mark=false,Style=o} + +\NewDocumentCommand\DefinePts{ O{} m }{% + \restoreKV[GraphicTikzDefPoints]% + \setKV[GraphicTikzDefPoints]{#1}% + \foreach \tmpnamept/\tmpxpt/\tmpypt in {#2}{% + \coordinate (\tmpnamept) at ({\tmpxpt},{\tmpypt}) ; + \ifboolKV[GraphicTikzDefPoints]{Mark}% + {% + \MarkPts*[Style={\useKV[GraphicTikzDefPoints]{Style}},Color={\useKV[GraphicTikzDefPoints]{Color}}]{(\tmpnamept)} + %\filldraw[{\useKV[GraphicTikzDefPoints]{Color}}] (\tmpnamept) circle[tkzgrphpointc] ; + }% + {}% + } +} + +\defKV[GraphicTikzMarkPoints]{% + Color=\def\pflcouleurpoints{#1},% + Style=\def\pflstylepoints{#1} +} +\setKVdefault[GraphicTikzMarkPoints]{% + Color=black,% + Sizec=2pt,% + Sizex=2pt,% + Sizeo=1.75pt,% + Style=o,% + Lines=false +} +\NewDocumentCommand\MarkPts{ s O{} D<>{\normalfont\normalsize} m }{% + %étoilée = sans label + %2=clés + %3=points + \restoreKV[GraphicTikzMarkPoints]% + \setKV[GraphicTikzMarkPoints]{#2}% + \IfBooleanTF{#1}% + {% + \IfStrEq{\pflstylepoints}{x}% + {% + \foreach \Point in {#4} {% + \ifboolKV[GraphicTikzMarkPoints]{Lines}% + {% + \draw[{\useKV[GraphicTikzMarkPoints]{Color}},tkzgrphcounterimage] let \p1 = \Point in ({\x1},{\pflOy}) |- ({\pflOx},{\y1}) ; + }% + {}% + \draw[{\useKV[GraphicTikzMarkPoints]{Color}}] \Point pic{tkzgraphcross={\useKV[GraphicTikzMarkPoints]{Sizex}}/45} ; + }% + }% + {}% + \IfStrEq{\pflstylepoints}{+}% + {% + \foreach \Point in {#4} {% + \ifboolKV[GraphicTikzMarkPoints]{Lines}% + {% + \draw[{\useKV[GraphicTikzMarkPoints]{Color}},tkzgrphcounterimage] let \p1 = \Point in ({\x1},{\pflOy}) |- ({\pflOx},{\y1}) ; + }% + {}% + \draw[{\useKV[GraphicTikzMarkPoints]{Color}}] \Point pic{tkzgraphcross={\useKV[GraphicTikzMarkPoints]{Sizex}}/90} ; + }% + }% + {}% + \IfStrEq{\pflstylepoints}{c}% + {% + \foreach \Point in {#4} {% + \ifboolKV[GraphicTikzMarkPoints]{Lines}% + {% + \draw[{\useKV[GraphicTikzMarkPoints]{Color}},tkzgrphcounterimage] let \p1 = \Point in ({\x1},{\pflOy}) |- ({\pflOx},{\y1}) ; + }% + {}% + \filldraw[draw=none,fill={\useKV[GraphicTikzMarkPoints]{Color}}] \Point pic{tkzgraphsquare={\useKV[GraphicTikzMarkPoints]{Sizec}}/0} ; + }% + }% + {}% + \IfStrEq{\pflstylepoints}{d}% + {% + \foreach \Point in {#4} {% + \ifboolKV[GraphicTikzMarkPoints]{Lines}% + {% + \draw[{\useKV[GraphicTikzMarkPoints]{Color}},tkzgrphcounterimage] let \p1 = \Point in ({\x1},{\pflOy}) |- ({\pflOx},{\y1}) ; + }% + {}% + \filldraw[draw=none,fill={\useKV[GraphicTikzMarkPoints]{Color}}] \Point pic{tkzgraphsquare={\useKV[GraphicTikzMarkPoints]{Sizeo}}/45} ; + }% + }% + {}% + \IfStrEq{\pflstylepoints}{o}% + {% + \IfSubStr{\pflcouleurpoints}{/}% + {% + \StrCut{\pflcouleurpoints}{/}{\pflcouleurpointsA}{\pflcouleurpointsB}% + \foreach \Point in {#4} {% + \ifboolKV[GraphicTikzMarkPoints]{Lines}% + {% + \draw[{\useKV[GraphicTikzMarkPoints]{Color}},tkzgrphcounterimage] let \p1 = \Point in ({\x1},{\pflOy}) |- ({\pflOx},{\y1}) ; + }% + {}% + \filldraw[tkzgrphline,fill=\pflcouleurpointsB,draw=\pflcouleurpointsA] \Point circle[radius={\useKV[GraphicTikzMarkPoints]{Sizeo}}] ; + }% + }% + {% + \foreach \Point in {#4} {% + \ifboolKV[GraphicTikzMarkPoints]{Lines}% + {% + \draw[{\useKV[GraphicTikzMarkPoints]{Color}},tkzgrphcounterimage] let \p1 = \Point in ({\x1},{\pflOy}) |- ({\pflOx},{\y1}) ; + }% + {}% + \filldraw[\pflcouleurpoints] \Point circle[radius={\useKV[GraphicTikzMarkPoints]{Sizeo}}] ; + }% + }% + }% + {}% + }% + {%avec label + \IfStrEq{\pflstylepoints}{x}% + {% + \foreach \Point/\Pos/\Label in {#4} {% + \ifboolKV[GraphicTikzMarkPoints]{Lines}% + {% + \draw[{\useKV[GraphicTikzMarkPoints]{Color}},tkzgrphcounterimage] let \p1 = \Point in ({\x1},{\pflOy}) |- ({\pflOx},{\y1}) ; + }% + {}% + \draw[{\useKV[GraphicTikzMarkPoints]{Color}}] \Point pic{tkzgraphcross={\useKV[GraphicTikzMarkPoints]{Sizex}}/45} node[tkzgrphnode,\Pos,font=#3] {\Label} ; + }% + }% + {}% + \IfStrEq{\pflstylepoints}{+}% + {% + \foreach \Point/\Pos/\Label in {#4} {% + \ifboolKV[GraphicTikzMarkPoints]{Lines}% + {% + \draw[{\useKV[GraphicTikzMarkPoints]{Color}},tkzgrphcounterimage] let \p1 = \Point in ({\x1},{\pflOy}) |- ({\pflOx},{\y1}) ; + }% + {}% + \draw[{\useKV[GraphicTikzMarkPoints]{Color}}] \Point pic{tkzgraphcross={\useKV[GraphicTikzMarkPoints]{Sizex}}/90} node[tkzgrphnode,\Pos,font=#3] {\Label} ; + }% + }% + {}% + \IfStrEq{\pflstylepoints}{c}% + {% + \foreach \Point/\Pos/\Label in {#4} {% + \ifboolKV[GraphicTikzMarkPoints]{Lines}% + {% + \draw[{\useKV[GraphicTikzMarkPoints]{Color}},tkzgrphcounterimage] let \p1 = \Point in ({\x1},{\pflOy}) |- ({\pflOx},{\y1}) ; + }% + {}% + \filldraw[draw=none,fill={\useKV[GraphicTikzMarkPoints]{Color}}] \Point pic{tkzgraphsquare={\useKV[GraphicTikzMarkPoints]{Sizec}}/0} node[tkzgrphnode,\Pos,{\useKV[GraphicTikzMarkPoints]{Color}},font=#3] {\Label} ; + }% + }% + {}% + \IfStrEq{\pflstylepoints}{d}% + {% + \foreach \Point/\Pos/\Label in {#4} {% + \ifboolKV[GraphicTikzMarkPoints]{Lines}% + {% + \draw[{\useKV[GraphicTikzMarkPoints]{Color}},tkzgrphcounterimage] let \p1 = \Point in ({\x1},{\pflOy}) |- ({\pflOx},{\y1}) ; + }% + {}% + \filldraw[draw=none,fill={\useKV[GraphicTikzMarkPoints]{Color}}] \Point pic{tkzgraphsquare={\useKV[GraphicTikzMarkPoints]{Sizeo}}/45} node[tkzgrphnode,\Pos,{\useKV[GraphicTikzMarkPoints]{Color}},font=#3] {\Label} ; + }% + }% + {}% + \IfStrEq{\pflstylepoints}{o}% + {% + \IfSubStr{\pflcouleurpoints}{/}% + {% + \StrCut{\pflcouleurpoints}{/}{\pflcouleurpointsA}{\pflcouleurpointsB}% + \foreach \Point/\Pos/\Label in {#4} {% + \ifboolKV[GraphicTikzMarkPoints]{Lines}% + {% + \draw[{\useKV[GraphicTikzMarkPoints]{Color}},tkzgrphcounterimage] let \p1 = \Point in ({\x1},{\pflOy}) |- ({\pflOx},{\y1}) ; + }% + {}% + \draw[tkzgrphline,\pflcouleurpointsA,fill=\pflcouleurpointsB] \Point circle[radius={\useKV[GraphicTikzMarkPoints]{Sizeo}}] node[tkzgrphnode,\Pos,font=#3] {\Label} ; + }% + }% + {% + \foreach \Point/\Pos/\Label in {#4} {% + \ifboolKV[GraphicTikzMarkPoints]{Lines}% + {% + \draw[{\useKV[GraphicTikzMarkPoints]{Color}},tkzgrphcounterimage] let \p1 = \Point in ({\x1},{\pflOy}) |- ({\pflOx},{\y1}) ; + }% + {}% + \filldraw[\pflcouleurpoints] \Point circle[radius={\useKV[GraphicTikzMarkPoints]{Sizeo}}] node[tkzgrphnode,\Pos,font=#3] {\Label} ; + }% + }% + }% + {}% + }% +} + +%===AJOUTER DES VALEURS MANUELLEMENT +\NewDocumentCommand\AddXvalues{ O{} m m }{% + \restoreKV[GraphicTikzAxis]% + \setKV[GraphicTikzAxis]{#1}% + \ifboolKV[GraphicTikzAxis]{Lines}{\foreach \x in {#2}{\draw[tkzgrphline] ([yshift=\pflthickgrad]{\x},{\pflOy})--++(0,{-2*\pflthickgrad}) ;}}{}% + \readlist*\LstValX{#2}% + \readlist*\LstValFmtX{#3}% + \foreach \i in {1,...,\LstValXlen}{% + \itemtomacro\LstValX[\i]\mavalx% + \itemtomacro\LstValFmtX[\i]\mavalfmtx% + \draw ([yshift=-\pflthickgrad]{\mavalx},{\pflOy}) node[tkzgrphnode,below,font={\useKV[GraphicTikzAxis]{Font}}] {\mavalfmtx} ; + }% +} + +\NewDocumentCommand\AddYvalues{ O{} m m }{% + \restoreKV[GraphicTikzAxis]% + \setKV[GraphicTikzAxis]{#1}% + \ifboolKV[GraphicTikzAxis]{Lines}{\foreach \y in {#2}{\draw[tkzgrphline] ([xshift=\pflthickgrad]{\pflOx},{\y})--++({-2*\pflthickgrad},0) ;}}{}% + \readlist*\LstValY{#2}% + \readlist*\LstValFmtY{#3}% + \foreach \i in {1,...,\LstValYlen}{% + \itemtomacro\LstValY[\i]\mavaly% + \itemtomacro\LstValFmtY[\i]\mavalfmty% + \draw ([xshift=-\pflthickgrad]{\pflOx},{\mavaly}) node[tkzgrphnode,left,font={\useKV[GraphicTikzAxis]{Font}}] {\mavalfmty} ; + }% +} + +%====FONCTIONS ET COURBES 'classique + interpo + spline' +\defKV[GraphicTikzCourbe]{% + Step=\def\pflstepcurve{#1},% + Name=\def\pflnamecurve{#1} +} +\setKVdefault[GraphicTikzCourbe]{% + Color=black,% + Start={\pflxmin},% + End={\pflxmax},% + Step={},% + Clip=true,% + Name={},% + Trace=false,% + Tension=0.5 +} + +\NewDocumentCommand\DefineFunction{ O{} D<>{f} m }{%old version + \restoreKV[GraphicTikzCourbe]% + \setKV[GraphicTikzCourbe]{#1}% + \xintdeffloatfunc #2(x) := #3 ; + \IfStrEq{\pflstepcurve}{}% + {% + \xdef\pflstepcurve{\xintfloateval{((\useKV[GraphicTikzCourbe]{End})-(\useKV[GraphicTikzCourbe]{Start}))/100}}% + }% + {}% + \ifboolKV[GraphicTikzCourbe]{Clip}{\begin{scope}\clip ({\pflxmin},{\pflymin}) rectangle ({\pflxmax},{\pflymax});}{} + \clip ({\pflxmin},{\pflymin}) rectangle ({\pflxmax},{\pflymax}); + \ifboolKV[GraphicTikzCourbe]{Trace}% + {% + \path[draw,tkzgrphcurve,{\useKV[GraphicTikzCourbe]{Color}},name path global=\pflnamecurve] plot[smooth] coordinates {% + \xintthecoords\xintfloatexpr + seq((x,#2(x)),x={\useKV[GraphicTikzCourbe]{Start}}..[\pflstepcurve]..{\useKV[GraphicTikzCourbe]{End}},{\useKV[GraphicTikzCourbe]{End}}) + \relax + }; + }% + {% + \path[draw=none,tkzgrphcurve,{\useKV[GraphicTikzCourbe]{Color}},name path global=\pflnamecurve] plot[smooth] coordinates {% + \xintthecoords\xintfloatexpr + seq((x,#2(x)),x={\useKV[GraphicTikzCourbe]{Start}}..[\pflstepcurve]..{\useKV[GraphicTikzCourbe]{End}},{\useKV[GraphicTikzCourbe]{End}}) + \relax + }; + }% + \ifboolKV[GraphicTikzCourbe]{Clip}{\end{scope}}{} +} + +\NewDocumentCommand\DefineCurve{ O{} D<>{f} m }{% + \restoreKV[GraphicTikzCourbe]% + \setKV[GraphicTikzCourbe]{#1}% + \xintdeffloatfunc #2(x) := #3 ; + \IfStrEq{\pflstepcurve}{}% + {% + \xdef\pflstepcurve{\xintfloateval{((\useKV[GraphicTikzCourbe]{End})-(\useKV[GraphicTikzCourbe]{Start}))/100}}% + }% + {}% + \ifboolKV[GraphicTikzCourbe]{Clip}{\begin{scope}\clip ({\pflxmin},{\pflymin}) rectangle ({\pflxmax},{\pflymax});}{} + \clip ({\pflxmin},{\pflymin}) rectangle ({\pflxmax},{\pflymax}); + \ifboolKV[GraphicTikzCourbe]{Trace}% + {% + \path[draw,tkzgrphcurve,{\useKV[GraphicTikzCourbe]{Color}},name path global=\pflnamecurve] plot[smooth] coordinates {% + \xintthecoords\xintfloatexpr + seq((x,#2(x)),x={\useKV[GraphicTikzCourbe]{Start}}..[\pflstepcurve]..{\useKV[GraphicTikzCourbe]{End}},{\useKV[GraphicTikzCourbe]{End}}) + \relax + }; + }% + {% + \path[draw=none,tkzgrphcurve,{\useKV[GraphicTikzCourbe]{Color}},name path global=\pflnamecurve] plot[smooth] coordinates {% + \xintthecoords\xintfloatexpr + seq((x,#2(x)),x={\useKV[GraphicTikzCourbe]{Start}}..[\pflstepcurve]..{\useKV[GraphicTikzCourbe]{End}},{\useKV[GraphicTikzCourbe]{End}}) + \relax + }; + }% + \ifboolKV[GraphicTikzCourbe]{Clip}{\end{scope}}{} +} + +\NewDocumentCommand\DrawCurve{ O{} D<>{} m }{% + \restoreKV[GraphicTikzCourbe]% + \setKV[GraphicTikzCourbe]{#1}% + \IfStrEq{\pflstepcurve}{}% + {% + \xdef\pflstepcurve{\xintfloateval{((\useKV[GraphicTikzCourbe]{End})-(\useKV[GraphicTikzCourbe]{Start}))/100}}% + }% + {}% + \ifboolKV[GraphicTikzCourbe]{Clip}{\begin{scope}\clip ({\pflxmin},{\pflymin}) rectangle ({\pflxmax},{\pflymax});}{} + \IfEq{\pflnamecurve}{}% + {% + \draw[tkzgrphcurve,{\useKV[GraphicTikzCourbe]{Color}}] plot[smooth] coordinates {% + \xintthecoords\xintfloatexpr + seq((x,#3),x={\useKV[GraphicTikzCourbe]{Start}}..[\pflstepcurve]..{\useKV[GraphicTikzCourbe]{End}},{\useKV[GraphicTikzCourbe]{End}}) + \relax + }; + }% + {% + \path[draw,tkzgrphcurve,{\useKV[GraphicTikzCourbe]{Color}},name path global=\pflnamecurve] plot[smooth] coordinates {% + \xintthecoords\xintfloatexpr + seq((x,#3),x={\useKV[GraphicTikzCourbe]{Start}}..[\pflstepcurve]..{\useKV[GraphicTikzCourbe]{End}},{\useKV[GraphicTikzCourbe]{End}}) + \relax + }; + }% + \ifboolKV[GraphicTikzCourbe]{Clip}{\end{scope}}{} +} + +\NewDocumentCommand\DefineLstInterpol{ m O{\myinterpolist} }{% + \def#2{#1}% +} + +\NewDocumentCommand\DefineInterpoCurve{ O{} m }{% + \restoreKV[GraphicTikzCourbe]% + \setKV[GraphicTikzCourbe]{#1}% + \begin{scope} + \ifboolKV[GraphicTikzCourbe]{Trace}% + {% + \path[draw,tkzgrphcurve,{\useKV[GraphicTikzCourbe]{Color}},name path global=\pflnamecurve] plot[smooth,tension={\useKV[GraphicTikzCourbe]{Tension}}] coordinates {#2}; + }% + {% + \path[draw=none,tkzgrphcurve,{\useKV[GraphicTikzCourbe]{Color}},name path global=\pflnamecurve] plot[smooth,tension={\useKV[GraphicTikzCourbe]{Tension}}] coordinates {#2}; + }% + \end{scope} +} + +\NewDocumentCommand\DrawInterpoCurve{ O{} m }{% + %2=liste + \restoreKV[GraphicTikzCourbe]% + \setKV[GraphicTikzCourbe]{#1}% + \begin{scope} + \draw[tkzgrphcurve,{\useKV[GraphicTikzCourbe]{Color}}] plot [smooth,tension={\useKV[GraphicTikzCourbe]{Tension}}] coordinates {#2} ; + \end{scope} +} + +\NewDocumentCommand\DefineLstSpline{ m O{\mysplinelst} }{% + \def#2{#1}% +} + +\newcommand\tkzextractcoeff[2]{%1=liste,2=numero \setsepchar{§}% \readlist*\lcoeffs{#1} \ifnum \lcoeffslen=1 @@ -964,26 +3059,27 @@ \fi } -\defKV[GraphiqueTikzSpline]{% - Nom=\def\pflsplinename{#1},% +\defKV[GraphicTikzSpline]{% + Name=\def\pflsplinename{#1},% Coeffs=\def\pflsplinecoeffs{#1} } -\setKVdefault[GraphiqueTikzSpline]{% - Nom=spline,% - Couleur=black,% +\setKVdefault[GraphicTikzSpline]{% + Name=spline,% + Color=black,% Coeffs=3,% - Trace=false + Trace=false,% + Alt=false } -\NewDocumentCommand\GenererSpline{ m m O{\monspline} }{% +\NewDocumentCommand\GenerateSpline{ m m O{\myspline} }{% %1=liste \setsepchar[.]{§./}% \readlist*\SPLlistepoints{#1}% %les données \def\tmpsplinenumdeb{1} \def\tmpsplinenumfin{\SPLlistepointslen}% - \pflextractcoeff{#2}{\tmpsplinenumdeb}% + \tkzextractcoeff{#2}{\tmpsplinenumdeb}% %nb de calculs \def\SPLnbsplines{\inteval{\tmpsplinenumfin-1}}% %extraction des coordonnées @@ -996,7 +3092,7 @@ \xdef#3{(\xa,\ya) ..controls +({atan \fprimea}:{(\xb-\xa)/\COEFFA}) and +({-180 + atan \fprimeb}:{(\xb-\xa)/\COEFFA}).. (\xb,\yb)}% \foreach \i in {\tmpsplinenumdeb,...,\SPLnbsplines}{% %extraction des coeffs de compensation - \pflextractcoeff{#2}{\i}% + \tkzextractcoeff{#2}{\i}% \def\j{\inteval{\i+1}}% \itemtomacro\SPLlistepoints[\i,1]\xa% \itemtomacro\SPLlistepoints[\i,2]\ya% @@ -1008,34 +3104,752 @@ }% } -\NewDocumentCommand\DefinirSpline{ O{} m D<>{\monspline} }{% +\NewDocumentCommand\DefineSplineCurve{ O{} m D<>{\myspline} }{% %1=liste - \restoreKV[GraphiqueTikzSpline]% - \setKV[GraphiqueTikzSpline]{#1}% - \GenererSpline{#2}{\pflsplinecoeffs}<#3>% + \restoreKV[GraphicTikzSpline]% + \setKV[GraphicTikzSpline]{#1}% + \GenerateSpline{#2}{\pflsplinecoeffs}[#3]% \begin{scope} - \ifboolKV[GraphiqueTikzSpline]{Trace}% + \ifboolKV[GraphicTikzSpline]{Trace}% {% - \path[draw,pflcourbe,{\useKV[GraphiqueTikzSpline]{Couleur}},name path global=\pflsplinename] #3 ; + \path[draw,tkzgrphcurve,{\useKV[GraphicTikzSpline]{Color}},name path global=\pflsplinename] #3 ; }% {% - \path[draw=none,pflcourbe,name path global=\pflsplinename] #3 ; + \path[draw=none,tkzgrphcurve,name path global=\pflsplinename] #3 ; }% \end{scope} } -\NewDocumentCommand\TracerSpline{ O{} m D<>{\monspline} }{% +\NewDocumentCommand\DefineSpline{ O{} m D<>{\myspline} }{%old version %1=liste - \restoreKV[GraphiqueTikzSpline]% - \setKV[GraphiqueTikzSpline]{#1}% - \GenererSpline{#2}{\pflsplinecoeffs}<#3>% + \restoreKV[GraphicTikzSpline]% + \setKV[GraphicTikzSpline]{#1}% + \GenerateSpline{#2}{\pflsplinecoeffs}[#3]% \begin{scope} - \draw[pflcourbe,{\useKV[GraphiqueTikzSpline]{Couleur}}] #3 ; + \ifboolKV[GraphicTikzSpline]{Trace}% + {% + \path[draw,tkzgrphcurve,{\useKV[GraphicTikzSpline]{Color}},name path global=\pflsplinename] #3 ; + }% + {% + \path[draw=none,tkzgrphcurve,name path global=\pflsplinename] #3 ; + }% + \end{scope} +} + +\NewDocumentCommand\DrawSplineCurve{ O{} m D<>{\myspline} }{% + %1=liste + \restoreKV[GraphicTikzSpline]% + \setKV[GraphicTikzSpline]{#1}% + \GenerateSpline{#2}{\pflsplinecoeffs}[#3]% + \begin{scope} + \draw[tkzgrphcurve,{\useKV[GraphicTikzSpline]{Color}}] #3 ; + \end{scope} +} + +\NewDocumentCommand\DrawSpline{ O{} m D<>{\myspline} }{%old version + %1=liste + \restoreKV[GraphicTikzSpline]% + \setKV[GraphicTikzSpline]{#1}% + \GenerateSpline{#2}{\pflsplinecoeffs}[#3]% + \begin{scope} + \draw[tkzgrphcurve,{\useKV[GraphicTikzSpline]{Color}}] #3 ; + \end{scope} +} + +%===INTERSECTION & ANTÉCÉDENTS +\defKV[GraphicTikzIntersect]{% + Name=\def\pflintercurves{#1} +} +\setKVdefault[GraphicTikzIntersect]{% + Name=S, + Disp=true, + Color=black, + DispLine=false,% + Lines=false,% + Style=o +} + +\NewDocumentCommand\FindIntersections{ O{} m m D<>{\myt} }{% + \restoreKV[GraphicTikzIntersect]% + \setKV[GraphicTikzIntersect]{#1}% + \path[name intersections={of=#2 and #3,name=\pflintercurves,total=\t}] \pgfextra{\xdef#4{\t}}; + \ifboolKV[GraphicTikzIntersect]{Disp}% + {% + \xintifboolexpr{#4 == 0}{}% + {% + \foreach \i in {1,...,#4}{% + \ifboolKV[GraphicTikzIntersect]{Lines}% + {% + \draw[tkzgrphrange,{\useKV[GraphicTikzIntersect]{Color}}]let \p1 = (\pflintercurves-\i) in (\pflintercurves-\i) -- ({\x1},{\pflOy}) ; + }% + {}% + \MarkPts*[Style={\useKV[GraphicTikzIntersect]{Style}},Color={\useKV[GraphicTikzIntersect]{Color}}]{(\pflintercurves-\i)} + %\filldraw[{\useKV[GraphicTikzIntersect]{Color}}] (\pflintercurves-\i) circle[tkzgrphpointc] ; + } + }% + }% + {}% +} + +\NewDocumentCommand\FindCounterimage{ O{} m m D<>{\myantec} }{% + \restoreKV[GraphicTikzIntersect]% + \setKV[GraphicTikzIntersect]{#1}% + \begin{scope} + \clip ({\pflxmin},{\pflymin}) rectangle ({\pflxmax},{\pflymax}); + \ifboolKV[GraphicTikzIntersect]{DispLine}% + {% + \path[draw,{\useKV[GraphicTikzIntersect]{Color}},tkzgrphcurve,name path=tmpanteced] ({\pflxmin},{#3})--({\pflxmax},{#3}) ; + }% + {% + \path[draw=none,tkzgrphcurve,name path=tmpanteced] ({\pflxmin},{#3})--({\pflxmax},{#3}) ; + }% + \path[name intersections={of=#2 and tmpanteced,name=\pflintercurves,total=\t}] \pgfextra{\xdef#4{\t}}; + \ifboolKV[GraphicTikzIntersect]{Disp}% + {% + \xintifboolexpr{#4 == 0}{}% + {% + \foreach \i in {1,...,#4}{% + \MarkPts*[Style={\useKV[GraphicTikzIntersect]{Style}},Color={\useKV[GraphicTikzIntersect]{Color}}]{(\pflintercurves-\i)} + %\filldraw[{\useKV[GraphicTikzIntersect]{Color}}] (\pflintercurves-\i) circle[tkzgrphpointc] ; + } + }% + }% + {}% + \end{scope} +} + +%====INTÉGRALES +%v2 avec modification de la clé [Type=...] ? +\defKV[GraphicTikzIntegr]{% + Colors=\def\pfldomtikzcolors{#1},% + Style=\def\pfldomtikzstyle{#1},% + Opacity=\def\pfldomtikzopac{#1},% + Hatch=\def\pfldomtikzhatch{#1},% + Type=\def\pfldomtikztype{#1},% + Step=\def\pflstepcurve{#1},% + Bounds=\def\pflintbornes{#1},% + Junction=\def\pfldomtikzjoin{#1},% + NameInterpo=\def\pfldomtikznameinterpo{#1},% + NameInterpoB=\def\pfldomtikznameinterpob{#1},% + NameSpline=\def\pfldomtikznamespline{#1},% + NameSplineB=\def\pfldomtikznamesplineb{#1} +} +\setKVdefault[GraphicTikzIntegr]{% + Colors=gray,% + Style=fill,% + Opacity=0.5,% + Hatch={north west lines},% + Type=fct,% + Step={},% + Junction=bevel,% + Bounds=abs,% + Border=true,% + Spline=false,% + SplineB=false,% + NameInterpo={\myinterpo},% + NameInterpoB={\myinterpoB},% + NameSpline={\myspline},% + NameSplineB={\myplineB},% + Tension=0.5,% + TensionB=0.5 +} + +\NewDocumentCommand\DrawIntegral{ O{} D<>{} m O{0} m m }{% + %1 = clés + %2 = options particulières tikz + %3 = fonction, en tikz + %4 = fonction n°2 éventuelle + %de #5 à #6 + \restoreKV[GraphicTikzIntegr]% revenir au valeurs par défaut + \setKV[GraphicTikzIntegr]{#1}% lit les arguments optionnels + %les couleurs + \IfSubStr{\pfldomtikzcolors}{/}% + {% + \StrCut{\pfldomtikzcolors}{/}{\pfldomtikzcolorbord}{\pfldomtikzcolorfond} + }% + {% + \xdef\pfldomtikzcolorbord{\pfldomtikzcolors}\xdef\pfldomtikzcolorfond{\pfldomtikzcolors} + }% + \ifboolKV[GraphicTikzIntegr]{Border}% + {% + \tikzset{integralebordtikzstyle/.style={draw=\pfldomtikzcolorbord}} + }% + {% + \tikzset{integralebordtikzstyle/.style={draw=none}} + }% + \IfStrEq{\pfldomtikzstyle}{hatch}% + {% + \tikzset{integraletikzstyle/.style={tkzgrphline,pattern=\pfldomtikzhatch,pattern color=\pfldomtikzcolorfond,line join=\pfldomtikzjoin}} + }% + {}% + \IfStrEq{\pfldomtikzstyle}{fill}% + {% + \tikzset{integraletikzstyle/.style={tkzgrphline,fill=\pfldomtikzcolorfond,fill opacity=\pfldomtikzopac,line join=\pfldomtikzjoin}} + }% + {}% + %extraction des infos x/y + \IfStrEqCase{\pflintbornes}{% + {abs}% + {% + \xdef\absnoeudA{#5}% + \xdef\absnoeudB{#6}% + }% + {nodes}% + {% + \path #5; + \pgfgetlastxy{\macrox}{\macroy}% + \xdef\absnoeudA{\xintfloateval{(\ConvertPtToCm{\macrox})/(\pflxunit)}}% + \path #6; + \pgfgetlastxy{\macrox}{\macroy}% + \xdef\absnoeudB{\xintfloateval{(\ConvertPtToCm{\macrox})/(\pflxunit)}}% + }% + {abs/node}% + {% + \xdef\absnoeudA{#5}% + \path #6; + \pgfgetlastxy{\macrox}{\macroy}% + \xdef\absnoeudB{\xintfloateval{(\ConvertPtToCm{\macrox})/(\pflxunit)}}% + }% + {node/abs}% + {% + \path #5; + \pgfgetlastxy{\macrox}{\macroy}% + \xdef\absnoeudA{\xintfloateval{(\ConvertPtToCm{\macrox})/(\pflxunit)}}% + \xdef\absnoeudB{#6}% + }% + }% + %suite avec les nbs points + \IfStrEq{\pflstepcurve}{}% + {% + \xdef\pflstepcurve{\xintfloateval{((\absnoeudB)-(\absnoeudA))/100}}% + }% + {}% + %TRACÉSen fonction des types de courbes + \IfStrEq{\pfldomtikztype}{fct}% + {%OK + \begin{scope} + \clip ({\pflxmin},{\pflymin}) rectangle ({\pflxmax},{\pflymax}); + \draw[integraletikzstyle,integralebordtikzstyle,#2] ({\absnoeudA},{\pflOy}) -- plot[smooth] coordinates {\xintthecoords\xintfloatexpr seq((x,#3),x=\absnoeudA..[\pflstepcurve]..\absnoeudB,\absnoeudB)\relax} -- ({\absnoeudB},{\pflOy}) -- cycle ; + \end{scope} + }% + {}% + \IfStrEq{\pfldomtikztype}{spl}%avec 3=courbe spline + clé [Spline] à utiliser ! + {%OK + \begin{scope} + \clip ({\absnoeudA},{\pflymin}) rectangle ({\absnoeudB},{\pflymax}) ; + \filldraw[integraletikzstyle,integralebordtikzstyle,#2] ({\absnoeudA},{\pflOy}) -- \pfldomtikznamespline -- ({\absnoeudB},{\pflOy}) -- cycle ; + \end{scope} + \path[draw=none,tkzgrphcurve,name path=tmpintbornea] ({\absnoeudA},{\pflymin})--({\absnoeudA},{\pflymax}) ; + \path[name intersections={of=#3 and tmpintbornea,name=YYY}] ; + \draw[\pfldomtikzcolorbord,tkzgrphline] ({\absnoeudA},{\pflOy})-- (YYY-1) ; + \path[draw=none,tkzgrphcurve,name path=tmpintborneb] ({\absnoeudB},{\pflymin})--({\absnoeudB},{\pflymax}) ; + \path[name intersections={of=#3 and tmpintborneb,name=ZZZ}] ; + \draw[\pfldomtikzcolorbord,tkzgrphline] ({\absnoeudB},{\pflOy})-- (ZZZ-1) ; + }% + {}% + \IfStrEq{\pfldomtikztype}{itp}%avec 3=courbe interpo + {%OK + \begin{scope} + \clip ({\absnoeudA},{\pflymin}) rectangle ({\absnoeudB},{\pflymax}) ; + \filldraw[integraletikzstyle,integralebordtikzstyle,#2] ({\absnoeudA},{\pflOy}) -- plot [smooth,tension={\useKV[GraphicTikzIntegr]{Tension}}] coordinates {#3} -- ({\absnoeudB},{\pflOy}) -- cycle ; + \end{scope} + \path[draw=none,tkzgrphcurve,name path=tmpintbornea] ({\absnoeudA},{\pflymin})--({\absnoeudA},{\pflymax}) ; + \path[name intersections={of=tmpintbornea and \pfldomtikznameinterpo,name=YYY}] ; + \draw[\pfldomtikzcolorbord,tkzgrphline] ({\absnoeudA},{\pflOy})-- (YYY-1) ; + \path[draw=none,tkzgrphcurve,name path=tmpintborneb] ({\absnoeudB},{\pflymin})--({\absnoeudB},{\pflymax}) ; + \path[name intersections={of=tmpintborneb and \pfldomtikznameinterpo,name=ZZZ}] ; + \draw[\pfldomtikzcolorbord,tkzgrphline] ({\absnoeudB},{\pflOy})-- (ZZZ-1) ; + }% + {}% + \IfStrEq{\pfldomtikztype}{fct/fct}%avec #3=formule et #4=formule + {% + \begin{scope} + \clip ({\pflxmin},{\pflymin}) rectangle ({\pflxmax},{\pflymax}); + \draw[integraletikzstyle,integralebordtikzstyle,#2] plot[smooth] coordinates {\xintthecoords\xintfloatexpr seq((x,#3),x=\absnoeudA..[\pflstepcurve]..\absnoeudB,\absnoeudB)\relax} -- plot[smooth] coordinates {\xintthecoords\xintfloatexpr seq((x,#4),x=\absnoeudB..[-(\pflstepcurve)]..\absnoeudA,\absnoeudA)\relax} -- cycle ; + \end{scope} + }% + {}% + \IfStrEq{\pfldomtikztype}{spl/spl}%avec #3=cbe spline + #4=cbe splineB + {% + \begin{scope} + \clip ({\absnoeudA},{\pflymin}) rectangle ({\absnoeudB},{\pflymax}) ; + \clip ({\absnoeudA},{\pflymin}) -- \pfldomtikznamespline -- ({\absnoeudB},{\pflymin}) -- cycle ; + \clip ({\absnoeudA},{\pflymax}) -- \pfldomtikznamesplineb -- ({\absnoeudB},{\pflymax}) -- cycle ; + \filldraw[integraletikzstyle,integralebordtikzstyle,#2] ({\absnoeudA},{\pflymin}) rectangle ({\absnoeudB},{\pflymax}) ; + \end{scope} + \path[draw=none,tkzgrphcurve,name path=tmpintbornea] ({\absnoeudA},{\pflymin})--({\absnoeudA},{\pflymax}) ; + \path[name intersections={of=#3 and tmpintbornea,name=YYYA}] ; + \path[name intersections={of=#4 and tmpintbornea,name=ZZZA}] ; + \path[draw=none,tkzgrphcurve,name path=tmpintborneb] ({\absnoeudB},{\pflymin})--({\absnoeudB},{\pflymax}) ; + \path[name intersections={of=#3 and tmpintborneb,name=YYYB}] ; + \path[name intersections={of=#4 and tmpintborneb,name=ZZZB}] ; + \draw[\pfldomtikzcolorbord,tkzgrphline] (YYYA-1)-- (ZZZA-1) ; + \draw[\pfldomtikzcolorbord,tkzgrphline] (YYYB-1)-- (ZZZB-1) ; + }% + {}% + \IfStrEq{\pfldomtikztype}{itp/itp}%avec #3=cbe interpo + #4=cbe interpoB + {% + \begin{scope} + \clip ({\absnoeudA},{\pflymin}) rectangle ({\absnoeudB},{\pflymax}) ; + \clip ({\absnoeudA},{\pflymin}) -- plot [smooth,tension={\useKV[GraphicTikzIntegr]{Tension}}] coordinates {#3} -- ({\absnoeudB},{\pflymin}) ; + \clip ({\absnoeudA},{\pflymax}) -- plot [smooth,tension={\useKV[GraphicTikzIntegr]{TensionB}}] coordinates {#4} -- ({\absnoeudB},{\pflymax}) ; + \filldraw[integraletikzstyle,integralebordtikzstyle,#2] ({\absnoeudA},{\pflymin}) rectangle ({\absnoeudB},{\pflymax}) ; + \end{scope} + \path[draw=none,tkzgrphcurve,name path=tmpintbornea] ({\absnoeudA},{\pflymin})--({\absnoeudA},{\pflymax}) ; + \path[name intersections={of=tmpintbornea and \pfldomtikznameinterpo,name=YYYA}] ; + \path[name intersections={of=tmpintbornea and \pfldomtikznameinterpob,name=ZZZA}] ; + \path[draw=none,tkzgrphcurve,name path=tmpintborneb] ({\absnoeudB},{\pflymin})--({\absnoeudB},{\pflymax}) ; + \path[name intersections={of=tmpintborneb and \pfldomtikznameinterpo,name=YYYB}] ; + \path[name intersections={of=tmpintborneb and \pfldomtikznameinterpob,name=ZZZB}] ; + \draw[\pfldomtikzcolorbord,tkzgrphline] (YYYA-1)-- (ZZZA-1) ; + \draw[\pfldomtikzcolorbord,tkzgrphline] (YYYB-1)-- (ZZZB-1) ; + }% + {}% + \IfStrEq{\pfldomtikztype}{fct/spl}%avec #3=formule + #4=spline + {% + \begin{scope} + \clip ({\absnoeudA},{\pflymin}) rectangle ({\absnoeudB},{\pflymax}) ; + \clip ({\absnoeudA},{\pflymin}) -- plot[smooth] coordinates {\xintthecoords\xintfloatexpr seq((x,#3),x=\absnoeudA..[\pflstepcurve]..\absnoeudB,\absnoeudB)\relax} -- ({\absnoeudB},{\pflymin}) -- cycle ; + \clip ({\absnoeudA},{\pflymax}) -- \pfldomtikznamesplineb -- ({\absnoeudB},{\pflymax}) -- cycle ; + \filldraw[integraletikzstyle,integralebordtikzstyle,#2] ({\absnoeudA},{\pflymin}) rectangle ({\absnoeudB},{\pflymax}) ; + \end{scope} + \path[draw=none,tkzgrphcurve,name path=tmpintbornea] ({\absnoeudA},{\pflymin})--({\absnoeudA},{\pflymax}) ; + \path[name intersections={of=tmpintbornea and #4,name=ZZZA}] ; + \path[draw=none,tkzgrphcurve,name path=tmpintborneb] ({\absnoeudB},{\pflymin})--({\absnoeudB},{\pflymax}) ; + \path[name intersections={of=tmpintborneb and #4,name=ZZZB}] ; + \draw[\pfldomtikzcolorbord,tkzgrphline] ({\absnoeudA},{\xintfloateval{subs(#3,x=\absnoeudA)}})-- (ZZZA-1) ; + \draw[\pfldomtikzcolorbord,tkzgrphline] ({\absnoeudB},{\xintfloateval{subs(#3,x=\absnoeudB)}})-- (ZZZB-1) ; + }% + {}% + \IfStrEq{\pfldomtikztype}{spl/fct}%avec #3=spline + #4=fct + {% + \begin{scope} + \clip ({\absnoeudA},{\pflymin}) rectangle ({\absnoeudB},{\pflymax}) ; + \clip ({\absnoeudA},{\pflymax}) -- plot[smooth] coordinates {\xintthecoords\xintfloatexpr seq((x,#4),x=\absnoeudA..[\pflstepcurve]..\absnoeudB,\absnoeudB)\relax} -- ({\absnoeudB},{\pflymax}) -- cycle ; + \clip ({\absnoeudA},{\pflymin}) -- \pfldomtikznamespline -- ({\absnoeudB},{\pflymin}) -- cycle ; + \filldraw[integraletikzstyle,integralebordtikzstyle,#2] ({\absnoeudA},{\pflymin}) rectangle ({\absnoeudB},{\pflymax}) ; + \end{scope} + \path[draw=none,tkzgrphcurve,name path=tmpintbornea] ({\absnoeudA},{\pflymin})--({\absnoeudA},{\pflymax}) ; + \path[name intersections={of=tmpintbornea and #3,name=ZZZA}] ; + \path[draw=none,tkzgrphcurve,name path=tmpintborneb] ({\absnoeudB},{\pflymin})--({\absnoeudB},{\pflymax}) ; + \path[name intersections={of=tmpintborneb and #3,name=ZZZB}] ; + \draw[\pfldomtikzcolorbord,tkzgrphline] ({\absnoeudA},{\xintfloateval{subs(#4,x=\absnoeudA)}})-- (ZZZA-1) ; + \draw[\pfldomtikzcolorbord,tkzgrphline] ({\absnoeudB},{\xintfloateval{subs(#4,x=\absnoeudB)}})-- (ZZZB-1) ; + }% + {}% + \IfStrEq{\pfldomtikztype}{fct/itp}%avec #3=formule + #4=liste interpo + {% + \begin{scope} + \clip ({\absnoeudA},{\pflymin}) rectangle ({\absnoeudB},{\pflymax}) ; + \clip ({\absnoeudA},{\pflymin}) -- plot[smooth] coordinates {\xintthecoords\xintfloatexpr seq((x,#3),x=\absnoeudA..[\pflstepcurve]..\absnoeudB,\absnoeudB)\relax} -- ({\absnoeudB},{\pflymin}) -- cycle ; + \clip ({\absnoeudA},{\pflymax}) -- plot [smooth,tension={\useKV[GraphicTikzIntegr]{TensionB}}] coordinates {#4} -- ({\absnoeudB},{\pflymax}) ; + \filldraw[integraletikzstyle,integralebordtikzstyle,#2] ({\absnoeudA},{\pflymin}) rectangle ({\absnoeudB},{\pflymax}) ; + \end{scope} + \path[draw=none,tkzgrphcurve,name path=tmpintbornea] ({\absnoeudA},{\pflymin})--({\absnoeudA},{\pflymax}) ; + \path[draw=none,tkzgrphcurve,name path=tmpintborneb] ({\absnoeudB},{\pflymin})--({\absnoeudB},{\pflymax}) ; + \path[name intersections={of=tmpintbornea and \pfldomtikznameinterpob,name=ZZZAA}] ; + \path[name intersections={of=tmpintborneb and \pfldomtikznameinterpob,name=ZZZAB}] ; + \draw[\pfldomtikzcolorbord,tkzgrphline] ({\absnoeudA},{\xintfloateval{subs(#3,x=\absnoeudA)}})-- (ZZZAA-1) ; + \draw[\pfldomtikzcolorbord,tkzgrphline] ({\absnoeudB},{\xintfloateval{subs(#3,x=\absnoeudB)}})-- (ZZZAB-1) ; + }% + {}% + \IfStrEq{\pfldomtikztype}{itp/fct}% + {% + \begin{scope} + \clip ({\absnoeudA},{\pflymin}) rectangle ({\absnoeudB},{\pflymax}) ; + \clip ({\absnoeudA},{\pflymax}) -- plot[smooth] coordinates {\xintthecoords\xintfloatexpr seq((x,#4),x=\absnoeudA..[\pflstepcurve]..\absnoeudB,\absnoeudB)\relax} -- ({\absnoeudB},{\pflymax}) -- cycle ; + \clip ({\absnoeudA},{\pflymin}) -- plot [smooth,tension={\useKV[GraphicTikzIntegr]{Tension}}] coordinates {#3} -- ({\absnoeudB},{\pflymin}) ; + \filldraw[integraletikzstyle,integralebordtikzstyle,#2] ({\absnoeudA},{\pflymin}) rectangle ({\absnoeudB},{\pflymax}) ; + \end{scope} + \path[draw=none,tkzgrphcurve,name path=tmpintbornea] ({\absnoeudA},{\pflymin})--({\absnoeudA},{\pflymax}) ; + \path[draw=none,tkzgrphcurve,name path=tmpintborneb] ({\absnoeudB},{\pflymin})--({\absnoeudB},{\pflymax}) ; + \path[name intersections={of=tmpintbornea and \pfldomtikznameinterpo,name=ZZZAA}] ; + \path[name intersections={of=tmpintborneb and \pfldomtikznameinterpo,name=ZZZAB}] ; + \draw[\pfldomtikzcolorbord,tkzgrphline] ({\absnoeudA},{\xintfloateval{subs(#4,x=\absnoeudA)}})-- (ZZZAA-1) ; + \draw[\pfldomtikzcolorbord,tkzgrphline] ({\absnoeudB},{\xintfloateval{subs(#4,x=\absnoeudB)}})-- (ZZZAB-1) ; + }% + {}% + \IfStrEq{\pfldomtikztype}{itp/spl}% + {% + \begin{scope} + \clip ({\absnoeudA},{\pflymin}) rectangle ({\absnoeudB},{\pflymax}) ; + \clip ({\absnoeudA},{\pflymin}) -- plot [smooth,tension={\useKV[GraphicTikzIntegr]{Tension}}] coordinates {#3} -- ({\absnoeudB},{\pflymin}) ; + \clip ({\absnoeudA},{\pflymax}) -- \pfldomtikznamesplineb -- ({\absnoeudB},{\pflymax}) -- cycle ; + \filldraw[integraletikzstyle,integralebordtikzstyle,#2] ({\absnoeudA},{\pflymin}) rectangle ({\absnoeudB},{\pflymax}) ; + \end{scope} + \path[draw=none,tkzgrphcurve,name path=tmpintbornea] ({\absnoeudA},{\pflymin})--({\absnoeudA},{\pflymax}) ;%borne inf + \path[draw=none,tkzgrphcurve,name path=tmpintborneb] ({\absnoeudB},{\pflymin})--({\absnoeudB},{\pflymax}) ;%borne sup + \path[name intersections={of=tmpintbornea and \pfldomtikznameinterpo,name=YYYKAA}] ; + \path[name intersections={of=tmpintborneb and \pfldomtikznameinterpo,name=YYYKBB}] ; + \path[name intersections={of=tmpintbornea and #4,name=ZZZKAA}] ; + \path[name intersections={of=tmpintborneb and #4,name=ZZZKBB}] ; + \draw[\pfldomtikzcolorbord,tkzgrphline] (YYYKAA-1)-- (ZZZKAA-1) ; + \draw[\pfldomtikzcolorbord,tkzgrphline] (YYYKBB-1)-- (ZZZKBB-1) ; + }% + {}% + \IfStrEq{\pfldomtikztype}{spl/itp}% + {% + \begin{scope} + \clip ({\absnoeudA},{\pflymin}) rectangle ({\absnoeudB},{\pflymax}) ; + \clip ({\absnoeudA},{\pflymax}) -- plot [smooth,tension={\useKV[GraphicTikzIntegr]{TensionB}}] coordinates {#4} -- ({\absnoeudB},{\pflymax}) ; + \clip ({\absnoeudA},{\pflymin}) -- \pfldomtikznamespline -- ({\absnoeudB},{\pflymin}) -- cycle ; + \filldraw[integraletikzstyle,integralebordtikzstyle,#2] ({\absnoeudA},{\pflymin}) rectangle ({\absnoeudB},{\pflymax}) ; + \end{scope} + \path[draw=none,tkzgrphcurve,name path=tmpintbornea] ({\absnoeudA},{\pflymin})--({\absnoeudA},{\pflymax}) ;%borne inf + \path[draw=none,tkzgrphcurve,name path=tmpintborneb] ({\absnoeudB},{\pflymin})--({\absnoeudB},{\pflymax}) ;%borne sup + \path[name intersections={of=tmpintbornea and \pfldomtikznameinterpob,name=YYYKAA}] ; + \path[name intersections={of=tmpintborneb and \pfldomtikznameinterpob,name=YYYKBB}] ; + \path[name intersections={of=tmpintbornea and #3,name=ZZZKAA}] ; + \path[name intersections={of=tmpintborneb and #3,name=ZZZKBB}] ; + \draw[\pfldomtikzcolorbord,tkzgrphline] (YYYKAA-1)-- (ZZZKAA-1) ; + \draw[\pfldomtikzcolorbord,tkzgrphline] (YYYKBB-1)-- (ZZZKBB-1) ; + }% + {}% +} + +\NewDocumentCommand\DrawPts{ s O{black} D<>{\normalfont\normalsize} m }{% + \IfBooleanTF{#1}% + {% + \foreach \Point in {#4}{% + \filldraw[#2] \Point circle[tkzgrphpointc] ; + } + }% + {% + \foreach \Point/\Pos/\Label in {#4}{% + \filldraw[#2] \Point circle[tkzgrphpointc] node[tkzgrphnode,\Pos,font=#3] {\Label} ; + } + }% +} + +% %====STATS À 2 VARIABLES +\defKV[GraphicTikzRegLin]{% + Rounds=\def\pflarrondisreglin{#1}, + Name=\def\pflnamereglin{#1}, + NameParab=\def\pflnameregquad{#1}, + Start=\def\pflreglinmin{#1}, + End=\def\pflreglinmax{#1} +} +\setKVdefault[GraphicTikzRegLin]{ + ColorScatter=black, + ColorLine=black, + ColorParab=black, + Rounds={}, + Start={\pflxmin}, + End={\pflxmax}, + Name=reglin,% + NameParab=quadreg,% + DrawLine=false,% + DrawParab=false,% + Style=o +} + +\NewDocumentCommand\DrawScatter{ O{} D<>{d} m m }{% + \useKVdefault[GraphicTikzRegLin]% + \setKV[GraphicTikzRegLin]{#1}% on paramètres les nouvelles clés et on les simplifie + %listes des données + \def\xliste{#3} + \def\yliste{#4} + \readlist*\LX{\xliste} + \readlist*\LY{\yliste} + %taille des listes + \def\LNB{\inteval{\LXlen}} + %nuage + \foreach \i in {1,...,\LXlen}{% + \itemtomacro\LX[\i]\tmpmavalx% + \itemtomacro\LY[\i]\tmpmavaly% + \MarkPts*[Style={\useKV[GraphicTikzRegLin]{Style}},Color={\useKV[GraphicTikzRegLin]{ColorScatter}}]{(\tmpmavalx,\tmpmavaly)}% + } + %droite de régression + \ifboolKV[GraphicTikzRegLin]{DrawLine}% + {% + %somme des LX et des LY OK + \xdef\LXSomme{0} + \xdef\LYSomme{0} + \foreach \i in {1,2,...,\LNB}{ + \xdef\LXSomme{\xintfloateval{\LXSomme+\LX[\i]}} + } + \foreach \i in {1,2,...,\LNB}{ + \xdef\LYSomme{\xintfloateval{\LYSomme+\LY[\i]}} + } + %moyenne des LX et des LY OK + \xdef\LXmoy{\xintfloateval{\LXSomme/\LNB}} + \xdef\LYmoy{\xintfloateval{\LYSomme/\LNB}} + %variance des LX et des LY OK + \xdef\LXvar{0} + \foreach \i in {1,2,...,\LNB}{ + \xdef\LXvar{\xintfloateval{\LXvar+(\LX[\i]-\LXmoy)*(\LX[\i]-\LXmoy)}} + } + \xdef\LXvar{\xintfloateval{\LXvar/\LNB}} + \xdef\LYvar{0} + \foreach \i in {1,2,...,\LNB}{ + \xdef\LYvar{\xintfloateval{\LYvar+(\LY[\i]-\LYmoy)*(\LY[\i]-\LYmoy)}} + } + \xdef\LYvar{\xintfloateval{\LYvar/\LNB}} + %covariance des XY OK + \xdef\LXYvar{0} + \foreach \i in {1,2,...,\LNB}{ + \xdef\LXYvar{\xintfloateval{\LXYvar+(\LX[\i]-\LXmoy)*(\LY[\i]-\LYmoy)}} + } + \xdef\LXYvar{\xintfloateval{\LXYvar/\LNB}} + %COEFFS OK + \IfStrEq{\pflarrondisreglin}{}% + {% + \xdef\tmpcoeffreglina{\xintfloateval{\LXYvar/\LXvar}} + \xdef\tmpcoeffreglinb{\xintfloateval{\LYmoy-\tmpcoeffreglina*\LXmoy}} + }% + {% + \IfSubStr{\pflarrondisreglin}{/}% + {% + \StrCut{\pflarrondisreglin}{/}{\pflarrondisreglina}{\pflarrondisreglinb} + }% + {% + \xdef\pflarrondisreglina{\pflarrondisreglin}\xdef\pflarrondisreglinb{\pflarrondisreglin} + }% + \xdef\tmpcoeffreglina{\xintfloateval{round(\LXYvar/\LXvar,\pflarrondisreglina)}} + \xdef\tmpcoeffreglinb{\xintfloateval{round(\LYmoy-\tmpcoeffreglina*\LXmoy,\pflarrondisreglinb)}} + }% + \xintdeffloatfunc #2(x) := (\tmpcoeffreglina)*x+(\tmpcoeffreglinb) ; + %tracé + \begin{scope} + \clip ({\pflxmin},{\pflymin}) rectangle ({\pflxmax},{\pflymax}); + \draw[tkzgrphcurve,{\useKV[GraphicTikzRegLin]{ColorLine}},name path global=\pflnamereglin,samples=2,domain=\pflreglinmin:\pflreglinmax] plot (\x,{\tmpcoeffreglina*\x+\tmpcoeffreglinb}) ; + \end{scope} + }% + {}% + \ifboolKV[GraphicTikzRegLin]{DrawParab}% + {% + %somme importantes + \xdef\LXSomme{0}% + \xdef\LXCSomme{0}% + \xdef\LYSomme{0}% + \xdef\LXXSomme{0}% + \xdef\LXYSomme{0}% + \xdef\LXXCSomme{0}% + \xdef\LXCXCSomme{0}% + \xdef\LXCYSomme{0}% + %calculs + \foreach \i in {1,2,...,\LNB}{% + \xdef\LXSomme{\xintfloateval{\LXSomme+\LX[\i]}}% + \xdef\LXCSomme{\xintfloateval{\LXCSomme+(\LX[\i])^2}}% + }% + \foreach \i in {1,2,...,\LNB}{% + \xdef\LYSomme{\xintfloateval{\LYSomme+\LY[\i]}}% + }% + \xdef\LXmoy{\xintfloateval{\LXSomme/\LNB}}% + \xdef\LYmoy{\xintfloateval{\LYSomme/\LNB}}% + \xdef\LXCmoy{\xintfloateval{\LXCSomme/\LNB}}% + %calculs suites + \foreach \i in {1,2,...,\LNB}{% + \xdef\LXXSomme{\xintfloateval{\LXXSomme+(\LX[\i]-\LXmoy)^2}}% + \xdef\LXYSomme{\xintfloateval{\LXYSomme+(\LX[\i]-\LXmoy)*(\LY[\i]-\LYmoy)}}% + \xdef\LXXCSomme{\xintfloateval{\LXXCSomme+(\LX[\i]-\LXmoy)*((\LX[\i])*(\LX[\i])-\LXCmoy)}}% + \xdef\LXCXCSomme{\xintfloateval{\LXCXCSomme+((\LX[\i])^2-\LXCmoy)^2}}% + \xdef\LXCYSomme{\xintfloateval{\LXCYSomme+((\LX[\i])^2-\LXCmoy)*(\LY[\i]-\LYmoy)}}% + }% + %COEFFS OK + \IfStrEq{\pflarrondisreglin}{}% + {% + \xdef\tmpcoeffregquadb{\xintfloateval{(\LXYSomme*\LXCXCSomme-\LXCYSomme*\LXXCSomme)/(\LXXSomme*\LXCXCSomme-(\LXXCSomme)^2)}} + \xdef\tmpcoeffregquada{\xintfloateval{(\LXCYSomme*\LXXSomme-\LXYSomme*\LXXCSomme)/(\LXXSomme*\LXCXCSomme-(\LXXCSomme)^2)}} + \xdef\tmpcoeffregquadc{\xintfloateval{\LYmoy-\tmpcoeffregquadb*\LXmoy-\tmpcoeffregquada*\LXCmoy}} + }% + {% + \xdef\tmpcoeffregquadb{\xintfloateval{round((\LXYSomme*\LXCXCSomme-\LXCYSomme*\LXXCSomme)/(\LXXSomme*\LXCXCSomme-(\LXXCSomme)^2),\pflarrondisreglin)}} + \xdef\tmpcoeffregquada{\xintfloateval{round((\LXCYSomme*\LXXSomme-\LXYSomme*\LXXCSomme)/(\LXXSomme*\LXCXCSomme-(\LXXCSomme)^2),\pflarrondisreglin)}} + \xdef\tmpcoeffregquadc{\xintfloateval{round(\LYmoy-\tmpcoeffregquadb*\LXmoy-\tmpcoeffregquada*\LXCmoy,\pflarrondisreglin)}} + }% + \xintdeffloatfunc #2(x) := (\tmpcoeffregquada)*x^2+(\tmpcoeffregquadb)*x+\tmpcoeffregquadc ; + %tracé + \begin{scope} + \clip ({\pflxmin},{\pflymin}) rectangle ({\pflxmax},{\pflymax}); + \draw[tkzgrphcurve,{\useKV[GraphicTikzRegLin]{ColorParab}},name path global=\pflnameregquad,samples=250,domain=\pflreglinmin:\pflreglinmax] plot (\x,{\tmpcoeffregquada*(\x)^2+\tmpcoeffregquadb*\x+\tmpcoeffregquadc}) ; + \end{scope} + }% + {}% +} + +\if@loadxintreg +%régressions alternatives +\NewDocumentCommand\DrawRegression{ O{} D<>{curvajust} m D<>{} m m }{% + %1=options de tracés + %2=nom courbe + %3=type + %4=arrondis + %5=liste X + %6=liste Y + \IfStrEq{#3}{lin}% + {% + \xintlinreg[round={#4}]{#5}{#6}% + \DefineFunction[#1,Trace]<#2>{\linrega*x+\linregb}% + }% + {}% + \IfStrEq{#3}{quad}% + {% + \xintquadreg[round={#4}]{#5}{#6}% + \DefineFunction[#1,Trace]<#2>{\quadrega*x^2+\quadregb*x+\quadregc}% + }% + {}% + \IfStrEq{#3}{pow}% + {% + \xintpowreg[round={#4}]{#5}{#6}% + \DefineFunction[#1,Trace]<#2>{\powrega*x^(\powregb)}% + }% + {}% + \IfStrEq{#3}{expab}% + {% + \xintexpabreg[round={#4}]{#5}{#6}% + \DefineFunction[#1,Trace]<#2>{\expabrega*(\expabregb)^x}% + }% + {}% + \IfStrEq{#3}{hyp}% + {% + \xinthypreg[round={#4}]{#5}{#6}% + \DefineFunction[#1,Trace]<#2>{\hyprega+(\hypregb)/x}% + }% + {}% + \IfStrEq{#3}{log}% + {% + \xintlogreg[round={#4}]{#5}{#6}% + \DefineFunction[#1,Trace]<#2>{\logrega+(\logregb)*log(x)}% + }% + {}% + \IfStrEq{#3}{exp}% + {% + \xintexpreg[round={#4}]{#5}{#6}% + \DefineFunction[#1,Trace]<#2>{exp(\exprega*x+\expregb)}% + }% + {}% + \IfStrEq{#3}{expalt}% + {% + \xintexpreg[Alt,round={#4}]{#5}{#6}% + \DefineFunction[#1,Trace]<#2>{\expregb*exp(\exprega*x)}% + }% + {}% + \IfStrEq{#3}{cub}% + {% + \xintcubreg[round={#4}]{#5}{#6}% + \DefineFunction[#1,Trace]<#2>{\cubrega*x^3+\cubregb*x^2+\cubregc*x+\cubregd}% + }% + {}% + \IfSubStr{#3}{expoff}% + {% + \StrBehind{#3}{=}[\expoffset]% + \xintexpoffreg[round={#4},offset=\expoffset]{#5}{#6}% + \DefineFunction[#1,Trace]<#2>{\expoffset+\expregoffb*exp(\expregoffa*x)}% + }% + {}% +} +\fi + +%===IMAGES & ANTÉCÉDENTS +\defKV[GraphicTikzImg]{ + Colors=\def\pflimgcolors{#1},% + Name=\def\pflantecednoms{#1}% +} + +\setKVdefault[GraphicTikzImg]{ + Colors=black,% + Lines=false,% + Spline=false,% + Name={},% + Style=o +} + +\NewDocumentCommand\DefineRange{ O{} m m }{% + \useKVdefault[GraphicTikzImg]% + \setKV[GraphicTikzImg]{#1}% + \ifboolKV[GraphicTikzImg]{Spline}% + {% + \path[draw=none,tkzgrphcurve,name path=tmpimage] ({#3},{\pflymin})--({#3},{\pflymax}) ; + \path[name intersections={of=#2 and tmpimage,name=ZZZZ}] ; + \coordinate (\pflantecednoms) at (ZZZZ-1) ; + }% + {% + \xdef\tmpresimg{\xintfloateval{#2(#3)}}% + \coordinate (\pflantecednoms) at ({#3},{\tmpresimg}) ; + }% +} + +\NewDocumentCommand\DrawRanges{ O{} m m }{% + \useKVdefault[GraphicTikzImg]% + \setKV[GraphicTikzImg]{#1}% + \IfSubStr{\pflimgcolors}{/}% + {% + \StrCut{\pflimgcolors}{/}{\pflimgcolorpt}{\pflimgcolorline} + }% + {% + \xdef\pflimgcolorpt{\pflimgcolors}\xdef\pflimgcolorline{\pflimgcolors} + }% + \ifboolKV[GraphicTikzImg]{Spline}% + {% + \foreach \i in {#3}{% + \path[draw=none,tkzgrphcurve,name path=tmpimage] ({\i},{\pflymin})--({\i},{\pflymax}) ; + \path[name intersections={of=#2 and tmpimage,name=ZZ}] ; + \ifboolKV[GraphicTikzImg]{Lines}% + {% + \draw[\pflimgcolorline,tkzgrphrange] let \p1 = (ZZ-1) in ({\x1},{\pflOy}) |- ({\pflOx},{\y1}) ; + }% + {}% + \MarkPts*[Style={\useKV[GraphicTikzImg]{Style}},Color=\pflimgcolorpt]{(ZZ-1)} + %\filldraw[\pflimgcolorpt] (ZZ-1) circle[radius=2pt] ; + } + }% + {% + \foreach \i in {#3}{% + \xdef\tmpresimg{\xintfloateval{#2(\i)}}% + \ifboolKV[GraphicTikzImg]{Lines}% + {% + \draw[\pflimgcolorline,tkzgrphrange] ({\i},{\pflOy}) |- ({\pflOx},{\tmpresimg}) ; + }% + {}% + \MarkPts*[Style={\useKV[GraphicTikzImg]{Style}},Color=\pflimgcolorpt]{({\i},{\tmpresimg})} + %\filldraw[\pflimgcolorpt] ({\i},{\tmpresimg}) circle[radius=2pt] ; + }% + }% +} + +\NewDocumentCommand\DrawCounterimage{ O{} m m }{%avec le nom de la courbe... + \useKVdefault[GraphicTikzImg]% + \setKV[GraphicTikzImg]{#1}% + \xdef\pflstepcurve{\xintfloateval{0.1*\pflgrillexs}} + \IfSubStr{\pflimgcolors}{/}% + {% + \StrCut{\pflimgcolors}{/}{\pflimgcolorpt}{\pflimgcolorline}% + }% + {% + \xdef\pflimgcolorpt{\pflimgcolors}\xdef\pflimgcolorline{\pflimgcolors}% + }% + \begin{scope} + \clip ({\pflxmin},{\pflymin}) rectangle ({\pflxmax},{\pflymax}); + \path[draw=none,tkzgrphcurve,name path=tmpanteced] ({\pflxmin},{#3})--({\pflxmax},{#3}) ; + \path[name intersections={of=#2 and tmpanteced,name=ZZ,total=\t}] \pgfextra{\xdef\tmptotanteced{\t}}; + \xintifboolexpr{\tmptotanteced == 0}{}% + {% + \ifboolKV[GraphicTikzImg]{Lines}% + {% + \draw[\pflimgcolorline,tkzgrphcounterimage] ({\pflxmin},{#3})--({\pflxmax},{#3}) ; + }% + {}% + \foreach \i in {1,...,\tmptotanteced}{% + \IfStrEq{\pflantecednoms}{}% + {}% + {% + \coordinate (\pflantecednoms-\i) at (ZZ-\i) ; + }% + \ifboolKV[GraphicTikzImg]{Lines}% + {% + \draw[\pflimgcolorline,tkzgrphrange] let \p1 = (ZZ-\i) in (ZZ-\i) -- ({\x1},{\pflOy}) ; + }% + {}% + \MarkPts*[Style={\useKV[GraphicTikzImg]{Style}},Color=\pflimgcolorpt]{(ZZ-\i)} + %\filldraw[\pflimgcolorpt] (ZZ-\i) circle[radius=2pt] ; + }% + }% \end{scope} } %===NOMBRE DÉRIVÉ ET TANGENTE (EXPÉRIEMENTAL) -\NewDocumentCommand\CalculerNbDerive{ s m m m }{%*=gauche+nomfct+abspt+h +\NewDocumentCommand\CalcDerivate{ s m m m }{%*=gauche+nomfct+abspt+h \IfBooleanTF{#1}% {% \xdef\TmpResNbDeriv{\xintfloateval{(#2(#3)-#2(#3-#4))/(#4)}}% @@ -1045,35 +3859,36 @@ }% } -\defKV[GraphiqueTikzTgte]{% - Couleurs=\def\pfltgttikzcolors{#1},% - DecG=\def\pfltgttikzkl{#1},% - DecD=\def\pfltgttikzkr{#1},% +\defKV[GraphicTikzTgte]{% + Colors=\def\pfltgttikzcolors{#1},% + OffsetL=\def\pfltgttikzkl{#1},% + OffsetR=\def\pfltgttikzkr{#1},% h=\def\pfltgttikzh{#1},% - Sens=\def\pfltgttikzsens{#1},% + Direction=\def\pfltgttikzsens{#1},% Delta=\def\tmptgtedelta{#1} } -\setKVdefault[GraphiqueTikzTgte]{% - Couleurs=black,% - DecG=1,% - DecD=1,% - AffPoint=false,% +\setKVdefault[GraphicTikzTgte]{% + Colors=black,% + OffsetL=1,% + OffsetR=1,% + DispPt=false,% Spline=false,% h=0.1,% - Sens=gd,% - Noeud=false,% - Delta=0.01 + Direction=lr,% + Node=false,% + Delta=0.01,% + Style=o } -\NewDocumentCommand\TracerTangente{ O{} m m D<>{} }{% - \restoreKV[GraphiqueTikzTgte]% - \setKV[GraphiqueTikzTgte]{#1}% +\NewDocumentCommand\DrawTangent{ O{} m m D<>{} }{% + \restoreKV[GraphicTikzTgte]% + \setKV[GraphicTikzTgte]{#1}% %en fonction de la gestion de l'abscisse - \ifboolKV[GraphiqueTikzTgte]{Noeud}% + \ifboolKV[GraphicTikzTgte]{Node}% {% \path #3; \pgfgetlastxy{\macrox}{\macroy}% - \xdef\pfltgttikzx{\xintfloateval{(\ConvertirPtToCm{\macrox})/(\pflxunit)}}% + \xdef\pfltgttikzx{\xintfloateval{(\ConvertPtToCm{\macrox})/(\pflxunit)}}% }% {% \xdef\pfltgttikzx{#3}% @@ -1089,11 +3904,11 @@ \xdef\tmptgtdeb{\xintfloateval{\pfltgttikzx-(\pfltgttikzkl)}}% \xdef\tmptgtfin{\xintfloateval{\pfltgttikzx+(\pfltgttikzkr)}}% %suivant le type de courbe - \ifboolKV[GraphiqueTikzTgte]{Spline}% + \ifboolKV[GraphicTikzTgte]{Spline}% {% \path[name path=tmpimage] ({\pfltgttikzx},{\pflymin})--({\pfltgttikzx},{\pflymax}) ; \path[name intersections={of=#2 and tmpimage,name=TANp}] ; - \IfStrEq{\pfltgttikzsens}{gd}% + \IfStrEq{\pfltgttikzsens}{lr}% {% \path[name path=L-vline] ({\pfltgttikzx-\tmptgtedelta},{\pflymin}) -- ({\pfltgttikzx-\tmptgtedelta},{\pflymax}) ; \path[name path=R-vline] ({\pfltgttikzx+\tmptgtedelta},{\pflymin}) -- ({\pfltgttikzx+\tmptgtedelta},{\pflymax}) ; @@ -1101,7 +3916,7 @@ %\coordinate (RXcoor) at ($(TANp-1)+({\tmptgtedelta},0)$) ; }% {}% - \IfStrEq{\pfltgttikzsens}{g}% + \IfStrEq{\pfltgttikzsens}{l}% {% \path[name path=L-vline] ({\pfltgttikzx-\tmptgtedelta},{\pflymin}) -- ({\pfltgttikzx-\tmptgtedelta},{\pflymax}) ; \path[name path=R-vline] ({\pfltgttikzx},{\pflymin}) -- ({\pfltgttikzx},{\pflymax}) ; @@ -1110,7 +3925,7 @@ \def\tmptgtfin{\pfltgttikzx}% }% {}% - \IfStrEq{\pfltgttikzsens}{d}% + \IfStrEq{\pfltgttikzsens}{r}% {% \path[name path=L-vline] ({\pfltgttikzx},{\pflymin}) -- ({\pfltgttikzx},{\pflymax}) ; \path[name path=R-vline] ({\pfltgttikzx+\tmptgtedelta},{\pflymin}) -- ({\pfltgttikzx+\tmptgtedelta},{\pflymax}) ; @@ -1124,47 +3939,796 @@ \coordinate (RRpoint) at ($(RXcut-1)+(TANp-1)-(tzXproj)$) ; % move \path (LLpoint); \pgfgetlastxy{\macrox}{\macroy}% - \xdef\tzTANLLX{\xintfloateval{(\ConvertirPtToCm{\macrox})/(\pflxunit)}}% - \xdef\tzTANLLY{\xintfloateval{(\ConvertirPtToCm{\macroy})/(\pflyunit)}}% + \xdef\tzTANLLX{\xintfloateval{(\ConvertPtToCm{\macrox})/(\pflxunit)}}% + \xdef\tzTANLLY{\xintfloateval{(\ConvertPtToCm{\macroy})/(\pflyunit)}}% \path (RRpoint); \pgfgetlastxy{\macrox}{\macroy}% - \xdef\tzTANRRX{\xintfloateval{(\ConvertirPtToCm{\macrox})/(\pflxunit)}}% - \xdef\tzTANRRY{\xintfloateval{(\ConvertirPtToCm{\macroy})/(\pflyunit)}}% + \xdef\tzTANRRX{\xintfloateval{(\ConvertPtToCm{\macrox})/(\pflxunit)}}% + \xdef\tzTANRRY{\xintfloateval{(\ConvertPtToCm{\macroy})/(\pflyunit)}}% \def\tztangentLFn{(\tzTANRRY-\tzTANLLY)/(\tzTANRRX-\tzTANLLX)*(\x-\tzTANLLX)+\tzTANLLY}% \begin{scope} \clip ({\pflxmin},{\pflymin}) rectangle ({\pflxmax},{\pflymax}) ; - \draw[pfltrait,\pfltgttikzline,domain=\tmptgtdeb:\tmptgtfin,samples=2,#4] plot (\x,{\tztangentLFn}) ; + \draw[tkzgrphline,\pfltgttikzline,domain=\tmptgtdeb:\tmptgtfin,samples=2,#4] plot (\x,{\tztangentLFn}) ; \end{scope} }% {% - \IfStrEq{\pfltgttikzsens}{g}% + \IfStrEq{\pfltgttikzsens}{l}% {% - \CalculerNbDerive*{#2}{\pfltgttikzx}{\pfltgttikzh}% + \CalcDerivate*{#2}{\pfltgttikzx}{\pfltgttikzh}% }% {% - \CalculerNbDerive{#2}{\pfltgttikzx}{\pfltgttikzh}% + \CalcDerivate{#2}{\pfltgttikzx}{\pfltgttikzh}% }% \begin{scope} \clip ({\pflxmin},{\pflymin}) rectangle ({\pflxmax},{\pflymax}) ; - \draw[pfltrait,\pfltgttikzline,#4] plot[smooth] coordinates {% + \draw[tkzgrphline,\pfltgttikzline,#4] plot[smooth] coordinates {% \xintthecoords\xintfloatexpr seq((x,\TmpResNbDeriv*(x-(\pfltgttikzx))+#2(\pfltgttikzx)),x=\tmptgtdeb,\tmptgtfin) \relax }; \end{scope} }% - \ifboolKV[GraphiqueTikzTgte]{AffPoint}% + \ifboolKV[GraphicTikzTgte]{DispPt}% {% - \ifboolKV[GraphiqueTikzTgte]{Spline}% + \ifboolKV[GraphicTikzTgte]{Spline}% {% - \filldraw[\pfltgttikzpoint] (TANp-1) circle[pflpointc] ; + \MarkPts*[Style={\useKV[GraphicTikzTgte]{Style}},Color=\pfltgttikzpoint]{(TANp-1)} + %\filldraw[] (TANp-1) circle[tkzgrphpointc] ; }% {% \xdef\tmpimgtgt{\xintfloateval{#2(\pfltgttikzx)}}% - \filldraw[\pfltgttikzpoint] ({\pfltgttikzx},\tmpimgtgt) circle[pflpointc] ; + \MarkPts*[Style={\useKV[GraphicTikzTgte]{Style}},Color=\pfltgttikzpoint]{({\pfltgttikzx},\tmpimgtgt)} + %\filldraw[\pfltgttikzpoint] ({\pfltgttikzx},\tmpimgtgt) circle[tkzgrphpointc] ; + }% + }% + {}% +} + +%====loi normale +\defKV[GraphicTikzGaussienne]{% + Step=\def\pflgaussstep{#1},% + Name=\def\pflgaussname{#1} +} + +\setKVdefault[GraphicTikzGaussienne]{% + Name=gaussian,% + Color=black,% + Trace=false,% + Step={},% + Start={\pflxmin},% + End={\pflxmax} +} + +\NewDocumentCommand\DefineStandartDeviation{ O{} D<>{phi} m m }{% + %1=options + %2=mu + %3=sigma + \restoreKV[GraphicTikzGaussienne]% + \setKV[GraphicTikzGaussienne]{#1}% + \xintdeffloatfunc #2(x) := 1/((#4)*sqrt(2*pi))*exp(-0.5*((x-(#3))/(#4))^2) ;% + \IfStrEq{\pflgaussstep}{}% + {% + \xdef\pflgaussstep{\xintfloateval{((\useKV[GraphicTikzGaussienne]{End})-(\useKV[GraphicTikzGaussienne]{Start}))/100}}% + }% + {}% + \begin{scope} + \clip ({\pflxmin},{\pflymin}) rectangle ({\pflxmax},{\pflymax}); + \ifboolKV[GraphicTikzGaussienne]{Trace}% + {% + \path[draw,tkzgrphcurve,{\useKV[GraphicTikzGaussienne]{Color}},name path global=\pflgaussname] plot[smooth] coordinates {% + \xintthecoords\xintfloatexpr + seq((x,#2(x)),x={\useKV[GraphicTikzGaussienne]{Start}}..[\pflgaussstep]..{\useKV[GraphicTikzGaussienne]{End}},{\useKV[GraphicTikzGaussienne]{End}}) + \relax + } ; + }% + {% + \path[draw=none,tkzgrphcurve,name path global=\pflgaussname] plot[smooth] coordinates {% + \xintthecoords\xintfloatexpr + seq((x,#2(x)),x={\useKV[GraphicTikzGaussienne]{Start}}..[\pflgaussstep]..{\useKV[GraphicTikzGaussienne]{End}},{\useKV[GraphicTikzGaussienne]{End}}) + \relax + } ; + }% + \end{scope} +} + +\NewDocumentCommand\DrawStandartDeviation{ O{} m }{% + %1=options + %2=mu + %3=sigma + \restoreKV[GraphicTikzGaussienne]% + \setKV[GraphicTikzGaussienne]{#1}% + \IfStrEq{\pflgaussstep}{}% + {% + \xdef\pflgaussstep{\xintfloateval{((\useKV[GraphicTikzGaussienne]{End})-(\useKV[GraphicTikzGaussienne]{Start}))/100}}% + }% + {}% + \begin{scope} + \clip ({\pflxmin},{\pflymin}) rectangle ({\pflxmax},{\pflymax}); + \draw[tkzgrphcurve,{\useKV[GraphicTikzGaussienne]{Color}}] plot[smooth] coordinates {% + \xintthecoords\xintfloatexpr + seq((x,#2),x={\useKV[GraphicTikzGaussienne]{Start}}..[\pflgaussstep]..{\useKV[GraphicTikzGaussienne]{End}},{\useKV[GraphicTikzGaussienne]{End}}) + \relax + } ; + \end{scope} +} + +\NewDocumentCommand\DefineKhiSquared{ O{} D<>{khi} m }{% + %1=options + %2=mu + %3=sigma + \restoreKV[GraphicTikzGaussienne]% + \setKV[GraphicTikzGaussienne]{#1}% + \xintdeffloatfunc #2(x) := (x<0)?{0}{(1/(2^((#3)/2)*pflgamma((#3)/2)))*x^((#3)/2-1)*exp(-x/2)}; + \IfStrEq{\pflgaussstep}{}% + {% + \xdef\pflgaussstep{\xintfloateval{((\useKV[GraphicTikzGaussienne]{End})-(\useKV[GraphicTikzGaussienne]{Start}))/100}}% + }% + {}% + \begin{scope} + \clip ({\pflxmin},{\pflymin}) rectangle ({\pflxmax},{\pflymax}); + \ifboolKV[GraphicTikzGaussienne]{Trace}% + {% + \path[draw,tkzgrphcurve,{\useKV[GraphicTikzGaussienne]{Color}},name path global=\pflgaussname] plot[smooth] coordinates {% + \xintthecoords\xintfloatexpr + seq((x,#2(x)),x={\useKV[GraphicTikzGaussienne]{Start}}..[\pflgaussstep]..{\useKV[GraphicTikzGaussienne]{End}},{\useKV[GraphicTikzGaussienne]{End}}) + \relax + } ; + }% + {% + \path[draw=none,tkzgrphcurve,name path global=\pflgaussname] plot[smooth] coordinates {% + \xintthecoords\xintfloatexpr + seq((x,#2(x)),x={\useKV[GraphicTikzGaussienne]{Start}}..[\pflgaussstep]..{\useKV[GraphicTikzGaussienne]{End}},{\useKV[GraphicTikzGaussienne]{End}}) + \relax + } ; + }% + \end{scope} +} + +\NewDocumentCommand\DrawKhiSquared{ O{} m }{% + %1=options + %2=mu + %3=sigma + \restoreKV[GraphicTikzGaussienne]% + \setKV[GraphicTikzGaussienne]{#1}% + \IfStrEq{\pflgaussstep}{}% + {% + \xdef\pflgaussstep{\xintfloateval{((\useKV[GraphicTikzGaussienne]{End})-(\useKV[GraphicTikzGaussienne]{Start}))/100}}% + }% + {}% + \begin{scope} + \clip ({\pflxmin},{\pflymin}) rectangle ({\pflxmax},{\pflymax}); + \draw[tkzgrphcurve,{\useKV[GraphicTikzGaussienne]{Color}}] plot[smooth] coordinates {% + \xintthecoords\xintfloatexpr + seq((x,#2),x={\useKV[GraphicTikzGaussienne]{Start}}..[\pflgaussstep]..{\useKV[GraphicTikzGaussienne]{End}},{\useKV[GraphicTikzGaussienne]{End}}) + \relax + } ; + \end{scope} +} + +%====droite +\defKV[GraphicTikzLine]{% + Name=\def\pfldroitename{#1} +} + +\setKVdefault[GraphicTikzLine]{% + Slope=false,% + Color=black,% + Start={\pflxmin},% + End={\pflxmax},% + Name={} +} + +\NewDocumentCommand\DrawLine{ O{} m m D<>{} }{% + \restoreKV[GraphicTikzLine]% + \setKV[GraphicTikzLine]{#1}% + %1er point + \path #2;% + \pgfgetlastxy{\macrox}{\macroy}% + \xdef\pfldtetikzxA{\xintfloateval{(\ConvertPtToCm{\macrox})/(\pflxunit)}}% + \xdef\pfldtetikzyA{\xintfloateval{(\ConvertPtToCm{\macroy})/(\pflyunit)}}% + %2ème point si besoin + \ifboolKV[GraphicTikzLine]{Slope}% + {% + \xdef\pfldtepente{\xintfloateval{#3}}% + }% + {% + \path #3;% + \pgfgetlastxy{\macrox}{\macroy}% + \xdef\pfldtetikzxB{\xintfloateval{(\ConvertPtToCm{\macrox})/(\pflxunit)}}% + \xdef\pfldtetikzyB{\xintfloateval{(\ConvertPtToCm{\macroy})/(\pflyunit)}}% + \xdef\pfldtepente{\xintfloateval{(\pfldtetikzyB-\pfldtetikzyA)/(\pfldtetikzxB-\pfldtetikzxA)}}% + }% + \begin{scope} + \clip ({\pflxmin},{\pflymin}) rectangle ({\pflxmax},{\pflymax}) ; + \xintifboolexpr{\pfldtetikzxA == \pfldtetikzxB}% + {% + \IfEq{\pfldroitename}{}% + {% + \draw[tkzgrphline,{\useKV[GraphicTikzLine]{Color}},#4] (\pfldtetikzxA,\pflymin) -- (\pfldtetikzxA,\pflymax) ; + }% + {% + \draw[tkzgrphline,{\useKV[GraphicTikzLine]{Color}},#4,name path global=\pfldroitename] (\pfldtetikzxA,\pflymin) -- (\pfldtetikzxA,\pflymax) ; + }% + }% + {% + \IfEq{\pfldroitename}{}% + {% + \draw[tkzgrphline,{\useKV[GraphicTikzLine]{Color}},domain={\useKV[GraphicTikzLine]{Start}}:{\useKV[GraphicTikzLine]{End}},samples=2,#4] plot (\x,{\pfldtepente*(\x-\pfldtetikzxA)+\pfldtetikzyA}) ; + }% + {% + \draw[tkzgrphline,{\useKV[GraphicTikzLine]{Color}},domain={\useKV[GraphicTikzLine]{Start}}:{\useKV[GraphicTikzLine]{End}},samples=2,name path global=\pfldroitename,#4] plot (\x,{\pfldtepente*(\x-\pfldtetikzxA)+\pfldtetikzyA}) ; + }% + }% + \end{scope} +} + +%====asymptote +\NewDocumentCommand\DrawAsymptote{ O{} m D<>{} }{% + \restoreKV[GraphicTikzLine]% + \setKV[GraphicTikzLine]{#1}% + %tracé + \draw[tkzgrphline,{\useKV[GraphicTikzLine]{Color}},#3] ({#2},{\pflymin})--({#2},{\pflymax}) ; +} + +%====minmax +\defKV[GraphicTikzMinMax]{% + Pas=\def\pflminmaxstep{#1},% + Method=\def\pflminmaxmethode{#1},% + Coeffs=\def\pflminmaxcoeffs{#1} +} +\setKVdefault[GraphicTikzMinMax]{% + Start={\pflxmin},% + End={\pflxmax},% + Pas={},% + Tension=0.5,% + Method=function,% + Coeffs=3 +} + +\NewDocumentCommand\FindMax{ O{} m O{c-max} }{% + %1=clés + %2=paramètres en fonction de [Methode] + \restoreKV[GraphicTikzMinMax]% + \setKV[GraphicTikzMinMax]{#1}% + \IfStrEq{\pflstepcurve}{}% + {% + \xdef\pflminmaxstep{\xintfloateval{((\useKV[GraphicTikzMinMax]{End})-(\useKV[GraphicTikzMinMax]{Start}))/100}}% + }% + {}% + \begin{scope}[bezier bounding box,local bounding box=bbtmpmax] + \IfStrEq{\pflminmaxmethode}{function}% + {% + \path[draw=none,name path=curvetmpmax] plot[smooth] coordinates {% + \xintthecoords\xintfloatexpr + seq((x,#2(x)),x={\useKV[GraphicTikzMinMax]{Start}}..[\pflstepcurve]..{\useKV[GraphicTikzMinMax]{End}},{\useKV[GraphicTikzMinMax]{End}}) + \relax + }; + }% + {}% + \IfStrEq{\pflminmaxmethode}{interpo}% + {% + \path[draw=none,name path=curvetmpmax] plot[smooth,tension={\useKV[GraphicTikzMinMax]{Tension}}] coordinates {#2}; + }% + {}% + \IfStrEq{\pflminmaxmethode}{spline}% + {% + \GenerateSpline{#2}{\pflminmaxcoeffs}[\tmpsplineminmax]% + \path[draw=none,name path=curvetmpmax] \tmpsplineminmax ; + }% + {}% + %retour + \path[name path=tmpmax] ([yshift=-0.25\pgflinewidth]bbtmpmax.north east) -- ([yshift=-0.25\pgflinewidth]bbtmpmax.north west) ; + \path[name intersections={of=curvetmpmax and tmpmax,name=#3}] ; + \coordinate (#3) at ($0.5*(#3-1)+0.5*(#3-2)+(0,0.25\pgflinewidth)$) ; + \end{scope} +} + +\NewDocumentCommand\FindMin{ O{} m O{c-min} }{% + %1=clés + %2=paramètres en fonction de [Methode] + \restoreKV[GraphicTikzMinMax]% + \setKV[GraphicTikzMinMax]{#1}% + \IfStrEq{\pflstepcurve}{}% + {% + \xdef\pflminmaxstep{\xintfloateval{((\useKV[GraphicTikzMinMax]{End})-(\useKV[GraphicTikzMinMax]{Start}))/100}}% + }% + {}% + \begin{scope}[bezier bounding box,local bounding box=bbtmpmin] + \IfStrEq{\pflminmaxmethode}{function}% + {% + \path[draw=none,name path=curvetmpmin] plot[smooth] coordinates {% + \xintthecoords\xintfloatexpr + seq((x,#2(x)),x={\useKV[GraphicTikzMinMax]{Start}}..[\pflstepcurve]..{\useKV[GraphicTikzMinMax]{End}},{\useKV[GraphicTikzMinMax]{End}}) + \relax + }; + }% + {}% + \IfStrEq{\pflminmaxmethode}{interpo}% + {% + \path[draw=none,name path=curvetmpmin] plot[smooth,tension={\useKV[GraphicTikzMinMax]{Tension}}] coordinates {#2}; + }% + {}% + \IfStrEq{\pflminmaxmethode}{spline}% + {% + \GenerateSpline{#2}{\pflminmaxcoeffs}[\tmpsplineminmax]% + \path[draw=none,name path=curvetmpmin] \tmpsplineminmax ; + }% + {}% + %retour + \path[name path=tmpmin] ([yshift=0.25\pgflinewidth]bbtmpmin.south east) -- ([yshift=0.25\pgflinewidth]bbtmpmin.south west) ; + \path[name intersections={of=curvetmpmin and tmpmin,name=#3}] ; + \coordinate (#3) at ($0.5*(#3-1)+0.5*(#3-2)+(0,-0.25\pgflinewidth)$) ; + \end{scope} +} + +%====TEXTES +\defKV[GraphicTikzNode]{% + Color=\def\pflnodecol{#1},% + Font=\def\pflnodefonte{#1},% + Position=\def\pfnodepos{#1} +} +\setKVdefault[GraphicTikzNode]{% + Color=black,% + Start={\normalfont\normalsize},% + Position={} +} +\NewDocumentCommand\DrawTxt{ O{} m m }{% + \restoreKV[GraphicTikzNode]% + \setKV[GraphicTikzNode]{#1}% + \draw #2 node[tkzgrphnode,font=\pflnodefonte,text=\pflnodecol,\pfnodepos] {#3} ; +} + +%====MONTE CARLO +\defKV[GraphicTikzmontecarlo]{% + Colors=\def\graphtikzmccols{#1},% + BoundsX=\def\graphtikzmcxbornes{#1},% + BoundsY=\def\graphtikzmcybornes{#1} +} + +\setKVdefault[GraphicTikzmontecarlo]{% + Colors={blue/red},% + BoundsX={\pflxmin,\pflxmax},% + BoundsY={\pflymin,\pflymax} +} + +\NewDocumentCommand\SimulateMonteCarlo{ O{} D<>{f} m O{\nbptsmcok} O{\nbptsmcko} }{% + \restoreKV[GraphicTikzmontecarlo]% + \setKV[GraphicTikzmontecarlo]{#1}% + \StrCut{\graphtikzmccols}{/}{\tmpMCcolOK}{\tmpMCcolKO}% + \StrCut{\graphtikzmcxbornes}{,}{\tmpMCxmin}{\tmpMCxmax}% + \StrCut{\graphtikzmcybornes}{,}{\tmpMCymin}{\tmpMCymax}% + \xdef#4{0}% + \xdef#5{0}% + \xdef\nbptsmc{#3}% + \foreach \i in {1,...,#3}{% + \xdef\tmpMCrandX{\xintfloateval{random()*((\tmpMCxmax)-(\tmpMCxmin))+(\tmpMCxmin)}}% + \xdef\tmpMCrandY{\xintfloateval{random()*((\tmpMCymax)-(\tmpMCymin))+(\tmpMCymin)}}% + \xdef\tmpMCrandfX{\xintfloateval{#2(\tmpMCrandX)}}% + \xintifboolexpr{ \tmpMCrandfX > \tmpMCrandY }% + {% + \xdef#4{\xinteval{#4+1}}% + \filldraw[\tmpMCcolOK] (\tmpMCrandX,\tmpMCrandY) circle[tkzgrphpointmc] ; + }% + {% + \xdef#5{\xinteval{#5+1}}% + \filldraw[\tmpMCcolKO] (\tmpMCrandX,\tmpMCrandY) circle[tkzgrphpointmc] ; + }% + }% +} + +%====ECC +\defKV[tkzgECC]{% + Couleur=\def\tkzecc@coul@graph{#1},% + CouleursParams=\def\tkzecc@coul@params{#1} +} + +\setKVdefault[tkzgECC]{% + Couleur=black,% + AffParams=true,% + CouleursParams={black},% + TraitsComplets=true +} + +\tikzset{pfltraitsparamecc/.style={line width=0.9pt,densely dashed}} +\tikzset{pflcourbeecc/.style={line width=1.05pt}} + +\NewDocumentCommand\TracerCourbeECC{ O{} m m }{% + \restoreKV[tkzgECC]% + \setKV[tkzgECC]{#1}% + \IfSubStr{\tkzecc@coul@params}{/}% + {% + \StrCut{\tkzecc@coul@params}{/}{\tkzecc@coul@quart}{\tkzecc@coul@med}% + }% + {% + \def\tkzecc@coul@quart{\tkzecc@coul@params}\def\tkzecc@coul@med{\tkzecc@coul@params}% + }% + \readlist*\DataClass{#2}% + \readlist*\DataEff{#3}% + \xdef\DonneesECC{0}% + \xintFor* ##1 in {\xintSeq{1}{\DataEfflen}}\do{% + \xdef\DonneesTmp{0} + \xintFor* ##2 in {\xintSeq{1}{##1}}\do{% + \xdef\DonneesTmp{\xintfloateval{\DonneesTmp+\DataEff[##2]}}% + }% + \xdef\DonneesECC{\DonneesECC,\DonneesTmp}% + }% + \readlist*\DataECC\DonneesECC% + \itemtomacro\DataClass[1]\DonneesXmin% + \itemtomacro\DataClass[-1]\DonneesXmax% + \itemtomacro\DataECC[-1]\DonneesEffMax% + \xdef\DonneesListeECC{(\DataClass[1],\DataECC[1])}% + \xintFor* ##1 in {\xintSeq{2}{\DataECClen}}\do{% + \xdef\DonneesListeECC{\DonneesListeECC--(\DataClass[##1],\DataECC[##1])}% + }% + %paramètres par interpolation + \xintFor* ##1 in {\xintSeq{1}{\DataEfflen}}\do{% + \xdef\isuiv{\xinteval{##1+1}}% + \xintifboolexpr{\DataECC[##1] < (0.25*\DonneesEffMax) 'and' \DataECC[\isuiv] >= (0.25*\DonneesEffMax)}% + {% + \xdef\pentetmpECC{(\DataECC[\isuiv]-\DataECC[##1])/(\DataClass[\isuiv]-\DataClass[##1])}%OK + \xdef\ValPremQuartile{\xintfloateval{(0.25*\DonneesEffMax+\pentetmpECC*\DataClass[##1]-\DataECC[##1])/(\pentetmpECC)}}% + } + {}% + \xintifboolexpr{\DataECC[##1] < (0.50*\DonneesEffMax) 'and' \DataECC[\isuiv] >= (0.50*\DonneesEffMax)}% + {% + \xdef\pentetmpECC{(\DataECC[\isuiv]-\DataECC[##1])/(\DataClass[\isuiv]-\DataClass[##1])}%OK + \xdef\ValMed{\xintfloateval{(0.50*\DonneesEffMax+\pentetmpECC*\DataClass[##1]-\DataECC[##1])/(\pentetmpECC)}}% + } + {}% + \xintifboolexpr{\DataECC[##1] < (0.75*\DonneesEffMax) 'and' \DataECC[\isuiv] >= (0.75*\DonneesEffMax)}% + {% + \xdef\pentetmpECC{(\DataECC[\isuiv]-\DataECC[##1])/(\DataClass[\isuiv]-\DataClass[##1])}%OK + \xdef\ValTroisQuartile{\xintfloateval{(0.75*\DonneesEffMax+\pentetmpECC*\DataClass[##1]-\DataECC[##1])/(\pentetmpECC)}}% + } + {}% + }% + %partie graphique + \draw[pflcourbeecc,\tkzecc@coul@graph] \DonneesListeECC ; + \xintFor* ##1 in {\xintSeq{1}{\DataECClen}}\do{% + \filldraw[\tkzecc@coul@graph] (\DataClass[##1],\DataECC[##1]) circle[pflpointnuage] ; + }% + \ifboolKV[tkzgECC]{AffParams}% + {% + %médiane + \ifboolKV[tkzgECC]{TraitsComplets}% + {% + \draw[pfltraitsparamecc,\tkzecc@coul@med] (\pflxmin,{0.50*\DonneesEffMax})--(\pflxmax,{0.50*\DonneesEffMax}); + \draw[pfltraitsparamecc,\tkzecc@coul@quart] (\pflxmin,{0.25*\DonneesEffMax})--++({\pflxmax-\pflxmin},0); + \draw[pfltraitsparamecc,\tkzecc@coul@quart] (\pflxmin,{0.75*\DonneesEffMax})--++({\pflxmax-\pflxmin},0); + }% + {% + \draw[pfltraitsparamecc,\tkzecc@coul@med] (\pflxmin,{0.50*\DonneesEffMax})--(\ValMed,{0.50*\DonneesEffMax}); + \draw[pfltraitsparamecc,\tkzecc@coul@quart] (\pflxmin,{0.25*\DonneesEffMax})--++({\ValPremQuartile-\pflxmin},0); + \draw[pfltraitsparamecc,\tkzecc@coul@quart] (\pflxmin,{0.75*\DonneesEffMax})--++({\ValTroisQuartile-\pflxmin},0); + }% + \draw[pfltraitsparamecc,\tkzecc@coul@med] (\ValMed,{0.5*\DonneesEffMax})--(\ValMed,0) ; \draw[\tkzecc@coul@med,thick,fill=white] (\ValMed,{0.5*\DonneesEffMax}) circle[pflpointnuage] ; + \draw[pfltraitsparamecc,\tkzecc@coul@quart] (\ValPremQuartile,{0.25*\DonneesEffMax})--(\ValPremQuartile,\pflymin) ; \draw[\tkzecc@coul@quart,thick,fill=white] (\ValPremQuartile,{0.25*\DonneesEffMax}) circle[pflpointnuage] ; + \draw[pfltraitsparamecc,\tkzecc@coul@quart] (\ValTroisQuartile,{0.75*\DonneesEffMax})--(\ValTroisQuartile,\pflymin) ; \draw[\tkzecc@coul@quart,thick,fill=white] (\ValTroisQuartile,{0.75*\DonneesEffMax}) circle[pflpointnuage] ; + }% + {}% +} + +%====PTS DISCONTINUITÉ +\defKV[tkzptdiscont]{% + Couleur=\def\pfldiscontcouleur{#1},% + Pos=\def\pfldiscontpos{#1},% + Echelle=\def\pfldiscontechelle{#1},% + Type=\def\pfldisconttype{#1} +} + +\setKVdefault[tkzptdiscont]{% + Couleur=black,% + Pos=D,% + Echelle=1,% + Type=par +} + +\NewDocumentCommand\AfficherPtsDiscont{ O{} m }{% + \restoreKV[tkzptdiscont] + \setKV[tkzptdiscont]{#1}% + \setsepchar[.]{§./}% + \readlist*\SPLlisteDiscont{#2}% + \def\SPLlisteDiscontNb{\SPLlisteDiscontlen}% + \foreach \i in {1,...,\SPLlisteDiscontNb}{% + \begin{scope}[shift={(\SPLlisteDiscont[\i,1],\SPLlisteDiscont[\i,2])},rotate={atan \SPLlisteDiscont[\i,3]},scale=\pfldiscontechelle] + \IfStrEq{\pfldisconttype}{rond}% + {% + \draw[pflcourbediscont,fill=white,draw=\pfldiscontcouleur] (0,0) circle[radius=3pt] ; + }{}% + \IfStrEq{\pfldiscontpos}{D}% + {% + \IfStrEq{\pfldisconttype}{par}% + {% + \draw[pflcourbediscont,\pfldiscontcouleur] (0,0) to[out=90,in=170] (4pt,5pt) ; + \draw[pflcourbediscont,\pfldiscontcouleur] (0,0) to[out=-90,in=-170] (4pt,-5pt) ; + }{}% + \IfStrEq{\pfldisconttype}{demirond}% + {% + \draw[pflcourbediscont,\pfldiscontcouleur] (0,0) to[out=90,in=180] (3pt,3pt) ; + \draw[pflcourbediscont,\pfldiscontcouleur] (0,0) to[out=-90,in=180] (3pt,-3pt) ; + }{}% + \IfStrEq{\pfldisconttype}{cro}% + {% + \draw[pflcourbediscont,\pfldiscontcouleur] (0,0) |- (4pt,5pt) ; + \draw[pflcourbediscont,\pfldiscontcouleur] (0,0) |- (4pt,-5pt) ; + }{}% + }% + {% + \IfStrEq{\pfldisconttype}{par}% + {% + \draw[pflcourbediscont,\pfldiscontcouleur] (0,0) to[out=90,in=-10] (-4pt,5pt) ; + \draw[pflcourbediscont,\pfldiscontcouleur] (0,0) to[out=-90,in=10] (-4pt,-5pt) ; + }{}% + \IfStrEq{\pfldisconttype}{demirond}% + {% + \draw[pflcourbediscont,\pfldiscontcouleur] (0,0) to[out=90,in=0] (-3pt,3pt) ; + \draw[pflcourbediscont,\pfldiscontcouleur] (0,0) to[out=-90,in=0] (-3pt,-3pt) ; + }{}% + \IfStrEq{\pfldisconttype}{cro}% + {% + \draw[pflcourbediscont,\pfldiscontcouleur] (0,0) |- (-4pt,5pt) ; + \draw[pflcourbediscont,\pfldiscontcouleur] (0,0) |- (-4pt,-5pt) ; + }{}% }% + \end{scope} + }% +} + +%====TOILE RÉCURRENCE (OK avec courbe + spline !!) +\tikzset{pfltraitrec/.style={line width=0.8pt}} +\tikzset{pfltraitrecpointill/.style={pfltraitrec,densely dashed}} + +\defKV[tkzwebrecurr]{% + Couleur=\def\pflrecurcolor{#1},% + Nom=\def\pflrecurnom{#1},% + No=\def\pflrecurno{#1},% + Nb=\def\pflrecurnb{#1},% + Uno=\def\pflrecuruno{#1}, + TailleLabel=\def\pflrecurlabelsize{#1},% + PosLabel=\def\pflrecurlabelpos{#1} +} + +\setKVdefault[tkzwebrecurr]{% + Couleur=black,% + Spline=false,% + No=0,% + Nom=u,% + Nb=5,% + AffTermes=false,% + AffPointilles=true,% + TailleLabel=\small,% + PosLabel=below +} + +\NewDocumentCommand\TracerToileRecurrence{ O{} m }{ + %<clés> + fonction/courbe + \useKVdefault[tkzwebrecurr]% + \setKV[tkzwebrecurr]{#1}% on paramètres les nouvelles clés et on les simplifie + \ifboolKV[tkzwebrecurr]{Spline}% + {% + \foreach \i [remember=\i as \x (initially \pflrecuruno)] in {1,...,\pflrecurnb}{% + %\xdef\y{\xintfloateval{#2(\x)}}% + \path[draw=none,pflcourbe,name path=tmprecur] ({\x},{\pflymin})--({\x},{\pflymax}) ; + \path[name intersections={of=#2 and tmprecur,name=ZZZZ}] ; + %\coordinate (\pflrecurnoms) at (ZZZZ-1) ; + \GetYcoord{(ZZZZ-1)}[\y] + %test de la position courbe / bissectrice ? + \ifnum \i=1 + \newdimen \X + \newdimen \Y + \X = \x pt + \Y = \y pt + \ifdim \Y < \X + \draw[pfltraitrec,\pflrecurcolor] (\x,\y)--(\y,\y) ; + \else + \draw[pfltraitrec,\pflrecurcolor] (\x,\x)--(\x,\y)--(\y,\y) ; + \fi + \else + \draw[pfltraitrec,\pflrecurcolor] (\x,\x)--(\x,\y)--(\y,\y) ; + \fi + \ifboolKV[tkzwebrecurr]{AffPointilles}% + {% + \def\indice{\fpeval{\i+\pflrecurno-1}}% + \ifboolKV[tkzwebrecurr]{AffTermes}% + {% + \draw[pfltraitrecpointill,\pflrecurcolor] (\x,\y)--(\x,\pflxmin) node[\pflrecurlabelpos,font=\pflrecurlabelsize]{$\pflrecurnom_{\indice}$};% + }% + {% + \draw[pfltraitrecpointill,\pflrecurcolor] (\x,\y)--(\x,\pflxmin) ;% + }% + }% + {} + \def\i{\y}% + }% + }% + {% + \foreach \i [remember=\i as \x (initially \pflrecuruno)] in {1,...,\pflrecurnb}{% + \xdef\y{\xintfloateval{#2(\x)}}% + %test de la position courbe / bissectrice ? + \ifnum \i=1 + \newdimen \X + \newdimen \Y + \X = \x pt + \Y = \y pt + \ifdim \Y < \X + \draw[pfltraitrec,\pflrecurcolor] (\x,\y)--(\y,\y) ; + \else + \draw[pfltraitrec,\pflrecurcolor] (\x,\x)--(\x,\y)--(\y,\y) ; + \fi + \else + \draw[pfltraitrec,\pflrecurcolor] (\x,\x)--(\x,\y)--(\y,\y) ; + \fi + \ifboolKV[tkzwebrecurr]{AffPointilles}% + {% + \def\indice{\fpeval{\i+\pflrecurno-1}}% + \ifboolKV[tkzwebrecurr]{AffTermes}% + {% + \draw[pfltraitrecpointill,\pflrecurcolor] (\x,\y)--(\x,\pflxmin) node[\pflrecurlabelpos,font=\pflrecurlabelsize]{$\pflrecurnom_{\indice}$};% + }% + {% + \draw[pfltraitrecpointill,\pflrecurcolor] (\x,\y)--(\x,\pflxmin) ;% + }% + }% + {} + \def\i{\xintfloateval{\y}}% + }% }% +} + +%====HISTOBINOM +\defKV[tkzHistoBinom]{% + Plage=\def\tkzGraphBinomPlage{#1},% + CouleurPlage=\def\tkzGraphBimomColPlage{#1},% + ClipX=\def\tkzGraphBinomXminmax{#1},% + CouleurNormale=\def\tkzGraphBinomColNorm{#1} +} +\setKVdefault[tkzHistoBinom]{% + Plage={},% + CouleurPlage=black,% + ClipX={},% + AffNormale=false,% + CouleurNormale=black +} + +\NewDocumentCommand\TracerHistoBinomiale{ O{} D<>{phi} m m }{% + \restoreKV[tkzHistoBinom]% + \setKV[tkzHistoBinom]{#1} + \def\tkzGraphBinomN{#3}% + \def\tkzGraphBinomP{#4}% + \IfStrEq{\tkzGraphBinomXminmax}{}% + {% + \xdef\tkzGraphBinomXmin{0}% + \xdef\tkzGraphBinomXmax{\tkzGraphBinomN}% + }% + {% + \StrCut{\tkzGraphBinomXminmax}{-}{\tkzGraphBinomXmin}{\tkzGraphBinomXmax}% + \IfStrEq{\tkzGraphBinomXmin}{*}{\xdef\tkzGraphBinomXmin{0}}{}% + \IfStrEq{\tkzGraphBinomXmax}{*}{\xdef\tkzGraphBinomXmax{\tkzGraphBinomN}}{}% + }% + \IfStrEq{\tkzGraphBinomPlage}{}% {}% + {% + \StrCut{\tkzGraphBinomPlage}{-}{\tkzGraphBinomColorMin}{\tkzGraphBinomColorMax}% + \IfStrEq{\tkzGraphBinomColorMin}{*}{\xdef\tkzGraphBinomColorMin{\tkzGraphBinomXmin}}{}% + \IfStrEq{\tkzGraphBinomColorMax}{*}{\xdef\tkzGraphBinomColorMax{\tkzGraphBinomXmax}}{}% + }% + %coloriage éventuel + \IfStrEq{\tkzGraphBinomPlage}{}% + {}% + {% + \xintFor* ##1 in {\xintSeq{\tkzGraphBinomColorMin}{\tkzGraphBinomColorMax}}\do{% + \xdef\tkztmpYYY{\xintfloateval{binomial(\tkzGraphBinomN,##1)*(\tkzGraphBinomP)^(##1)*(1-(\tkzGraphBinomP))^((\tkzGraphBinomN)-(##1))}}% + \draw[draw=none,fill=\tkzGraphBimomColPlage,fill opacity=0.5] ({##1-0.5},{\pflymin}) rectangle++ (1,{\tkztmpYYY-\pflymin}) ; + }% + }% + %tracé + \xintFor* ##1 in {\xintSeq{\tkzGraphBinomXmin}{\tkzGraphBinomXmax}}\do{% + \xdef\tkztmpYYY{\xintfloateval{binomial(\tkzGraphBinomN,##1)*(\tkzGraphBinomP)^(##1)*(1-(\tkzGraphBinomP))^((\tkzGraphBinomN)-(##1))}}% + \draw[pfltrait] ({##1-0.5},{\pflymin}) rectangle++ (1,{\tkztmpYYY-\pflymin}) ; + }% + \ifboolKV[tkzHistoBinom]{AffNormale}% + {% + \xdef\tkzMinNormHistoBinom{\xintfloateval{{\tkzGraphBinomXmin-0.5}}}% + \xdef\tkzMaxNormHistoBinom{\xintfloateval{{\tkzGraphBinomXmax+0.5}}}% + \xdef\tkzEsperNorm{\xintfloateval{(#3)*(#4)}}% + \xdef\tkzVarNorm{\xintfloateval{sqrt((#3)*(#4)*(1-(#4)))}}% + \DefinirLoiNormale[Trace,Couleur=\tkzGraphBinomColNorm,pflcourbe,Debut=\tkzMinNormHistoBinom,Fin=\tkzMaxNormHistoBinom]<#2>{\tkzEsperNorm}{\tkzVarNorm} + }% + {}% +} + +%====pgfplots small macros +\NewDocumentCommand\findintersectionspgf{ O{ITSC} m m D<>{\myt} }{% + %1 = name of node name + %2 = 1st object + %3 = 2d object + %4 = macro storing number of intersections + \path[name intersections={of=#2 and #3,name=#1,total=\t}] \pgfextra{\xdef#4{\t}} ; +} + +\NewDocumentCommand\gextractxnodepgf{ m O{\myxcoord} }{% + \path \pgfextra{\pgfplotspointgetcoordinates{#1}\pgfkeysgetvalue{/data point/x}{\tmpxgetvalue}\xdef#2{\tmpxgetvalue}} ; +} + +\NewDocumentCommand\gextractynodepgf{ m O{\myycoord} }{% + \path \pgfextra{\pgfplotspointgetcoordinates{#1}\pgfkeysgetvalue{/data point/y}{\tmpygetvalue}\xdef#2{\tmpygetvalue}} ; +} + +\NewDocumentCommand\gextractxynodepgf{ m O{\myxcoord} O{\myycoord} }{% + \path \pgfextra{\pgfplotspointgetcoordinates{#1}\pgfkeysgetvalue{/data point/x}{\tmpxgetvalue}\xdef#2{\tmpxgetvalue}\pgfkeysgetvalue{/data point/y}{\tmpygetvalue}\xdef#3{\tmpygetvalue}} ; +} + +\NewDocumentCommand\fillbetweencurvespgf{ O{gray,fill opacity=0.25} m m D<>{} }{% + \addplot[#1] fill between [of=#2 and #3,soft clip={#4}]; +} + +\NewDocumentCommand\gensplinecubicpgf{ s m m O{\monspline} }{% + %1=liste + \setsepchar[.]{§./}% + \readlist*\SPLlistepoints{#2}% + %les données + \def\tmpsplinenumdeb{1} + \def\tmpsplinenumfin{\SPLlistepointslen}% + \pflextractcoeff{#3}{\tmpsplinenumdeb}% + %nb de calculs + \def\SPLnbsplines{\inteval{\tmpsplinenumfin-1}}% + %extraction des coordonnées + \itemtomacro\SPLlistepoints[\tmpsplinenumdeb,1]\xa% + \itemtomacro\SPLlistepoints[\tmpsplinenumdeb,2]\ya% + \itemtomacro\SPLlistepoints[\tmpsplinenumdeb,3]\fprimea% + \itemtomacro\SPLlistepoints[\tmpsplinenumdeb,1]\xb% + \itemtomacro\SPLlistepoints[\tmpsplinenumdeb,2]\yb% + \itemtomacro\SPLlistepoints[\tmpsplinenumdeb,3]\fprimeb% + \IfBooleanTF{#1}% + {% + \xdef\tmpcontrolsxa{\xintfloateval{(\xa)+(\xb-\xa)/\COEFFA}}% + \xdef\tmpcontrolsya{\xintfloateval{(\ya)+\fprimea*(\xb-\xa)/\COEFFA}}% + \xdef\tmpcontrolsxb{\xintfloateval{(\xb)-(\xb-\xa)/\COEFFA}}% + \xdef\tmpcontrolsyb{\xintfloateval{(\yb)-\fprimeb*(\xb-\xa)/\COEFFA}}% + }% + {% + \xdef\tmpcontrolsxa{\xintfloateval{(\xa)+cos(atand(\fprimea))*(\xb-\xa)/\COEFFA}}% + \xdef\tmpcontrolsya{\xintfloateval{(\ya)+sin(atand(\fprimea))*(\xb-\xa)/\COEFFA}}% + \xdef\tmpcontrolsxb{\xintfloateval{(\xb)-cos(atand(\fprimeb))*(\xb-\xa)/\COEFFA}}% + \xdef\tmpcontrolsyb{\xintfloateval{(\yb)-sin(atand(\fprimeb))*(\xb-\xa)/\COEFFA}}% + }% + \xdef#4{(\xa,\ya) ..controls (\tmpcontrolsxa,\tmpcontrolsya) and (\tmpcontrolsxb,\tmpcontrolsyb).. (\xb,\yb)}% + \foreach \i in {\tmpsplinenumdeb,...,\SPLnbsplines}{% + %extraction des coeffs de compensation + \pflextractcoeff{#3}{\i}% + \def\j{\inteval{\i+1}}% + \itemtomacro\SPLlistepoints[\i,1]\xa% + \itemtomacro\SPLlistepoints[\i,2]\ya% + \itemtomacro\SPLlistepoints[\i,3]\fprimea% + \itemtomacro\SPLlistepoints[\j,1]\xb% + \itemtomacro\SPLlistepoints[\j,2]\yb% + \itemtomacro\SPLlistepoints[\j,3]\fprimeb% + \IfBooleanTF{#1}% + {% + \xdef\tmpcontrolsxa{\xintfloateval{(\xa)+(\xb-\xa)/\COEFFA}}% + \xdef\tmpcontrolsya{\xintfloateval{(\ya)+\fprimea*(\xb-\xa)/\COEFFA\fprimea*(\xb-\xa)/\COEFFA}}% + \xdef\tmpcontrolsxb{\xintfloateval{(\xb)-(\xb-\xa)/\COEFFA}}% + \xdef\tmpcontrolsyb{\xintfloateval{(\yb)-\fprimeb*(\xb-\xa)/\COEFFA}}% + }% + {% + \xdef\tmpcontrolsxa{\xintfloateval{(\xa)+cos(atand(\fprimea))*(\xb-\xa)/\COEFFA}}% + \xdef\tmpcontrolsya{\xintfloateval{(\ya)+sin(atand(\fprimea))*(\xb-\xa)/\COEFFA}}% + \xdef\tmpcontrolsxb{\xintfloateval{(\xb)-cos(atand(\fprimeb))*(\xb-\xa)/\COEFFA}}% + \xdef\tmpcontrolsyb{\xintfloateval{(\yb)-sin(atand(\fprimeb))*(\xb-\xa)/\COEFFA}}% + }% + \xdef#4{#4 ..controls (\tmpcontrolsxa,\tmpcontrolsya) and (\tmpcontrolsxb,\tmpcontrolsyb).. (\xb,\yb)}% + }% +} + +\NewDocumentCommand\addplotspline{ s O{} D<>{3} m O{\monspline} }{% + \IfBooleanTF{#1}% + {% + \gensplinecubicpgf*{#4}{#3}[#5]% + }% + {% + \gensplinecubicpgf{#4}{#3}[#5]% + }% + \draw[#2] #5 ; } \endinput
\ No newline at end of file diff --git a/graphics/pgf/contrib/trivialpursuit/doc/TrivialPursuit-doc-en.pdf b/graphics/pgf/contrib/trivialpursuit/doc/TrivialPursuit-doc-en.pdf Binary files differindex 44c8e897ce..14f9e46afe 100644 --- a/graphics/pgf/contrib/trivialpursuit/doc/TrivialPursuit-doc-en.pdf +++ b/graphics/pgf/contrib/trivialpursuit/doc/TrivialPursuit-doc-en.pdf diff --git a/graphics/pgf/contrib/trivialpursuit/doc/TrivialPursuit-doc-en.tex b/graphics/pgf/contrib/trivialpursuit/doc/TrivialPursuit-doc-en.tex index b0a81f9e6a..95cbe02f11 100644 --- a/graphics/pgf/contrib/trivialpursuit/doc/TrivialPursuit-doc-en.tex +++ b/graphics/pgf/contrib/trivialpursuit/doc/TrivialPursuit-doc-en.tex @@ -21,8 +21,8 @@ \hypersetup{pdfborder=0 0 0} \usepackage[margin=2cm]{geometry} \setlength{\parindent}{0pt} -\def\TPversion{0.1.1} -\def\TPdate{26/11/2023} +\def\TPversion{0.1.2} +\def\TPdate{21/10/2024} \usepackage{tcolorbox} \tcbuselibrary{skins,hooks,listingsutf8} \usepackage{soul} @@ -135,6 +135,7 @@ Loaded are useful package are : \begin{quote} \begin{verbatim} +0.1.2 : Key [ShortVersion] in order to reduce number of border cells 0.1.1 : Adding two schemes of colors 0.1.0 : Initial version \end{verbatim} @@ -160,7 +161,9 @@ All the available keys are presented in the following paragraph, but concerning % \BoardTrivialPursuit[Radius=4,BorderHeight=1.25] %beware of the rendering... -\BoardTrivialPursuit[Unit=0.33] %'optimal' rendering +\BoardTrivialPursuit[Unit=0.33] +% +\BoardTrivialPursuit[Unit=0.33,ShortVersion] \end{tcblisting} \pagebreak @@ -188,7 +191,8 @@ Available \textsf{keys} are : \item \MontreCode{Blank} := boolean for an empty board, and \MontreCode{false} by default ; \item \MontreCode{Unit} := to precis an unit (better than a scale !), and \MontreCode{1} by default ; \item \MontreCode{Thickness} := thickness of the borders, and \MontreCode{0.8pt} by default ; - \item \MontreCode{Rotation} := possible rotation of the board, and \MontreCode{0} by default. + \item \MontreCode{Rotation} := possible rotation of the board, and \MontreCode{0} by default ; + \item \MontreCode{ShortVersion} := use 5 cells instead 6 between 'big cells', and \MontreCode{false} by default. \end{itemize} \begin{tcblisting}{colframe=lightgray,colback=lightgray!5} diff --git a/graphics/pgf/contrib/trivialpursuit/doc/TrivialPursuit-doc-fr.pdf b/graphics/pgf/contrib/trivialpursuit/doc/TrivialPursuit-doc-fr.pdf Binary files differindex 2b6b766846..16dcd58e8b 100644 --- a/graphics/pgf/contrib/trivialpursuit/doc/TrivialPursuit-doc-fr.pdf +++ b/graphics/pgf/contrib/trivialpursuit/doc/TrivialPursuit-doc-fr.pdf diff --git a/graphics/pgf/contrib/trivialpursuit/doc/TrivialPursuit-doc-fr.tex b/graphics/pgf/contrib/trivialpursuit/doc/TrivialPursuit-doc-fr.tex index ff50c6a07d..d93190d0e0 100644 --- a/graphics/pgf/contrib/trivialpursuit/doc/TrivialPursuit-doc-fr.tex +++ b/graphics/pgf/contrib/trivialpursuit/doc/TrivialPursuit-doc-fr.tex @@ -21,8 +21,8 @@ \hypersetup{pdfborder=0 0 0} \usepackage[margin=2cm]{geometry} \setlength{\parindent}{0pt} -\def\TPversion{0.1.1} -\def\TPdate{26 novembre 2023} +\def\TPversion{0.1.2} +\def\TPdate{21 octobre 2024} \usepackage{tcolorbox} \tcbuselibrary{skins,hooks,listingsutf8} \usepackage{soul} @@ -135,6 +135,7 @@ Les packages chargés et utilisés par \MontreCode{TrivialPursuit} sont : \begin{quote} \begin{verbatim} +0.1.2 : Ajout d'une clé [VersionCourte] pour diminuer le nombre de cases 0.1.1 : Ajout de palettes de couleurs prédéfinies 0.1.0 : Version initiale \end{verbatim} @@ -160,7 +161,9 @@ Toutes les clés disponibles sont présentées dans le paragraphe suivant, mais % \PlateauTrivialPursuit[Rayon=4,HauteurCases=1.25] %attention au rendu... -\PlateauTrivialPursuit[Unite=0.33] %le rendu est 'optimal' +\PlateauTrivialPursuit[Unite=0.33] +% +\PlateauTrivialPursuit[Unite=0.33,VersionCourte] \end{tcblisting} \pagebreak @@ -188,7 +191,8 @@ Les \textsf{clés} disponibles sont : \item \MontreCode{Vide} := booléen pour afficher le plateau vide, et valant \MontreCode{false} par défaut ; \item \MontreCode{Unite} := pour préciser l'unité (et gérer un facteur d'échelle), et valant \MontreCode{1} par défaut ; \item \MontreCode{Epaisseur} := épaisseur des tracés, et valant \MontreCode{0.8pt} par défaut ; - \item \MontreCode{Rotation} := rotation éventuelle du plateau, et valant \MontreCode{0} par défaut. + \item \MontreCode{Rotation} := rotation éventuelle du plateau, et valant \MontreCode{0} par défaut ; + \item \MontreCode{VersionCourte} := utiliser 5 cases au lieu de 6 entre les camemberts, et valant \MontreCode{false} par défaut. \end{itemize} \begin{tcblisting}{colframe=lightgray,colback=lightgray!5} diff --git a/graphics/pgf/contrib/trivialpursuit/tex/TrivialPursuit.sty b/graphics/pgf/contrib/trivialpursuit/tex/TrivialPursuit.sty index d8b8411130..9bc0185a91 100644 --- a/graphics/pgf/contrib/trivialpursuit/tex/TrivialPursuit.sty +++ b/graphics/pgf/contrib/trivialpursuit/tex/TrivialPursuit.sty @@ -4,7 +4,8 @@ \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{TrivialPursuit}[2023/11/26 0.1.1 Present a Trivial Pursuit Board] +\ProvidesPackage{TrivialPursuit}[2024/10/21 0.1.2 Present a Trivial Pursuit Board] +% 0.1.2 'Short' version % 0.1.1 Adding schemes of colors % 0.1.0 Initial version @@ -62,7 +63,8 @@ Epaisseur=0.8pt,% Rotation=0,% Jokers=true,% - IconeJoker={\faDice} + IconeJoker={\faDice},% + VersionCourte=false } %====INTERN COMMANDS @@ -113,17 +115,17 @@ \ifboolKV[TrivPurs]{Couleurs}% {% %Couleur du 1er camembert - \filldraw[{\triv@purs@lstcol[1]}] (PB-47)--(GB-47) arc ({-\triv@purs@anglecases}:{\triv@purs@anglecases}:{\triv@purs@rayon})--(PB-1) arc ({\triv@purs@anglecases}:{-\triv@purs@anglecases}:{\triv@purs@rayonint})--cycle ; + \draw[EpTraits,fill={\triv@purs@lstcol[1]}] (PB-47)--(GB-47) arc ({-\triv@purs@anglecases}:{\triv@purs@anglecases}:{\triv@purs@rayon})--(PB-1) arc ({\triv@purs@anglecases}:{-\triv@purs@anglecases}:{\triv@purs@rayonint})--cycle ; %Couleur du 2ème - \filldraw[{\triv@purs@lstcol[2]}] (PB-7)--(GB-7) arc ({7*\triv@purs@anglecases}:{9*\triv@purs@anglecases}:{\triv@purs@rayon})--(PB-9) arc ({9*\triv@purs@anglecases}:{7*\triv@purs@anglecases}:{\triv@purs@rayonint})--cycle ; + \draw[EpTraits,fill={\triv@purs@lstcol[2]}] (PB-7)--(GB-7) arc ({7*\triv@purs@anglecases}:{9*\triv@purs@anglecases}:{\triv@purs@rayon})--(PB-9) arc ({9*\triv@purs@anglecases}:{7*\triv@purs@anglecases}:{\triv@purs@rayonint})--cycle ; %Couleur du 3ème - \filldraw[{\triv@purs@lstcol[3]}] (PB-15)--(GB-15) arc ({15*\triv@purs@anglecases}:{17*\triv@purs@anglecases}:{\triv@purs@rayon})--(PB-17) arc ({17*\triv@purs@anglecases}:{15*\triv@purs@anglecases}:{\triv@purs@rayonint})--cycle ; + \draw[EpTraits,fill={\triv@purs@lstcol[3]}] (PB-15)--(GB-15) arc ({15*\triv@purs@anglecases}:{17*\triv@purs@anglecases}:{\triv@purs@rayon})--(PB-17) arc ({17*\triv@purs@anglecases}:{15*\triv@purs@anglecases}:{\triv@purs@rayonint})--cycle ; %Couleur du 4ème - \filldraw[{\triv@purs@lstcol[4]}] (PB-23)--(GB-23) arc ({23*\triv@purs@anglecases}:{25*\triv@purs@anglecases}:{\triv@purs@rayon})--(PB-25) arc ({25*\triv@purs@anglecases}:{23*\triv@purs@anglecases}:{\triv@purs@rayonint})--cycle ; + \draw[EpTraits,fill={\triv@purs@lstcol[4]}] (PB-23)--(GB-23) arc ({23*\triv@purs@anglecases}:{25*\triv@purs@anglecases}:{\triv@purs@rayon})--(PB-25) arc ({25*\triv@purs@anglecases}:{23*\triv@purs@anglecases}:{\triv@purs@rayonint})--cycle ; %Couleur du 5ème - \filldraw[{\triv@purs@lstcol[5]}] (PB-31)--(GB-31) arc ({31*\triv@purs@anglecases}:{33*\triv@purs@anglecases}:{\triv@purs@rayon})--(PB-33) arc ({33*\triv@purs@anglecases}:{31*\triv@purs@anglecases}:{\triv@purs@rayonint})--cycle ; + \draw[EpTraits,fill={\triv@purs@lstcol[5]}] (PB-31)--(GB-31) arc ({31*\triv@purs@anglecases}:{33*\triv@purs@anglecases}:{\triv@purs@rayon})--(PB-33) arc ({33*\triv@purs@anglecases}:{31*\triv@purs@anglecases}:{\triv@purs@rayonint})--cycle ; %Couleur du 6ème - \filldraw[{\triv@purs@lstcol[6]}] (PB-39)--(GB-39) arc ({39*\triv@purs@anglecases}:{41*\triv@purs@anglecases}:{\triv@purs@rayon})--(PB-41) arc ({41*\triv@purs@anglecases}:{39*\triv@purs@anglecases}:{\triv@purs@rayonint})--cycle ; + \draw[EpTraits,fill={\triv@purs@lstcol[6]}] (PB-39)--(GB-39) arc ({39*\triv@purs@anglecases}:{41*\triv@purs@anglecases}:{\triv@purs@rayon})--(PB-41) arc ({41*\triv@purs@anglecases}:{39*\triv@purs@anglecases}:{\triv@purs@rayonint})--cycle ; }% {}% %si on affiche les icones @@ -141,7 +143,7 @@ \NewDocumentCommand\RemplirCaseTrivial{ m m m }{%deb + fin + numcouleur \ifboolKV[TrivPurs]{Couleurs}% {% - \filldraw[{\triv@purs@lstcol[#3]}] (PB-#1)--(GB-#1) arc ({#1*\triv@purs@anglecases}:{#2*\triv@purs@anglecases}:{\triv@purs@rayon})--(PB-#2) arc ({#2*\triv@purs@anglecases}:{#1*\triv@purs@anglecases}:{\triv@purs@rayonint}); + \draw[EpTraits,fill={\triv@purs@lstcol[#3]}] (PB-#1)--(GB-#1) arc ({#1*\triv@purs@anglecases}:{#2*\triv@purs@anglecases}:{\triv@purs@rayon})--(PB-#2) arc ({#2*\triv@purs@anglecases}:{#1*\triv@purs@anglecases}:{\triv@purs@rayonint}); }% {}% \ifboolKV[TrivPurs]{Icones}% @@ -160,7 +162,7 @@ \xdef\tmpcaseap{\xinteval{#2+1}}% \xintifboolexpr{#2 > 1 'and' #2 < 5}% {% - \filldraw[{\triv@purs@lstcol[#3]}] (C-#1-\tmpcase)--(D-#1-\tmpcase)--(D-#1-#2)--(C-#1-#2)--cycle ; + \draw[EpTraits,fill={\triv@purs@lstcol[#3]}] (C-#1-\tmpcase)--(D-#1-\tmpcase)--(D-#1-#2)--(C-#1-#2)--cycle ; }% {}% \xintifboolexpr{#2 == 5}% @@ -178,12 +180,12 @@ {% \xintifboolexpr{#1 == 1}% {% - \filldraw[{\triv@purs@lstcol[#3]}] (C-1-1)--(PB-\triv@purs@numcasavant) arc({-\triv@purs@anglecases}:{\triv@purs@anglecases}:{\triv@purs@rayonint}) --(D-1-1)--cycle ; + \draw[EpTraits,fill={\triv@purs@lstcol[#3]}] (C-1-1)--(PB-\triv@purs@numcasavant) arc({-\triv@purs@anglecases}:{\triv@purs@anglecases}:{\triv@purs@rayonint}) --(D-1-1)--cycle ; }% {% \xdef\tmp@ii{\xinteval{(-1+8*(#1-1))}}% \xdef\tmp@jj{\xinteval{(\tmp@ii+2)}}% - \filldraw[{\triv@purs@lstcol[#3]}] (C-#1-1)--(PB-\tmp@ii) arc({\tmp@ii*\triv@purs@anglecases}:{\tmp@jj*\triv@purs@anglecases}:{\triv@purs@rayonint}) --(D-#1-1)--cycle ; + \draw[EpTraits,fill={\triv@purs@lstcol[#3]}] (C-#1-1)--(PB-\tmp@ii) arc({\tmp@ii*\triv@purs@anglecases}:{\tmp@jj*\triv@purs@anglecases}:{\triv@purs@rayonint}) --(D-#1-1)--cycle ; }% }% {}% @@ -398,6 +400,361 @@ \end{scope} } +%courte +\NewDocumentCommand\CreationNoeudsTrivialCourt{}{%OK !!!!!!!!!!!!!! + %création des nœuds grand bord petit bord GB-i (et PB-i) + \coordinate (GB-1) at ({7.5}:{\triv@purs@rayon}) ; + \coordinate (PB-1) at ({7.5}:{\triv@purs@rayon-\triv@purs@hautcases}) ; + \coordinate (GB-2) at ({7.5+9}:{\triv@purs@rayon}) ; + \coordinate (PB-2) at ({7.5+9}:{\triv@purs@rayon-\triv@purs@hautcases}) ; + \coordinate (GB-3) at ({7.5+2*9}:{\triv@purs@rayon}) ; + \coordinate (PB-3) at ({7.5+2*9}:{\triv@purs@rayon-\triv@purs@hautcases}) ; + \coordinate (GB-4) at ({7.5+3*9}:{\triv@purs@rayon}) ; + \coordinate (PB-4) at ({7.5+3*9}:{\triv@purs@rayon-\triv@purs@hautcases}) ; + \coordinate (GB-5) at ({7.5+4*9}:{\triv@purs@rayon}) ; + \coordinate (PB-5) at ({7.5+4*9}:{\triv@purs@rayon-\triv@purs@hautcases}) ; + \coordinate (GB-6) at ({7.5+5*9}:{\triv@purs@rayon}) ; + \coordinate (PB-6) at ({7.5+5*9}:{\triv@purs@rayon-\triv@purs@hautcases}) ; + \coordinate (GB-7) at ({67.5}:{\triv@purs@rayon}) ; + \coordinate (PB-7) at ({67.5}:{\triv@purs@rayon-\triv@purs@hautcases}) ; + \coordinate (GB-8) at ({67.5+9}:{\triv@purs@rayon}) ; + \coordinate (PB-8) at ({67.5+9}:{\triv@purs@rayon-\triv@purs@hautcases}) ; + \coordinate (GB-9) at ({67.5+2*9}:{\triv@purs@rayon}) ; + \coordinate (PB-9) at ({67.5+2*9}:{\triv@purs@rayon-\triv@purs@hautcases}) ; + \coordinate (GB-10) at ({67.5+3*9}:{\triv@purs@rayon}) ; + \coordinate (PB-10) at ({67.5+3*9}:{\triv@purs@rayon-\triv@purs@hautcases}) ; + \coordinate (GB-11) at ({67.5+4*9}:{\triv@purs@rayon}) ; + \coordinate (PB-11) at ({67.5+4*9}:{\triv@purs@rayon-\triv@purs@hautcases}) ; + \coordinate (GB-12) at ({67.5+5*9}:{\triv@purs@rayon}) ; + \coordinate (PB-12) at ({67.5+5*9}:{\triv@purs@rayon-\triv@purs@hautcases}) ; + \coordinate (GB-13) at ({127.5}:{\triv@purs@rayon}) ; + \coordinate (PB-13) at ({127.5}:{\triv@purs@rayon-\triv@purs@hautcases}) ; + \coordinate (GB-14) at ({127.5+9}:{\triv@purs@rayon}) ; + \coordinate (PB-14) at ({127.5+9}:{\triv@purs@rayon-\triv@purs@hautcases}) ; + \coordinate (GB-15) at ({127.5+2*9}:{\triv@purs@rayon}) ; + \coordinate (PB-15) at ({127.5+2*9}:{\triv@purs@rayon-\triv@purs@hautcases}) ; + \coordinate (GB-16) at ({127.5+3*9}:{\triv@purs@rayon}) ; + \coordinate (PB-16) at ({127.5+3*9}:{\triv@purs@rayon-\triv@purs@hautcases}) ; + \coordinate (GB-17) at ({127.5+4*9}:{\triv@purs@rayon}) ; + \coordinate (PB-17) at ({127.5+4*9}:{\triv@purs@rayon-\triv@purs@hautcases}) ; + \coordinate (GB-18) at ({127.5+5*9}:{\triv@purs@rayon}) ; + \coordinate (PB-18) at ({127.5+5*9}:{\triv@purs@rayon-\triv@purs@hautcases}) ; + \coordinate (GB-19) at ({187.5}:{\triv@purs@rayon}) ; + \coordinate (PB-19) at ({187.5}:{\triv@purs@rayon-\triv@purs@hautcases}) ; + \coordinate (GB-20) at ({187.5+9}:{\triv@purs@rayon}) ; + \coordinate (PB-20) at ({187.5+9}:{\triv@purs@rayon-\triv@purs@hautcases}) ; + \coordinate (GB-21) at ({187.5+2*9}:{\triv@purs@rayon}) ; + \coordinate (PB-21) at ({187.5+2*9}:{\triv@purs@rayon-\triv@purs@hautcases}) ; + \coordinate (GB-22) at ({187.5+3*9}:{\triv@purs@rayon}) ; + \coordinate (PB-22) at ({187.5+3*9}:{\triv@purs@rayon-\triv@purs@hautcases}) ; + \coordinate (GB-23) at ({187.5+4*9}:{\triv@purs@rayon}) ; + \coordinate (PB-23) at ({187.5+4*9}:{\triv@purs@rayon-\triv@purs@hautcases}) ; + \coordinate (GB-24) at ({187.5+5*9}:{\triv@purs@rayon}) ; + \coordinate (PB-24) at ({187.5+5*9}:{\triv@purs@rayon-\triv@purs@hautcases}) ; + \coordinate (GB-25) at ({247.5}:{\triv@purs@rayon}) ; + \coordinate (PB-25) at ({247.5}:{\triv@purs@rayon-\triv@purs@hautcases}) ; + \coordinate (GB-26) at ({247.5+9}:{\triv@purs@rayon}) ; + \coordinate (PB-26) at ({247.5+9}:{\triv@purs@rayon-\triv@purs@hautcases}) ; + \coordinate (GB-27) at ({247.5+2*9}:{\triv@purs@rayon}) ; + \coordinate (PB-27) at ({247.5+2*9}:{\triv@purs@rayon-\triv@purs@hautcases}) ; + \coordinate (GB-28) at ({247.5+3*9}:{\triv@purs@rayon}) ; + \coordinate (PB-28) at ({247.5+3*9}:{\triv@purs@rayon-\triv@purs@hautcases}) ; + \coordinate (GB-29) at ({247.5+4*9}:{\triv@purs@rayon}) ; + \coordinate (PB-29) at ({247.5+4*9}:{\triv@purs@rayon-\triv@purs@hautcases}) ; + \coordinate (GB-30) at ({247.5+5*9}:{\triv@purs@rayon}) ; + \coordinate (PB-30) at ({247.5+5*9}:{\triv@purs@rayon-\triv@purs@hautcases}) ; + \coordinate (GB-31) at ({307.5}:{\triv@purs@rayon}) ; + \coordinate (PB-31) at ({307.5}:{\triv@purs@rayon-\triv@purs@hautcases}) ; + \coordinate (GB-32) at ({307.5+9}:{\triv@purs@rayon}) ; + \coordinate (PB-32) at ({307.5+9}:{\triv@purs@rayon-\triv@purs@hautcases}) ; + \coordinate (GB-33) at ({307.5+2*9}:{\triv@purs@rayon}) ; + \coordinate (PB-33) at ({307.5+2*9}:{\triv@purs@rayon-\triv@purs@hautcases}) ; + \coordinate (GB-34) at ({307.5+3*9}:{\triv@purs@rayon}) ; + \coordinate (PB-34) at ({307.5+3*9}:{\triv@purs@rayon-\triv@purs@hautcases}) ; + \coordinate (GB-35) at ({307.5+4*9}:{\triv@purs@rayon}) ; + \coordinate (PB-35) at ({307.5+4*9}:{\triv@purs@rayon-\triv@purs@hautcases}) ; + \coordinate (GB-36) at ({307.5+5*9}:{\triv@purs@rayon}) ; + \coordinate (PB-36) at ({307.5+5*9}:{\triv@purs@rayon-\triv@purs@hautcases}) ; + %tests ?!?! +% \foreach \i in {1,...,36}{%OK +% \filldraw[teal] (GB-\i) circle[radius=1.75pt] node[font=\tiny\ttfamily] {GB-\i}; +% \filldraw[purple] (PB-\i) circle[radius=1.75pt] node[font=\tiny\ttfamily] {PB-\i}; +% } + %création des nœuds pour la figure centrale, boucle pour les 1ers + le dernier + \foreach \i in {1,...,\triv@purs@nbcat}{% + \coordinate (OM-\i) at ({30+(\i-1)*60}:{\triv@purs@rayonhexag}) ; + %\filldraw[orange] (OM-\i) circle[radius=1.75pt] node[font=\tiny\ttfamily] {OM-\i}; + }% + %les nœuds des cases verticales + \foreach \j in {1,...,\xinteval{\triv@purs@nbcat-2}}{% + \xdef\tmp@coeff{\xintfloateval{\j/(\triv@purs@nbcat-1)}}% + \coordinate (D-1-\j) at ($(PB-1)!\tmp@coeff!(OM-1)$) ; + %\filldraw[yellow] (D-1-\j) circle[radius=1.75pt] node[font=\tiny\ttfamily] {D-1-\j}; + }% + \foreach \j in {1,...,\xinteval{\triv@purs@nbcat-2}}{% + \xdef\tmp@coeff{\xintfloateval{\j/(\triv@purs@nbcat-1)}}% + \coordinate (D-2-\j) at ($(PB-6)!\tmp@coeff!(OM-1)$) ; + %\filldraw[yellow] (D-2-\j) circle[radius=1.75pt] node[font=\tiny\ttfamily] {D-2-\j}; + }% + \foreach \j in {1,...,\xinteval{\triv@purs@nbcat-2}}{% + \xdef\tmp@coeff{\xintfloateval{\j/(\triv@purs@nbcat-1)}}% + \coordinate (D-3-\j) at ($(PB-7)!\tmp@coeff!(OM-2)$) ; + %\filldraw[yellow] (D-3-\j) circle[radius=1.75pt] node[font=\tiny\ttfamily] {D-3-\j}; + }% + \foreach \j in {1,...,\xinteval{\triv@purs@nbcat-2}}{% + \xdef\tmp@coeff{\xintfloateval{\j/(\triv@purs@nbcat-1)}}% + \coordinate (D-4-\j) at ($(PB-12)!\tmp@coeff!(OM-2)$) ; + %\filldraw[yellow] (D-4-\j) circle[radius=1.75pt] node[font=\tiny\ttfamily] {D-4-\j}; + }% + \foreach \j in {1,...,\xinteval{\triv@purs@nbcat-2}}{% + \xdef\tmp@coeff{\xintfloateval{\j/(\triv@purs@nbcat-1)}}% + \coordinate (D-5-\j) at ($(PB-13)!\tmp@coeff!(OM-3)$) ; + %\filldraw[yellow] (D-5-\j) circle[radius=1.75pt] node[font=\tiny\ttfamily] {D-5-\j}; + }% + \foreach \j in {1,...,\xinteval{\triv@purs@nbcat-2}}{% + \xdef\tmp@coeff{\xintfloateval{\j/(\triv@purs@nbcat-1)}}% + \coordinate (D-6-\j) at ($(PB-18)!\tmp@coeff!(OM-3)$) ; + %\filldraw[yellow] (D-6-\j) circle[radius=1.75pt] node[font=\tiny\ttfamily] {D-5-\j}; + }% + \foreach \j in {1,...,\xinteval{\triv@purs@nbcat-2}}{% + \xdef\tmp@coeff{\xintfloateval{\j/(\triv@purs@nbcat-1)}}% + \coordinate (D-7-\j) at ($(PB-19)!\tmp@coeff!(OM-4)$) ; + %\filldraw[yellow] (D-7-\j) circle[radius=1.75pt] node[font=\tiny\ttfamily] {D-7-\j}; + }% + \foreach \j in {1,...,\xinteval{\triv@purs@nbcat-2}}{% + \xdef\tmp@coeff{\xintfloateval{\j/(\triv@purs@nbcat-1)}}% + \coordinate (D-8-\j) at ($(PB-24)!\tmp@coeff!(OM-4)$) ; + %\filldraw[yellow] (D-8-\j) circle[radius=1.75pt] node[font=\tiny\ttfamily] {D-8-\j}; + }% + \foreach \j in {1,...,\xinteval{\triv@purs@nbcat-2}}{% + \xdef\tmp@coeff{\xintfloateval{\j/(\triv@purs@nbcat-1)}}% + \coordinate (D-9-\j) at ($(PB-25)!\tmp@coeff!(OM-5)$) ; + %\filldraw[yellow] (D-9-\j) circle[radius=1.75pt] node[font=\tiny\ttfamily] {D-9-\j}; + }% + \foreach \j in {1,...,\xinteval{\triv@purs@nbcat-2}}{% + \xdef\tmp@coeff{\xintfloateval{\j/(\triv@purs@nbcat-1)}}% + \coordinate (D-10-\j) at ($(PB-30)!\tmp@coeff!(OM-5)$) ; + %\filldraw[yellow] (D-10-\j) circle[radius=1.75pt] node[font=\tiny\ttfamily] {D-10-\j}; + }% + \foreach \j in {1,...,\xinteval{\triv@purs@nbcat-2}}{% + \xdef\tmp@coeff{\xintfloateval{\j/(\triv@purs@nbcat-1)}}% + \coordinate (D-11-\j) at ($(PB-31)!\tmp@coeff!(OM-6)$) ; + %\filldraw[yellow] (D-11-\j) circle[radius=1.75pt] node[font=\tiny\ttfamily] {D-11-\j}; + }% + \foreach \j in {1,...,\xinteval{\triv@purs@nbcat-2}}{% + \xdef\tmp@coeff{\xintfloateval{\j/(\triv@purs@nbcat-1)}}% + \coordinate (D-12-\j) at ($(PB-36)!\tmp@coeff!(OM-6)$) ; + %\filldraw[yellow] (D-12-\j) circle[radius=1.75pt] node[font=\tiny\ttfamily] {D-12-\j}; + }% +} + +\NewDocumentCommand\RemplirCasesTourCourt{}{% + %-------Vertical + %niveau 1 vertical + \draw[EpTraits,fill={\triv@purs@lstcol[2]}] (OM-6)--(OM-1)--(D-1-4)--(D-12-4)--cycle ; + \node[rotate={90},scale={0.75*\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ($(OM-6)!0.5!(D-1-4)$) {\triv@purs@lsticons[2]} ; + \draw[EpTraits,fill={\triv@purs@lstcol[6]}] (D-12-4)--(D-1-4)--(D-1-3)--(D-12-3)--cycle ; + \node[rotate={90},scale={0.75*\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ($(D-12-4)!0.5!(D-1-3)$) {\triv@purs@lsticons[6]} ; + \draw[EpTraits,fill={\triv@purs@lstcol[5]}] (D-12-3)--(D-1-3)--(D-1-2)--(D-12-2)--cycle ; + \node[rotate={90},scale={0.75*\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ($(D-12-3)!0.5!(D-1-2)$) {\triv@purs@lsticons[5]} ; + \draw[EpTraits,fill={\triv@purs@lstcol[3]}] (D-12-2)--(D-1-2)--(D-1-1)--(D-12-1)--cycle ; + \node[rotate={90},scale={0.75*\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ($(D-12-2)!0.5!(D-1-1)$) {\triv@purs@lsticons[3]} ; + \draw[EpTraits,fill={\triv@purs@lstcol[4]}] (D-1-1)--(PB-1) arc({\triv@purs@anglecases}:{-\triv@purs@anglecases}:{\triv@purs@rayonint}) --(D-12-1)--cycle ; + \node[rotate={90},scale={0.75*\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ($(D-12-1)!0.5!(PB-1)$) {\triv@purs@lsticons[4]} ; + %niveau 2 vertical + \draw[EpTraits,fill={\triv@purs@lstcol[3]}] (OM-1)--(OM-2)--(D-3-4)--(D-2-4)--cycle ; + \node[rotate={90+(8)*\triv@purs@anglecases},scale={0.75*\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ($(OM-1)!0.5!(D-3-4)$) {\triv@purs@lsticons[3]} ; + \draw[EpTraits,fill={\triv@purs@lstcol[1]}] (D-2-4)--(D-3-4)--(D-3-3)--(D-2-3)--cycle ; + \node[rotate={90+(8)*\triv@purs@anglecases},scale={0.75*\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ($(D-2-4)!0.5!(D-3-3)$) {\triv@purs@lsticons[1]} ; + \draw[EpTraits,fill={\triv@purs@lstcol[6]}] (D-2-3)--(D-3-3)--(D-3-2)--(D-2-2)--cycle ; + \node[rotate={90+(8)*\triv@purs@anglecases},scale={0.75*\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ($(D-2-3)!0.5!(D-3-2)$) {\triv@purs@lsticons[6]} ; + \draw[EpTraits,fill={\triv@purs@lstcol[4]}] (D-2-2)--(D-3-2)--(D-3-1)--(D-2-1)--cycle ; + \node[rotate={90+(8)*\triv@purs@anglecases},scale={0.75*\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ($(D-2-2)!0.5!(D-3-1)$) {\triv@purs@lsticons[4]} ; + \draw[EpTraits,fill={\triv@purs@lstcol[5]}] (D-3-1)--(PB-7) arc({67.5}:{52.5}:{\triv@purs@rayonint}) --(D-2-1)--cycle ; + \node[rotate={90+(8)*\triv@purs@anglecases},scale={0.75*\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ($(D-2-1)!0.5!(PB-7)$) {\triv@purs@lsticons[5]} ; + %niveau 3 vertical + \draw[EpTraits,fill={\triv@purs@lstcol[4]}] (OM-2)--(OM-3)--(D-5-4)--(D-4-4)--cycle ; + \node[rotate={90+(16)*\triv@purs@anglecases},scale={0.75*\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ($(OM-2)!0.5!(D-5-4)$) {\triv@purs@lsticons[4]} ; + \draw[EpTraits,fill={\triv@purs@lstcol[2]}] (D-4-4)--(D-5-4)--(D-5-3)--(D-4-3)--cycle ; + \node[rotate={90+(16)*\triv@purs@anglecases},scale={0.75*\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ($(D-4-4)!0.5!(D-5-3)$) {\triv@purs@lsticons[2]} ; + \draw[EpTraits,fill={\triv@purs@lstcol[1]}] (D-4-3)--(D-5-3)--(D-5-2)--(D-4-2)--cycle ; + \node[rotate={90+(16)*\triv@purs@anglecases},scale={0.75*\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ($(D-4-3)!0.5!(D-5-2)$) {\triv@purs@lsticons[1]} ; + \draw[EpTraits,fill={\triv@purs@lstcol[5]}] (D-4-2)--(D-5-2)--(D-5-1)--(D-4-1)--cycle ; + \node[rotate={90+(16)*\triv@purs@anglecases},scale={0.75*\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ($(D-4-2)!0.5!(D-5-1)$) {\triv@purs@lsticons[5]} ; + \draw[EpTraits,fill={\triv@purs@lstcol[6]}] (D-5-1)--(PB-13) arc({127.5}:{112.5}:{\triv@purs@rayonint}) --(D-4-1)--cycle ; + \node[rotate={90+(16)*\triv@purs@anglecases},scale={0.75*\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ($(D-4-1)!0.5!(PB-13)$) {\triv@purs@lsticons[6]} ; + %niveau 4 vertical + \draw[EpTraits,fill={\triv@purs@lstcol[5]}] (OM-3)--(OM-4)--(D-7-4)--(D-6-4)--cycle ; + \node[rotate={90+(24)*\triv@purs@anglecases},scale={0.75*\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ($(OM-3)!0.5!(D-7-4)$) {\triv@purs@lsticons[5]} ; + \draw[EpTraits,fill={\triv@purs@lstcol[3]}] (D-6-4)--(D-7-4)--(D-7-3)--(D-6-3)--cycle ; + \node[rotate={90+(24)*\triv@purs@anglecases},scale={0.75*\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ($(D-6-4)!0.5!(D-7-3)$) {\triv@purs@lsticons[3]} ; + \draw[EpTraits,fill={\triv@purs@lstcol[2]}] (D-6-3)--(D-7-3)--(D-7-2)--(D-6-2)--cycle ; + \node[rotate={90+(24)*\triv@purs@anglecases},scale={0.75*\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ($(D-6-3)!0.5!(D-7-2)$) {\triv@purs@lsticons[2]} ; + \draw[EpTraits,fill={\triv@purs@lstcol[6]}] (D-6-2)--(D-7-2)--(D-7-1)--(D-6-1)--cycle ; + \node[rotate={90+(24)*\triv@purs@anglecases},scale={0.75*\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ($(D-6-2)!0.5!(D-7-1)$) {\triv@purs@lsticons[6]} ; + \draw[EpTraits,fill={\triv@purs@lstcol[1]}] (D-7-1)--(PB-19) arc({187.5}:{172.5}:{\triv@purs@rayonint}) --(D-6-1)--cycle ; + \node[rotate={90+(24)*\triv@purs@anglecases},scale={0.75*\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ($(D-6-1)!0.5!(PB-19)$) {\triv@purs@lsticons[1]} ; + %niveau 5 vertical + \draw[EpTraits,fill={\triv@purs@lstcol[6]}] (OM-4)--(OM-5)--(D-9-4)--(D-8-4)--cycle ; + \node[rotate={90+(32)*\triv@purs@anglecases},scale={0.75*\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ($(OM-4)!0.5!(D-9-4)$) {\triv@purs@lsticons[6]} ; + \draw[EpTraits,fill={\triv@purs@lstcol[4]}] (D-8-4)--(D-9-4)--(D-9-3)--(D-8-3)--cycle ; + \node[rotate={90+(32)*\triv@purs@anglecases},scale={0.75*\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ($(D-8-4)!0.5!(D-9-3)$) {\triv@purs@lsticons[4]} ; + \draw[EpTraits,fill={\triv@purs@lstcol[3]}] (D-8-3)--(D-9-3)--(D-9-2)--(D-8-2)--cycle ; + \node[rotate={90+(32)*\triv@purs@anglecases},scale={0.75*\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ($(D-8-3)!0.5!(D-9-2)$) {\triv@purs@lsticons[3]} ; + \draw[EpTraits,fill={\triv@purs@lstcol[1]}] (D-8-2)--(D-9-2)--(D-9-1)--(D-8-1)--cycle ; + \node[rotate={90+(32)*\triv@purs@anglecases},scale={0.75*\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ($(D-8-2)!0.5!(D-9-1)$) {\triv@purs@lsticons[1]} ; + \draw[EpTraits,fill={\triv@purs@lstcol[2]}] (D-9-1)--(PB-25) arc({247.5}:{232.5}:{\triv@purs@rayonint}) --(D-8-1)--cycle ; + \node[rotate={90+(32)*\triv@purs@anglecases},scale={0.75*\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ($(D-8-1)!0.5!(PB-25)$) {\triv@purs@lsticons[2]} ; + %niveau 6 vertical + \draw[EpTraits,fill={\triv@purs@lstcol[1]}] (OM-5)--(OM-6)--(D-11-4)--(D-10-4)--cycle ; + \node[rotate={90+(40)*\triv@purs@anglecases},scale={0.75*\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ($(OM-5)!0.5!(D-11-4)$) {\triv@purs@lsticons[1]} ; + \draw[EpTraits,fill={\triv@purs@lstcol[5]}] (D-10-4)--(D-11-4)--(D-11-3)--(D-10-3)--cycle ; + \node[rotate={90+(40)*\triv@purs@anglecases},scale={0.75*\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ($(D-10-4)!0.5!(D-11-3)$) {\triv@purs@lsticons[5]} ; + \draw[EpTraits,fill={\triv@purs@lstcol[4]}] (D-10-3)--(D-11-3)--(D-11-2)--(D-10-2)--cycle ; + \node[rotate={90+(40)*\triv@purs@anglecases},scale={0.75*\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ($(D-10-3)!0.5!(D-11-2)$) {\triv@purs@lsticons[4]} ; + \draw[EpTraits,fill={\triv@purs@lstcol[2]}] (D-10-2)--(D-11-2)--(D-11-1)--(D-10-1)--cycle ; + \node[rotate={90+(40)*\triv@purs@anglecases},scale={0.75*\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ($(D-10-2)!0.5!(D-11-1)$) {\triv@purs@lsticons[2]} ; + \draw[EpTraits,fill={\triv@purs@lstcol[3]}] (D-11-1)--(PB-31) arc({307.5}:{292.5}:{\triv@purs@rayonint}) --(D-10-1)--cycle ; + \node[rotate={90+(40)*\triv@purs@anglecases},scale={0.75*\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ($(D-10-1)!0.5!(PB-31)$) {\triv@purs@lsticons[3]} ; + %--------BORDS !!! + \ifboolKV[TrivPurs]{Couleurs}% + {% + %Secteur1 + \draw[EpTraits,fill={\triv@purs@lstcol[4]}] (PB-1)--(GB-1) arc ({7.5+0*9}:{7.5+1*9}:{\triv@purs@rayon})--(PB-2) arc ({7.5+1*9}:{7.5+0*9}:{\triv@purs@rayonint}); + \draw[EpTraits,fill={\triv@purs@lstcol[3]}] (PB-2)--(GB-2) arc ({7.5+1*9}:{7.5+2*9}:{\triv@purs@rayon})--(PB-3) arc ({7.5+2*9}:{7.5+1*9}:{\triv@purs@rayonint}); + \draw[EpTraits,fill={\triv@purs@lstcol[6]}] (PB-4)--(GB-4) arc ({7.5+3*9}:{7.5+4*9}:{\triv@purs@rayon})--(PB-5) arc ({7.5+4*9}:{7.5+3*9}:{\triv@purs@rayonint}); + \draw[EpTraits,fill={\triv@purs@lstcol[5]}] (PB-5)--(GB-5) arc ({7.5+4*9}:{7.5+5*9}:{\triv@purs@rayon})--(PB-6) arc ({7.5+5*9}:{7.5+4*9}:{\triv@purs@rayonint}); + %Secteur2 + \draw[EpTraits,fill={\triv@purs@lstcol[5]}] (PB-7)--(GB-7) arc ({7.5+60+0*9}:{7.5+60+1*9}:{\triv@purs@rayon})--(PB-8) arc ({7.5+60+1*9}:{7.5+60+0*9}:{\triv@purs@rayonint}); + \draw[EpTraits,fill={\triv@purs@lstcol[4]}] (PB-8)--(GB-8) arc ({7.5+60+1*9}:{7.5+60+2*9}:{\triv@purs@rayon})--(PB-9) arc ({7.5+60+2*9}:{7.5+60+1*9}:{\triv@purs@rayonint}); + \draw[EpTraits,fill={\triv@purs@lstcol[1]}] (PB-10)--(GB-10) arc ({7.5+60+3*9}:{7.5+60+4*9}:{\triv@purs@rayon})--(PB-11) arc ({7.5+60+4*9}:{7.5+60+3*9}:{\triv@purs@rayonint}); + \draw[EpTraits,fill={\triv@purs@lstcol[6]}] (PB-11)--(GB-11) arc ({7.5+60+4*9}:{7.5+60+5*9}:{\triv@purs@rayon})--(PB-12) arc ({7.5+60+5*9}:{7.5+60+4*9}:{\triv@purs@rayonint}); + %Secteur3 + \draw[EpTraits,fill={\triv@purs@lstcol[6]}] (PB-13)--(GB-13) arc ({7.5+120+0*9}:{7.5+120+1*9}:{\triv@purs@rayon})--(PB-14) arc ({7.5+120+1*9}:{7.5+120+0*9}:{\triv@purs@rayonint}); + \draw[EpTraits,fill={\triv@purs@lstcol[5]}] (PB-14)--(GB-14) arc ({7.5+120+1*9}:{7.5+120+2*9}:{\triv@purs@rayon})--(PB-15) arc ({7.5+120+2*9}:{7.5+120+1*9}:{\triv@purs@rayonint}); + \draw[EpTraits,fill={\triv@purs@lstcol[2]}] (PB-16)--(GB-16) arc ({7.5+120+3*9}:{7.5+120+4*9}:{\triv@purs@rayon})--(PB-17) arc ({7.5+120+4*9}:{7.5+120+3*9}:{\triv@purs@rayonint}); + \draw[EpTraits,fill={\triv@purs@lstcol[1]}] (PB-17)--(GB-17) arc ({7.5+120+4*9}:{7.5+120+5*9}:{\triv@purs@rayon})--(PB-18) arc ({7.5+120+5*9}:{7.5+120+4*9}:{\triv@purs@rayonint}); + %Secteur4 + \draw[EpTraits,fill={\triv@purs@lstcol[1]}] (PB-19)--(GB-19) arc ({7.5+180+0*9}:{7.5+180+1*9}:{\triv@purs@rayon})--(PB-20) arc ({7.5+180+1*9}:{7.5+180+0*9}:{\triv@purs@rayonint}); + \draw[EpTraits,fill={\triv@purs@lstcol[6]}] (PB-20)--(GB-20) arc ({7.5+180+1*9}:{7.5+180+2*9}:{\triv@purs@rayon})--(PB-21) arc ({7.5+180+2*9}:{7.5+180+1*9}:{\triv@purs@rayonint}); + \draw[EpTraits,fill={\triv@purs@lstcol[3]}] (PB-22)--(GB-22) arc ({7.5+180+3*9}:{7.5+180+4*9}:{\triv@purs@rayon})--(PB-23) arc ({7.5+180+4*9}:{7.5+180+3*9}:{\triv@purs@rayonint}); + \draw[EpTraits,fill={\triv@purs@lstcol[2]}] (PB-23)--(GB-23) arc ({7.5+180+4*9}:{7.5+180+5*9}:{\triv@purs@rayon})--(PB-24) arc ({7.5+180+5*9}:{7.5+180+4*9}:{\triv@purs@rayonint}); + %Secteur5 + \draw[EpTraits,fill={\triv@purs@lstcol[2]}] (PB-25)--(GB-25) arc ({7.5+240+0*9}:{7.5+240+1*9}:{\triv@purs@rayon})--(PB-26) arc ({7.5+240+1*9}:{7.5+240+0*9}:{\triv@purs@rayonint}); + \draw[EpTraits,fill={\triv@purs@lstcol[1]}] (PB-26)--(GB-26) arc ({7.5+240+1*9}:{7.5+240+2*9}:{\triv@purs@rayon})--(PB-27) arc ({7.5+240+2*9}:{7.5+240+1*9}:{\triv@purs@rayonint}); + \draw[EpTraits,fill={\triv@purs@lstcol[4]}] (PB-28)--(GB-28) arc ({7.5+240+3*9}:{7.5+240+4*9}:{\triv@purs@rayon})--(PB-29) arc ({7.5+240+4*9}:{7.5+240+3*9}:{\triv@purs@rayonint}); + \draw[EpTraits,fill={\triv@purs@lstcol[3]}] (PB-29)--(GB-29) arc ({7.5+240+4*9}:{7.5+240+5*9}:{\triv@purs@rayon})--(PB-30) arc ({7.5+240+5*9}:{7.5+240+4*9}:{\triv@purs@rayonint}); + %Secteur6 + \draw[EpTraits,fill={\triv@purs@lstcol[3]}] (PB-31)--(GB-31) arc ({7.5+300+0*9}:{7.5+300+1*9}:{\triv@purs@rayon})--(PB-32) arc ({7.5+300+1*9}:{7.5+300+0*9}:{\triv@purs@rayonint}); + \draw[EpTraits,fill={\triv@purs@lstcol[2]}] (PB-32)--(GB-32) arc ({7.5+300+1*9}:{7.5+300+2*9}:{\triv@purs@rayon})--(PB-33) arc ({7.5+300+2*9}:{7.5+300+1*9}:{\triv@purs@rayonint}); + \draw[EpTraits,fill={\triv@purs@lstcol[5]}] (PB-34)--(GB-34) arc ({7.5+300+3*9}:{7.5+300+4*9}:{\triv@purs@rayon})--(PB-35) arc ({7.5+300+4*9}:{7.5+300+3*9}:{\triv@purs@rayonint}); + \draw[EpTraits,fill={\triv@purs@lstcol[4]}] (PB-35)--(GB-35) arc ({7.5+300+4*9}:{7.5+300+5*9}:{\triv@purs@rayon})--(PB-36) arc ({7.5+300+5*9}:{7.5+300+4*9}:{\triv@purs@rayonint}); + }% + {}% + \ifboolKV[TrivPurs]{Icones}% + {% + %secteur1 + \node[rotate={90+0.5*(7.5+0*9+7.5+1*9)},scale={\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ({0.5*(7.5+7.5+1*9)}:{\triv@purs@rayon-0.5*\triv@purs@hautcases}) {\triv@purs@lsticons[4]} ; + \node[rotate={90+0.5*(7.5+1*9+7.5+2*9)},scale={\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ({0.5*(7.5+1*9+7.5+2*9)}:{\triv@purs@rayon-0.5*\triv@purs@hautcases}) {\triv@purs@lsticons[3]} ; + \node[rotate={90+0.5*(7.5+3*9+7.5+4*9)},scale={\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ({0.5*(7.5+3*9+7.5+4*9)}:{\triv@purs@rayon-0.5*\triv@purs@hautcases}) {\triv@purs@lsticons[6]} ; + \node[rotate={90+0.5*(7.5+5*9+7.5+5*9)},scale={\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ({0.5*(7.5+4*9+7.5+5*9)}:{\triv@purs@rayon-0.5*\triv@purs@hautcases}) {\triv@purs@lsticons[5]} ; + %secteur2 + \node[rotate={90+0.5*(2*60+7.5+0*9+7.5+1*9)},scale={\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ({0.5*(2*60+7.5+7.5+1*9)}:{\triv@purs@rayon-0.5*\triv@purs@hautcases}) {\triv@purs@lsticons[5]} ; + \node[rotate={90+0.5*(2*60+7.5+1*9+7.5+2*9)},scale={\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ({0.5*(2*60+7.5+1*9+7.5+2*9)}:{\triv@purs@rayon-0.5*\triv@purs@hautcases}) {\triv@purs@lsticons[4]} ; + \node[rotate={90+0.5*(2*60+7.5+3*9+7.5+4*9)},scale={\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ({0.5*(2*60+7.5+3*9+7.5+4*9)}:{\triv@purs@rayon-0.5*\triv@purs@hautcases}) {\triv@purs@lsticons[1]} ; + \node[rotate={90+0.5*(2*60+7.5+5*9+7.5+5*9)},scale={\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ({0.5*(2*60+7.5+4*9+7.5+5*9)}:{\triv@purs@rayon-0.5*\triv@purs@hautcases}) {\triv@purs@lsticons[6]} ; + %secteur3 + \node[rotate={90+0.5*(2*120+7.5+0*9+7.5+1*9)},scale={\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ({0.5*(2*120+7.5+7.5+1*9)}:{\triv@purs@rayon-0.5*\triv@purs@hautcases}) {\triv@purs@lsticons[6]} ; + \node[rotate={90+0.5*(2*120+7.5+1*9+7.5+2*9)},scale={\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ({0.5*(2*120+7.5+1*9+7.5+2*9)}:{\triv@purs@rayon-0.5*\triv@purs@hautcases}) {\triv@purs@lsticons[5]} ; + \node[rotate={90+0.5*(2*120+7.5+3*9+7.5+4*9)},scale={\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ({0.5*(2*120+7.5+3*9+7.5+4*9)}:{\triv@purs@rayon-0.5*\triv@purs@hautcases}) {\triv@purs@lsticons[2]} ; + \node[rotate={90+0.5*(2*120+7.5+5*9+7.5+5*9)},scale={\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ({0.5*(2*120+7.5+4*9+7.5+5*9)}:{\triv@purs@rayon-0.5*\triv@purs@hautcases}) {\triv@purs@lsticons[1]} ; + %secteur4 + \node[rotate={90+0.5*(2*180+7.5+0*9+7.5+1*9)},scale={\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ({0.5*(2*180+7.5+7.5+1*9)}:{\triv@purs@rayon-0.5*\triv@purs@hautcases}) {\triv@purs@lsticons[1]} ; + \node[rotate={90+0.5*(2*180+7.5+1*9+7.5+2*9)},scale={\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ({0.5*(2*180+7.5+1*9+7.5+2*9)}:{\triv@purs@rayon-0.5*\triv@purs@hautcases}) {\triv@purs@lsticons[6]} ; + \node[rotate={90+0.5*(2*180+7.5+3*9+7.5+4*9)},scale={\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ({0.5*(2*180+7.5+3*9+7.5+4*9)}:{\triv@purs@rayon-0.5*\triv@purs@hautcases}) {\triv@purs@lsticons[3]} ; + \node[rotate={90+0.5*(2*180+7.5+5*9+7.5+5*9)},scale={\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ({0.5*(2*180+7.5+4*9+7.5+5*9)}:{\triv@purs@rayon-0.5*\triv@purs@hautcases}) {\triv@purs@lsticons[2]} ; + %secteur5 + \node[rotate={90+0.5*(2*240+7.5+0*9+7.5+1*9)},scale={\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ({0.5*(2*240+7.5+7.5+1*9)}:{\triv@purs@rayon-0.5*\triv@purs@hautcases}) {\triv@purs@lsticons[2]} ; + \node[rotate={90+0.5*(2*240+7.5+1*9+7.5+2*9)},scale={\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ({0.5*(2*240+7.5+1*9+7.5+2*9)}:{\triv@purs@rayon-0.5*\triv@purs@hautcases}) {\triv@purs@lsticons[1]} ; + \node[rotate={90+0.5*(2*240+7.5+3*9+7.5+4*9)},scale={\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ({0.5*(2*240+7.5+3*9+7.5+4*9)}:{\triv@purs@rayon-0.5*\triv@purs@hautcases}) {\triv@purs@lsticons[4]} ; + \node[rotate={90+0.5*(2*240+7.5+5*9+7.5+5*9)},scale={\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ({0.5*(2*240+7.5+4*9+7.5+5*9)}:{\triv@purs@rayon-0.5*\triv@purs@hautcases}) {\triv@purs@lsticons[3]} ; + %secteur6 + \node[rotate={90+0.5*(2*300+7.5+0*9+7.5+1*9)},scale={\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ({0.5*(2*300+7.5+7.5+1*9)}:{\triv@purs@rayon-0.5*\triv@purs@hautcases}) {\triv@purs@lsticons[3]} ; + \node[rotate={90+0.5*(2*300+7.5+1*9+7.5+2*9)},scale={\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ({0.5*(2*300+7.5+1*9+7.5+2*9)}:{\triv@purs@rayon-0.5*\triv@purs@hautcases}) {\triv@purs@lsticons[2]} ; + \node[rotate={90+0.5*(2*300+7.5+3*9+7.5+4*9)},scale={\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ({0.5*(2*300+7.5+3*9+7.5+4*9)}:{\triv@purs@rayon-0.5*\triv@purs@hautcases}) {\triv@purs@lsticons[5]} ; + \node[rotate={90+0.5*(2*300+7.5+5*9+7.5+5*9)},scale={\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ({0.5*(2*300+7.5+4*9+7.5+5*9)}:{\triv@purs@rayon-0.5*\triv@purs@hautcases}) {\triv@purs@lsticons[4]} ; + }% + {}% + + %les jokers + \ifboolKV[TrivPurs]{Icones}% + {% + \ifboolKV[TrivPurs]{Jokers}% + {% + \node[rotate=30,scale={\triv@purs@scaleicons*\triv@purs@hautcases}] at ({30}:{\triv@purs@rayon-0.5*\triv@purs@hautcases}) {\triv@purs@iconjok} ; + \node[rotate=90,scale={\triv@purs@scaleicons*\triv@purs@hautcases}] at ({90}:{\triv@purs@rayon-0.5*\triv@purs@hautcases}) {\triv@purs@iconjok} ; + \node[rotate=150,scale={\triv@purs@scaleicons*\triv@purs@hautcases}] at ({150}:{\triv@purs@rayon-0.5*\triv@purs@hautcases}) {\triv@purs@iconjok} ; + \node[rotate=210,scale={\triv@purs@scaleicons*\triv@purs@hautcases}] at ({210}:{\triv@purs@rayon-0.5*\triv@purs@hautcases}) {\triv@purs@iconjok} ; + \node[rotate=270,scale={\triv@purs@scaleicons*\triv@purs@hautcases}] at ({270}:{\triv@purs@rayon-0.5*\triv@purs@hautcases}) {\triv@purs@iconjok} ; + \node[rotate=330,scale={\triv@purs@scaleicons*\triv@purs@hautcases}] at ({330}:{\triv@purs@rayon-0.5*\triv@purs@hautcases}) {\triv@purs@iconjok} ; + }% + {}% + }% + {}% +} +\NewDocumentCommand\TraceBorduresTrivialCourt{ }{%OK Court + %les tracés des cases + \draw[EpTraits] (0,0) circle[radius=\triv@purs@rayon] ; + \draw[EpTraits] (0,0) circle[radius={\triv@purs@rayon-\triv@purs@hautcases}] ; + \foreach \i in {1,...,36}{% + \draw[EpTraits] (PB-\i)--(GB-\i) ; + } + \draw[EpTraits] (PB-1)--(OM-1)--(OM-6)--(PB-36) ; + \draw[EpTraits] (PB-6)--(OM-1)--(OM-2)--(PB-7) ; + \draw[EpTraits] (PB-12)--(OM-2)--(OM-3)--(PB-13) ; + \draw[EpTraits] (PB-18)--(OM-3)--(OM-4)--(PB-19) ; + \draw[EpTraits] (PB-24)--(OM-4)--(OM-5)--(PB-25) ; + \draw[EpTraits] (PB-30)--(OM-5)--(OM-6)--(PB-31) ; + \foreach \j in {1,...,\xinteval{\triv@purs@nbcat-2}}{% + \draw[EpTraits] (D-2-\j)--(D-3-\j) ; + \draw[EpTraits] (D-4-\j)--(D-5-\j) ; + \draw[EpTraits] (D-6-\j)--(D-7-\j) ; + \draw[EpTraits] (D-8-\j)--(D-9-\j) ; + \draw[EpTraits] (D-10-\j)--(D-11-\j) ; + \draw[EpTraits] (D-12-\j)--(D-1-\j) ; + }% +} + +\NewDocumentCommand\RemplirCamembertsTrivialCourt{ }{%numéro des camemberts, en partant de la droite + \ifboolKV[TrivPurs]{Couleurs}% + {% + %Couleur du 1er camembert + \draw[EpTraits,fill={\triv@purs@lstcol[1]}] (PB-36)--(GB-36) arc ({-\triv@purs@anglecases}:{\triv@purs@anglecases}:{\triv@purs@rayon})--(PB-1) arc ({\triv@purs@anglecases}:{-\triv@purs@anglecases}:{\triv@purs@rayonint})--cycle ; + %Couleur du 2ème + \draw[EpTraits,fill={\triv@purs@lstcol[2]}] (PB-6)--(GB-6) arc ({7*\triv@purs@anglecases}:{9*\triv@purs@anglecases}:{\triv@purs@rayon})--(PB-7) arc ({9*\triv@purs@anglecases}:{7*\triv@purs@anglecases}:{\triv@purs@rayonint})--cycle ; + %Couleur du 3ème + \draw[EpTraits,fill={\triv@purs@lstcol[3]}] (PB-12)--(GB-12) arc ({15*\triv@purs@anglecases}:{17*\triv@purs@anglecases}:{\triv@purs@rayon})--(PB-13) arc ({17*\triv@purs@anglecases}:{15*\triv@purs@anglecases}:{\triv@purs@rayonint})--cycle ; + %Couleur du 4ème + \draw[EpTraits,fill={\triv@purs@lstcol[4]}] (PB-18)--(GB-18) arc ({23*\triv@purs@anglecases}:{25*\triv@purs@anglecases}:{\triv@purs@rayon})--(PB-19) arc ({25*\triv@purs@anglecases}:{23*\triv@purs@anglecases}:{\triv@purs@rayonint})--cycle ; + %Couleur du 5ème + \draw[EpTraits,fill={\triv@purs@lstcol[5]}] (PB-24)--(GB-24) arc ({31*\triv@purs@anglecases}:{33*\triv@purs@anglecases}:{\triv@purs@rayon})--(PB-25) arc ({33*\triv@purs@anglecases}:{31*\triv@purs@anglecases}:{\triv@purs@rayonint})--cycle ; + %Couleur du 6ème + \draw[EpTraits,fill={\triv@purs@lstcol[6]}] (PB-30)--(GB-30) arc ({39*\triv@purs@anglecases}:{41*\triv@purs@anglecases}:{\triv@purs@rayon})--(PB-31) arc ({41*\triv@purs@anglecases}:{39*\triv@purs@anglecases}:{\triv@purs@rayonint})--cycle ; + }% + {}% + %si on affiche les icones + \ifboolKV[TrivPurs]{Icones}% + {% + \node[rotate={90+0*\triv@purs@anglecases},scale={1.5*\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ({0}:{\triv@purs@rayon-0.5*\triv@purs@hautcases}) {\triv@purs@lsticons[1]} ; + \node[rotate={90+8*\triv@purs@anglecases},scale={1.5*\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ({8*\triv@purs@anglecases}:{\triv@purs@rayon-0.5*\triv@purs@hautcases}) {\triv@purs@lsticons[2]} ; + \node[rotate={90+16*\triv@purs@anglecases},scale={1.5*\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ({16*\triv@purs@anglecases}:{\triv@purs@rayon-0.5*\triv@purs@hautcases}) {\triv@purs@lsticons[3]} ; + \node[rotate={90+24*\triv@purs@anglecases},scale={1.5*\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ({24*\triv@purs@anglecases}:{\triv@purs@rayon-0.5*\triv@purs@hautcases}) {\triv@purs@lsticons[4]} ; + \node[rotate={90+32*\triv@purs@anglecases},scale={1.5*\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ({32*\triv@purs@anglecases}:{\triv@purs@rayon-0.5*\triv@purs@hautcases}) {\triv@purs@lsticons[5]} ; + \node[rotate={90+40*\triv@purs@anglecases},scale={1.5*\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ({40*\triv@purs@anglecases}:{\triv@purs@rayon-0.5*\triv@purs@hautcases}) {\triv@purs@lsticons[6]} ; + }% + {}% +} + %====CREATION \NewDocumentCommand\PlateauTrivialPursuit{ O{} D<>{} }{% \restoreKV[TrivPurs]% revenir au valeurs par défaut @@ -433,18 +790,35 @@ \useasboundingbox (0,0) circle[radius={\triv@purs@rayon}] ; %création \begin{scope}[rotate=\triv@purs@rotate] - %les nœuds OK - \CreationNoeudsTrivial - %test avec centre OK - \ifboolKV[TrivPurs]{Centre}{\RemplirCentreTrivial}{} - %camemberts OK - \RemplirCamembertsTrivial - %cases OK - \RemplirCasesTour - %bordures - \TraceBorduresTrivial - %logo central - \ifboolKV[TrivPurs]{Logo}{\LogoTrivialPursuit}{} + \ifboolKV[TrivPurs]{VersionCourte}% + {% + %les nœuds OK + \CreationNoeudsTrivialCourt + %test avec centre OK + \ifboolKV[TrivPurs]{Centre}{\RemplirCentreTrivial}{} + %camemberts OK + \RemplirCamembertsTrivialCourt + %cases OK + \RemplirCasesTourCourt + %bordures + \TraceBorduresTrivialCourt + %logo central + \ifboolKV[TrivPurs]{Logo}{\LogoTrivialPursuit}{} + }% + {% + %les nœuds OK + \CreationNoeudsTrivial + %test avec centre OK + \ifboolKV[TrivPurs]{Centre}{\RemplirCentreTrivial}{} + %camemberts OK + \RemplirCamembertsTrivial + %cases OK + \RemplirCasesTour + %bordures + \TraceBorduresTrivial + %logo central + \ifboolKV[TrivPurs]{Logo}{\LogoTrivialPursuit}{} + }% \end{scope} \end{tikzpicture}% } @@ -477,7 +851,8 @@ Thickness=0.8pt,% Rotation=0,% Jokers=true,% - IconJoker={\faDice} + IconJoker={\faDice},% + ShortVersion=false } %====INTERN COMMANDS @@ -528,17 +903,17 @@ \ifboolKV[TrivPursEN]{Colors}% {% %Couleur du 1er camembert - \filldraw[{\triv@purs@lstcol[1]}] (PB-47)--(GB-47) arc ({-\triv@purs@anglecases}:{\triv@purs@anglecases}:{\triv@purs@rayon})--(PB-1) arc ({\triv@purs@anglecases}:{-\triv@purs@anglecases}:{\triv@purs@rayonint})--cycle ; + \draw[EpTraits,fill={\triv@purs@lstcol[1]}] (PB-47)--(GB-47) arc ({-\triv@purs@anglecases}:{\triv@purs@anglecases}:{\triv@purs@rayon})--(PB-1) arc ({\triv@purs@anglecases}:{-\triv@purs@anglecases}:{\triv@purs@rayonint})--cycle ; %Couleur du 2ème - \filldraw[{\triv@purs@lstcol[2]}] (PB-7)--(GB-7) arc ({7*\triv@purs@anglecases}:{9*\triv@purs@anglecases}:{\triv@purs@rayon})--(PB-9) arc ({9*\triv@purs@anglecases}:{7*\triv@purs@anglecases}:{\triv@purs@rayonint})--cycle ; + \draw[EpTraits,fill={\triv@purs@lstcol[2]}] (PB-7)--(GB-7) arc ({7*\triv@purs@anglecases}:{9*\triv@purs@anglecases}:{\triv@purs@rayon})--(PB-9) arc ({9*\triv@purs@anglecases}:{7*\triv@purs@anglecases}:{\triv@purs@rayonint})--cycle ; %Couleur du 3ème - \filldraw[{\triv@purs@lstcol[3]}] (PB-15)--(GB-15) arc ({15*\triv@purs@anglecases}:{17*\triv@purs@anglecases}:{\triv@purs@rayon})--(PB-17) arc ({17*\triv@purs@anglecases}:{15*\triv@purs@anglecases}:{\triv@purs@rayonint})--cycle ; + \draw[EpTraits,fill={\triv@purs@lstcol[3]}] (PB-15)--(GB-15) arc ({15*\triv@purs@anglecases}:{17*\triv@purs@anglecases}:{\triv@purs@rayon})--(PB-17) arc ({17*\triv@purs@anglecases}:{15*\triv@purs@anglecases}:{\triv@purs@rayonint})--cycle ; %Couleur du 4ème - \filldraw[{\triv@purs@lstcol[4]}] (PB-23)--(GB-23) arc ({23*\triv@purs@anglecases}:{25*\triv@purs@anglecases}:{\triv@purs@rayon})--(PB-25) arc ({25*\triv@purs@anglecases}:{23*\triv@purs@anglecases}:{\triv@purs@rayonint})--cycle ; + \draw[EpTraits,fill={\triv@purs@lstcol[4]}] (PB-23)--(GB-23) arc ({23*\triv@purs@anglecases}:{25*\triv@purs@anglecases}:{\triv@purs@rayon})--(PB-25) arc ({25*\triv@purs@anglecases}:{23*\triv@purs@anglecases}:{\triv@purs@rayonint})--cycle ; %Couleur du 5ème - \filldraw[{\triv@purs@lstcol[5]}] (PB-31)--(GB-31) arc ({31*\triv@purs@anglecases}:{33*\triv@purs@anglecases}:{\triv@purs@rayon})--(PB-33) arc ({33*\triv@purs@anglecases}:{31*\triv@purs@anglecases}:{\triv@purs@rayonint})--cycle ; + \draw[EpTraits,fill={\triv@purs@lstcol[5]}] (PB-31)--(GB-31) arc ({31*\triv@purs@anglecases}:{33*\triv@purs@anglecases}:{\triv@purs@rayon})--(PB-33) arc ({33*\triv@purs@anglecases}:{31*\triv@purs@anglecases}:{\triv@purs@rayonint})--cycle ; %Couleur du 6ème - \filldraw[{\triv@purs@lstcol[6]}] (PB-39)--(GB-39) arc ({39*\triv@purs@anglecases}:{41*\triv@purs@anglecases}:{\triv@purs@rayon})--(PB-41) arc ({41*\triv@purs@anglecases}:{39*\triv@purs@anglecases}:{\triv@purs@rayonint})--cycle ; + \draw[EpTraits,fill={\triv@purs@lstcol[6]}] (PB-39)--(GB-39) arc ({39*\triv@purs@anglecases}:{41*\triv@purs@anglecases}:{\triv@purs@rayon})--(PB-41) arc ({41*\triv@purs@anglecases}:{39*\triv@purs@anglecases}:{\triv@purs@rayonint})--cycle ; }% {}% %si on affiche les icones @@ -556,7 +931,7 @@ \NewDocumentCommand\FillCellTrivial{ m m m }{%deb + fin + numcouleur \ifboolKV[TrivPursEN]{Colors}% {% - \filldraw[{\triv@purs@lstcol[#3]}] (PB-#1)--(GB-#1) arc ({#1*\triv@purs@anglecases}:{#2*\triv@purs@anglecases}:{\triv@purs@rayon})--(PB-#2) arc ({#2*\triv@purs@anglecases}:{#1*\triv@purs@anglecases}:{\triv@purs@rayonint}); + \draw[EpTraits,fill={\triv@purs@lstcol[#3]}] (PB-#1)--(GB-#1) arc ({#1*\triv@purs@anglecases}:{#2*\triv@purs@anglecases}:{\triv@purs@rayon})--(PB-#2) arc ({#2*\triv@purs@anglecases}:{#1*\triv@purs@anglecases}:{\triv@purs@rayonint}); }% {}% \ifboolKV[TrivPursEN]{Icons}% @@ -575,17 +950,17 @@ \xdef\tmpcaseap{\xinteval{#2+1}}% \xintifboolexpr{#2 > 1 'and' #2 < 5}% {% - \filldraw[{\triv@purs@lstcol[#3]}] (C-#1-\tmpcase)--(D-#1-\tmpcase)--(D-#1-#2)--(C-#1-#2)--cycle ; + \draw[EpTraits,fill={\triv@purs@lstcol[#3]}] (C-#1-\tmpcase)--(D-#1-\tmpcase)--(D-#1-#2)--(C-#1-#2)--cycle ; }% {}% \xintifboolexpr{#2 == 5}% {% \xintifboolexpr{#1 == 1}% {% - \filldraw[{\triv@purs@lstcol[#3]}] (C-#1-\tmpcase)--(D-#1-\tmpcase)--(OM-#1)--(OM-6)--cycle ; + \draw[EpTraits,fill={\triv@purs@lstcol[#3]}] (C-#1-\tmpcase)--(D-#1-\tmpcase)--(OM-#1)--(OM-6)--cycle ; }% {% - \filldraw[{\triv@purs@lstcol[#3]}] (C-#1-\tmpcase)--(D-#1-\tmpcase)--(OM-#1)--(OM-\tmpnivav)--cycle ; + \draw[EpTraits,fill={\triv@purs@lstcol[#3]}] (C-#1-\tmpcase)--(D-#1-\tmpcase)--(OM-#1)--(OM-\tmpnivav)--cycle ; }% }% {}% @@ -593,12 +968,12 @@ {% \xintifboolexpr{#1 == 1}% {% - \filldraw[{\triv@purs@lstcol[#3]}] (C-1-1)--(PB-\triv@purs@numcasavant) arc({-\triv@purs@anglecases}:{\triv@purs@anglecases}:{\triv@purs@rayonint}) --(D-1-1)--cycle ; + \draw[EpTraits,fill={\triv@purs@lstcol[#3]}] (C-1-1)--(PB-\triv@purs@numcasavant) arc({-\triv@purs@anglecases}:{\triv@purs@anglecases}:{\triv@purs@rayonint}) --(D-1-1)--cycle ; }% {% \xdef\tmp@ii{\xinteval{(-1+8*(#1-1))}}% \xdef\tmp@jj{\xinteval{(\tmp@ii+2)}}% - \filldraw[{\triv@purs@lstcol[#3]}] (C-#1-1)--(PB-\tmp@ii) arc({\tmp@ii*\triv@purs@anglecases}:{\tmp@jj*\triv@purs@anglecases}:{\triv@purs@rayonint}) --(D-#1-1)--cycle ; + \draw[EpTraits,fill={\triv@purs@lstcol[#3]}] (C-#1-1)--(PB-\tmp@ii) arc({\tmp@ii*\triv@purs@anglecases}:{\tmp@jj*\triv@purs@anglecases}:{\triv@purs@rayonint}) --(D-#1-1)--cycle ; }% }% {}% @@ -766,7 +1141,7 @@ \begin{scope}[shift={(0:{0.15*\triv@purs@lgcamemb})}] \ifboolKV[TrivPursEN]{Colors}% {% - \filldraw[{\triv@purs@lstcol[1]}] (0,0)--({-30}:{0.765*\triv@purs@lgcamemb}) arc (-30:30:{0.765*\triv@purs@lgcamemb}) -- cycle ; + \draw[EpTraits,fill={\triv@purs@lstcol[1]}] (0,0)--({-30}:{0.765*\triv@purs@lgcamemb}) arc (-30:30:{0.765*\triv@purs@lgcamemb}) -- cycle ; }% {}% \draw[EpTraitsPlus] (0,0)--({-30}:{0.765*\triv@purs@lgcamemb}) arc (-30:30:{0.765*\triv@purs@lgcamemb}) -- cycle ; @@ -774,7 +1149,7 @@ \begin{scope}[shift={(60:{0.15*\triv@purs@lgcamemb})}] \ifboolKV[TrivPursEN]{Colors}% {% - \filldraw[{\triv@purs@lstcol[2]}] (0,0)--({30}:{0.765*\triv@purs@lgcamemb}) arc (30:90:{0.765*\triv@purs@lgcamemb}) -- cycle ; + \draw[EpTraits,fill={\triv@purs@lstcol[2]}] (0,0)--({30}:{0.765*\triv@purs@lgcamemb}) arc (30:90:{0.765*\triv@purs@lgcamemb}) -- cycle ; }% {}% \draw[EpTraitsPlus] (0,0)--({30}:{0.765*\triv@purs@lgcamemb}) arc (30:90:{0.765*\triv@purs@lgcamemb}) -- cycle ; @@ -782,7 +1157,7 @@ \begin{scope}[shift={(120:{0.15*\triv@purs@lgcamemb})}] \ifboolKV[TrivPursEN]{Colors}% {% - \filldraw[{\triv@purs@lstcol[3]}] (0,0)--({90}:{0.765*\triv@purs@lgcamemb}) arc (90:150:{0.765*\triv@purs@lgcamemb}) -- cycle ; + \draw[EpTraits,fill={\triv@purs@lstcol[3]}] (0,0)--({90}:{0.765*\triv@purs@lgcamemb}) arc (90:150:{0.765*\triv@purs@lgcamemb}) -- cycle ; }% {}% \draw[EpTraitsPlus] (0,0)--({90}:{0.765*\triv@purs@lgcamemb}) arc (90:150:{0.765*\triv@purs@lgcamemb}) -- cycle ; @@ -790,7 +1165,7 @@ \begin{scope}[shift={(180:{0.15*\triv@purs@lgcamemb})}] \ifboolKV[TrivPursEN]{Colors}% {% - \filldraw[{\triv@purs@lstcol[4]}] (0,0)--({150}:{0.765*\triv@purs@lgcamemb}) arc (150:210:{0.765*\triv@purs@lgcamemb}) -- cycle ; + \draw[EpTraits,fill={\triv@purs@lstcol[4]}] (0,0)--({150}:{0.765*\triv@purs@lgcamemb}) arc (150:210:{0.765*\triv@purs@lgcamemb}) -- cycle ; }% {}% \draw[EpTraitsPlus] (0,0)--({150}:{0.765*\triv@purs@lgcamemb}) arc (150:210:{0.765*\triv@purs@lgcamemb}) -- cycle ; @@ -798,7 +1173,7 @@ \begin{scope}[shift={(240:{0.15*\triv@purs@lgcamemb})}] \ifboolKV[TrivPursEN]{Colors}% {% - \filldraw[{\triv@purs@lstcol[5]}] (0,0)--({210}:{0.765*\triv@purs@lgcamemb}) arc (210:270:{0.765*\triv@purs@lgcamemb}) -- cycle ; + \draw[EpTraits,fill={\triv@purs@lstcol[5]}] (0,0)--({210}:{0.765*\triv@purs@lgcamemb}) arc (210:270:{0.765*\triv@purs@lgcamemb}) -- cycle ; }% {}% \draw[EpTraitsPlus] (0,0)--({210}:{0.765*\triv@purs@lgcamemb}) arc (210:270:{0.765*\triv@purs@lgcamemb}) -- cycle ; @@ -806,13 +1181,368 @@ \begin{scope}[shift={(300:{0.15*\triv@purs@lgcamemb})}] \ifboolKV[TrivPursEN]{Colors}% {% - \filldraw[{\triv@purs@lstcol[6]}] (0,0)--({270}:{0.765*\triv@purs@lgcamemb}) arc (270:330:{0.765*\triv@purs@lgcamemb}) -- cycle ; + \draw[EpTraits,fill={\triv@purs@lstcol[6]}] (0,0)--({270}:{0.765*\triv@purs@lgcamemb}) arc (270:330:{0.765*\triv@purs@lgcamemb}) -- cycle ; }% {}% \draw[EpTraitsPlus] (0,0)--({270}:{0.765*\triv@purs@lgcamemb}) arc (270:330:{0.765*\triv@purs@lgcamemb}) -- cycle ; \end{scope} } +%courte +\NewDocumentCommand\CreationNodesTrivialShort{}{%OK !!!!!!!!!!!!!! + %création des nœuds grand bord petit bord GB-i (et PB-i) + \coordinate (GB-1) at ({7.5}:{\triv@purs@rayon}) ; + \coordinate (PB-1) at ({7.5}:{\triv@purs@rayon-\triv@purs@hautcases}) ; + \coordinate (GB-2) at ({7.5+9}:{\triv@purs@rayon}) ; + \coordinate (PB-2) at ({7.5+9}:{\triv@purs@rayon-\triv@purs@hautcases}) ; + \coordinate (GB-3) at ({7.5+2*9}:{\triv@purs@rayon}) ; + \coordinate (PB-3) at ({7.5+2*9}:{\triv@purs@rayon-\triv@purs@hautcases}) ; + \coordinate (GB-4) at ({7.5+3*9}:{\triv@purs@rayon}) ; + \coordinate (PB-4) at ({7.5+3*9}:{\triv@purs@rayon-\triv@purs@hautcases}) ; + \coordinate (GB-5) at ({7.5+4*9}:{\triv@purs@rayon}) ; + \coordinate (PB-5) at ({7.5+4*9}:{\triv@purs@rayon-\triv@purs@hautcases}) ; + \coordinate (GB-6) at ({7.5+5*9}:{\triv@purs@rayon}) ; + \coordinate (PB-6) at ({7.5+5*9}:{\triv@purs@rayon-\triv@purs@hautcases}) ; + \coordinate (GB-7) at ({67.5}:{\triv@purs@rayon}) ; + \coordinate (PB-7) at ({67.5}:{\triv@purs@rayon-\triv@purs@hautcases}) ; + \coordinate (GB-8) at ({67.5+9}:{\triv@purs@rayon}) ; + \coordinate (PB-8) at ({67.5+9}:{\triv@purs@rayon-\triv@purs@hautcases}) ; + \coordinate (GB-9) at ({67.5+2*9}:{\triv@purs@rayon}) ; + \coordinate (PB-9) at ({67.5+2*9}:{\triv@purs@rayon-\triv@purs@hautcases}) ; + \coordinate (GB-10) at ({67.5+3*9}:{\triv@purs@rayon}) ; + \coordinate (PB-10) at ({67.5+3*9}:{\triv@purs@rayon-\triv@purs@hautcases}) ; + \coordinate (GB-11) at ({67.5+4*9}:{\triv@purs@rayon}) ; + \coordinate (PB-11) at ({67.5+4*9}:{\triv@purs@rayon-\triv@purs@hautcases}) ; + \coordinate (GB-12) at ({67.5+5*9}:{\triv@purs@rayon}) ; + \coordinate (PB-12) at ({67.5+5*9}:{\triv@purs@rayon-\triv@purs@hautcases}) ; + \coordinate (GB-13) at ({127.5}:{\triv@purs@rayon}) ; + \coordinate (PB-13) at ({127.5}:{\triv@purs@rayon-\triv@purs@hautcases}) ; + \coordinate (GB-14) at ({127.5+9}:{\triv@purs@rayon}) ; + \coordinate (PB-14) at ({127.5+9}:{\triv@purs@rayon-\triv@purs@hautcases}) ; + \coordinate (GB-15) at ({127.5+2*9}:{\triv@purs@rayon}) ; + \coordinate (PB-15) at ({127.5+2*9}:{\triv@purs@rayon-\triv@purs@hautcases}) ; + \coordinate (GB-16) at ({127.5+3*9}:{\triv@purs@rayon}) ; + \coordinate (PB-16) at ({127.5+3*9}:{\triv@purs@rayon-\triv@purs@hautcases}) ; + \coordinate (GB-17) at ({127.5+4*9}:{\triv@purs@rayon}) ; + \coordinate (PB-17) at ({127.5+4*9}:{\triv@purs@rayon-\triv@purs@hautcases}) ; + \coordinate (GB-18) at ({127.5+5*9}:{\triv@purs@rayon}) ; + \coordinate (PB-18) at ({127.5+5*9}:{\triv@purs@rayon-\triv@purs@hautcases}) ; + \coordinate (GB-19) at ({187.5}:{\triv@purs@rayon}) ; + \coordinate (PB-19) at ({187.5}:{\triv@purs@rayon-\triv@purs@hautcases}) ; + \coordinate (GB-20) at ({187.5+9}:{\triv@purs@rayon}) ; + \coordinate (PB-20) at ({187.5+9}:{\triv@purs@rayon-\triv@purs@hautcases}) ; + \coordinate (GB-21) at ({187.5+2*9}:{\triv@purs@rayon}) ; + \coordinate (PB-21) at ({187.5+2*9}:{\triv@purs@rayon-\triv@purs@hautcases}) ; + \coordinate (GB-22) at ({187.5+3*9}:{\triv@purs@rayon}) ; + \coordinate (PB-22) at ({187.5+3*9}:{\triv@purs@rayon-\triv@purs@hautcases}) ; + \coordinate (GB-23) at ({187.5+4*9}:{\triv@purs@rayon}) ; + \coordinate (PB-23) at ({187.5+4*9}:{\triv@purs@rayon-\triv@purs@hautcases}) ; + \coordinate (GB-24) at ({187.5+5*9}:{\triv@purs@rayon}) ; + \coordinate (PB-24) at ({187.5+5*9}:{\triv@purs@rayon-\triv@purs@hautcases}) ; + \coordinate (GB-25) at ({247.5}:{\triv@purs@rayon}) ; + \coordinate (PB-25) at ({247.5}:{\triv@purs@rayon-\triv@purs@hautcases}) ; + \coordinate (GB-26) at ({247.5+9}:{\triv@purs@rayon}) ; + \coordinate (PB-26) at ({247.5+9}:{\triv@purs@rayon-\triv@purs@hautcases}) ; + \coordinate (GB-27) at ({247.5+2*9}:{\triv@purs@rayon}) ; + \coordinate (PB-27) at ({247.5+2*9}:{\triv@purs@rayon-\triv@purs@hautcases}) ; + \coordinate (GB-28) at ({247.5+3*9}:{\triv@purs@rayon}) ; + \coordinate (PB-28) at ({247.5+3*9}:{\triv@purs@rayon-\triv@purs@hautcases}) ; + \coordinate (GB-29) at ({247.5+4*9}:{\triv@purs@rayon}) ; + \coordinate (PB-29) at ({247.5+4*9}:{\triv@purs@rayon-\triv@purs@hautcases}) ; + \coordinate (GB-30) at ({247.5+5*9}:{\triv@purs@rayon}) ; + \coordinate (PB-30) at ({247.5+5*9}:{\triv@purs@rayon-\triv@purs@hautcases}) ; + \coordinate (GB-31) at ({307.5}:{\triv@purs@rayon}) ; + \coordinate (PB-31) at ({307.5}:{\triv@purs@rayon-\triv@purs@hautcases}) ; + \coordinate (GB-32) at ({307.5+9}:{\triv@purs@rayon}) ; + \coordinate (PB-32) at ({307.5+9}:{\triv@purs@rayon-\triv@purs@hautcases}) ; + \coordinate (GB-33) at ({307.5+2*9}:{\triv@purs@rayon}) ; + \coordinate (PB-33) at ({307.5+2*9}:{\triv@purs@rayon-\triv@purs@hautcases}) ; + \coordinate (GB-34) at ({307.5+3*9}:{\triv@purs@rayon}) ; + \coordinate (PB-34) at ({307.5+3*9}:{\triv@purs@rayon-\triv@purs@hautcases}) ; + \coordinate (GB-35) at ({307.5+4*9}:{\triv@purs@rayon}) ; + \coordinate (PB-35) at ({307.5+4*9}:{\triv@purs@rayon-\triv@purs@hautcases}) ; + \coordinate (GB-36) at ({307.5+5*9}:{\triv@purs@rayon}) ; + \coordinate (PB-36) at ({307.5+5*9}:{\triv@purs@rayon-\triv@purs@hautcases}) ; + %tests ?!?! +% \foreach \i in {1,...,36}{%OK +% \draw[EpTraits,fill=teal] (GB-\i) circle[radius=1.75pt] node[font=\tiny\ttfamily] {GB-\i}; +% \draw[EpTraits,fill=purple] (PB-\i) circle[radius=1.75pt] node[font=\tiny\ttfamily] {PB-\i}; +% } + %création des nœuds pour la figure centrale, boucle pour les 1ers + le dernier + \foreach \i in {1,...,\triv@purs@nbcat}{% + \coordinate (OM-\i) at ({30+(\i-1)*60}:{\triv@purs@rayonhexag}) ; + %\draw[EpTraits,fill=orange] (OM-\i) circle[radius=1.75pt] node[font=\tiny\ttfamily] {OM-\i}; + }% + %les nœuds des cases verticales + \foreach \j in {1,...,\xinteval{\triv@purs@nbcat-2}}{% + \xdef\tmp@coeff{\xintfloateval{\j/(\triv@purs@nbcat-1)}}% + \coordinate (D-1-\j) at ($(PB-1)!\tmp@coeff!(OM-1)$) ; + %\draw[EpTraits,fill=yellow] (D-1-\j) circle[radius=1.75pt] node[font=\tiny\ttfamily] {D-1-\j}; + }% + \foreach \j in {1,...,\xinteval{\triv@purs@nbcat-2}}{% + \xdef\tmp@coeff{\xintfloateval{\j/(\triv@purs@nbcat-1)}}% + \coordinate (D-2-\j) at ($(PB-6)!\tmp@coeff!(OM-1)$) ; + %\draw[EpTraits,fill=yellow] (D-2-\j) circle[radius=1.75pt] node[font=\tiny\ttfamily] {D-2-\j}; + }% + \foreach \j in {1,...,\xinteval{\triv@purs@nbcat-2}}{% + \xdef\tmp@coeff{\xintfloateval{\j/(\triv@purs@nbcat-1)}}% + \coordinate (D-3-\j) at ($(PB-7)!\tmp@coeff!(OM-2)$) ; + %\draw[EpTraits,fill=yellow] (D-3-\j) circle[radius=1.75pt] node[font=\tiny\ttfamily] {D-3-\j}; + }% + \foreach \j in {1,...,\xinteval{\triv@purs@nbcat-2}}{% + \xdef\tmp@coeff{\xintfloateval{\j/(\triv@purs@nbcat-1)}}% + \coordinate (D-4-\j) at ($(PB-12)!\tmp@coeff!(OM-2)$) ; + %\draw[EpTraits,fill=yellow] (D-4-\j) circle[radius=1.75pt] node[font=\tiny\ttfamily] {D-4-\j}; + }% + \foreach \j in {1,...,\xinteval{\triv@purs@nbcat-2}}{% + \xdef\tmp@coeff{\xintfloateval{\j/(\triv@purs@nbcat-1)}}% + \coordinate (D-5-\j) at ($(PB-13)!\tmp@coeff!(OM-3)$) ; + %\draw[EpTraits,fill=yellow] (D-5-\j) circle[radius=1.75pt] node[font=\tiny\ttfamily] {D-5-\j}; + }% + \foreach \j in {1,...,\xinteval{\triv@purs@nbcat-2}}{% + \xdef\tmp@coeff{\xintfloateval{\j/(\triv@purs@nbcat-1)}}% + \coordinate (D-6-\j) at ($(PB-18)!\tmp@coeff!(OM-3)$) ; + %\draw[EpTraits,fill=yellow] (D-6-\j) circle[radius=1.75pt] node[font=\tiny\ttfamily] {D-5-\j}; + }% + \foreach \j in {1,...,\xinteval{\triv@purs@nbcat-2}}{% + \xdef\tmp@coeff{\xintfloateval{\j/(\triv@purs@nbcat-1)}}% + \coordinate (D-7-\j) at ($(PB-19)!\tmp@coeff!(OM-4)$) ; + %\draw[EpTraits,fill=yellow] (D-7-\j) circle[radius=1.75pt] node[font=\tiny\ttfamily] {D-7-\j}; + }% + \foreach \j in {1,...,\xinteval{\triv@purs@nbcat-2}}{% + \xdef\tmp@coeff{\xintfloateval{\j/(\triv@purs@nbcat-1)}}% + \coordinate (D-8-\j) at ($(PB-24)!\tmp@coeff!(OM-4)$) ; + %\draw[EpTraits,fill=yellow] (D-8-\j) circle[radius=1.75pt] node[font=\tiny\ttfamily] {D-8-\j}; + }% + \foreach \j in {1,...,\xinteval{\triv@purs@nbcat-2}}{% + \xdef\tmp@coeff{\xintfloateval{\j/(\triv@purs@nbcat-1)}}% + \coordinate (D-9-\j) at ($(PB-25)!\tmp@coeff!(OM-5)$) ; + %\draw[EpTraits,fill=yellow] (D-9-\j) circle[radius=1.75pt] node[font=\tiny\ttfamily] {D-9-\j}; + }% + \foreach \j in {1,...,\xinteval{\triv@purs@nbcat-2}}{% + \xdef\tmp@coeff{\xintfloateval{\j/(\triv@purs@nbcat-1)}}% + \coordinate (D-10-\j) at ($(PB-30)!\tmp@coeff!(OM-5)$) ; + %\draw[EpTraits,fill=yellow] (D-10-\j) circle[radius=1.75pt] node[font=\tiny\ttfamily] {D-10-\j}; + }% + \foreach \j in {1,...,\xinteval{\triv@purs@nbcat-2}}{% + \xdef\tmp@coeff{\xintfloateval{\j/(\triv@purs@nbcat-1)}}% + \coordinate (D-11-\j) at ($(PB-31)!\tmp@coeff!(OM-6)$) ; + %\draw[EpTraits,fill=yellow] (D-11-\j) circle[radius=1.75pt] node[font=\tiny\ttfamily] {D-11-\j}; + }% + \foreach \j in {1,...,\xinteval{\triv@purs@nbcat-2}}{% + \xdef\tmp@coeff{\xintfloateval{\j/(\triv@purs@nbcat-1)}}% + \coordinate (D-12-\j) at ($(PB-36)!\tmp@coeff!(OM-6)$) ; + %\draw[EpTraits,fill=yellow] (D-12-\j) circle[radius=1.75pt] node[font=\tiny\ttfamily] {D-12-\j}; + }% +} + +\NewDocumentCommand\FillCellsBorderShort{}{% + %-------Vertical + %niveau 1 vertical + \draw[EpTraits,fill={\triv@purs@lstcol[2]}] (OM-6)--(OM-1)--(D-1-4)--(D-12-4)--cycle ; + \node[rotate={90},scale={0.75*\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ($(OM-6)!0.5!(D-1-4)$) {\triv@purs@lsticons[2]} ; + \draw[EpTraits,fill={\triv@purs@lstcol[6]}] (D-12-4)--(D-1-4)--(D-1-3)--(D-12-3)--cycle ; + \node[rotate={90},scale={0.75*\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ($(D-12-4)!0.5!(D-1-3)$) {\triv@purs@lsticons[6]} ; + \draw[EpTraits,fill={\triv@purs@lstcol[5]}] (D-12-3)--(D-1-3)--(D-1-2)--(D-12-2)--cycle ; + \node[rotate={90},scale={0.75*\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ($(D-12-3)!0.5!(D-1-2)$) {\triv@purs@lsticons[5]} ; + \draw[EpTraits,fill={\triv@purs@lstcol[3]}] (D-12-2)--(D-1-2)--(D-1-1)--(D-12-1)--cycle ; + \node[rotate={90},scale={0.75*\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ($(D-12-2)!0.5!(D-1-1)$) {\triv@purs@lsticons[3]} ; + \draw[EpTraits,fill={\triv@purs@lstcol[4]}] (D-1-1)--(PB-1) arc({\triv@purs@anglecases}:{-\triv@purs@anglecases}:{\triv@purs@rayonint}) --(D-12-1)--cycle ; + \node[rotate={90},scale={0.75*\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ($(D-12-1)!0.5!(PB-1)$) {\triv@purs@lsticons[4]} ; + %niveau 2 vertical + \draw[EpTraits,fill={\triv@purs@lstcol[3]}] (OM-1)--(OM-2)--(D-3-4)--(D-2-4)--cycle ; + \node[rotate={90+(8)*\triv@purs@anglecases},scale={0.75*\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ($(OM-1)!0.5!(D-3-4)$) {\triv@purs@lsticons[3]} ; + \draw[EpTraits,fill={\triv@purs@lstcol[1]}] (D-2-4)--(D-3-4)--(D-3-3)--(D-2-3)--cycle ; + \node[rotate={90+(8)*\triv@purs@anglecases},scale={0.75*\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ($(D-2-4)!0.5!(D-3-3)$) {\triv@purs@lsticons[1]} ; + \draw[EpTraits,fill={\triv@purs@lstcol[6]}] (D-2-3)--(D-3-3)--(D-3-2)--(D-2-2)--cycle ; + \node[rotate={90+(8)*\triv@purs@anglecases},scale={0.75*\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ($(D-2-3)!0.5!(D-3-2)$) {\triv@purs@lsticons[6]} ; + \draw[EpTraits,fill={\triv@purs@lstcol[4]}] (D-2-2)--(D-3-2)--(D-3-1)--(D-2-1)--cycle ; + \node[rotate={90+(8)*\triv@purs@anglecases},scale={0.75*\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ($(D-2-2)!0.5!(D-3-1)$) {\triv@purs@lsticons[4]} ; + \draw[EpTraits,fill={\triv@purs@lstcol[5]}] (D-3-1)--(PB-7) arc({67.5}:{52.5}:{\triv@purs@rayonint}) --(D-2-1)--cycle ; + \node[rotate={90+(8)*\triv@purs@anglecases},scale={0.75*\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ($(D-2-1)!0.5!(PB-7)$) {\triv@purs@lsticons[5]} ; + %niveau 3 vertical + \draw[EpTraits,fill={\triv@purs@lstcol[4]}] (OM-2)--(OM-3)--(D-5-4)--(D-4-4)--cycle ; + \node[rotate={90+(16)*\triv@purs@anglecases},scale={0.75*\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ($(OM-2)!0.5!(D-5-4)$) {\triv@purs@lsticons[4]} ; + \draw[EpTraits,fill={\triv@purs@lstcol[2]}] (D-4-4)--(D-5-4)--(D-5-3)--(D-4-3)--cycle ; + \node[rotate={90+(16)*\triv@purs@anglecases},scale={0.75*\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ($(D-4-4)!0.5!(D-5-3)$) {\triv@purs@lsticons[2]} ; + \draw[EpTraits,fill={\triv@purs@lstcol[1]}] (D-4-3)--(D-5-3)--(D-5-2)--(D-4-2)--cycle ; + \node[rotate={90+(16)*\triv@purs@anglecases},scale={0.75*\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ($(D-4-3)!0.5!(D-5-2)$) {\triv@purs@lsticons[1]} ; + \draw[EpTraits,fill={\triv@purs@lstcol[5]}] (D-4-2)--(D-5-2)--(D-5-1)--(D-4-1)--cycle ; + \node[rotate={90+(16)*\triv@purs@anglecases},scale={0.75*\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ($(D-4-2)!0.5!(D-5-1)$) {\triv@purs@lsticons[5]} ; + \draw[EpTraits,fill={\triv@purs@lstcol[6]}] (D-5-1)--(PB-13) arc({127.5}:{112.5}:{\triv@purs@rayonint}) --(D-4-1)--cycle ; + \node[rotate={90+(16)*\triv@purs@anglecases},scale={0.75*\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ($(D-4-1)!0.5!(PB-13)$) {\triv@purs@lsticons[6]} ; + %niveau 4 vertical + \draw[EpTraits,fill={\triv@purs@lstcol[5]}] (OM-3)--(OM-4)--(D-7-4)--(D-6-4)--cycle ; + \node[rotate={90+(24)*\triv@purs@anglecases},scale={0.75*\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ($(OM-3)!0.5!(D-7-4)$) {\triv@purs@lsticons[5]} ; + \draw[EpTraits,fill={\triv@purs@lstcol[3]}] (D-6-4)--(D-7-4)--(D-7-3)--(D-6-3)--cycle ; + \node[rotate={90+(24)*\triv@purs@anglecases},scale={0.75*\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ($(D-6-4)!0.5!(D-7-3)$) {\triv@purs@lsticons[3]} ; + \draw[EpTraits,fill={\triv@purs@lstcol[2]}] (D-6-3)--(D-7-3)--(D-7-2)--(D-6-2)--cycle ; + \node[rotate={90+(24)*\triv@purs@anglecases},scale={0.75*\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ($(D-6-3)!0.5!(D-7-2)$) {\triv@purs@lsticons[2]} ; + \draw[EpTraits,fill={\triv@purs@lstcol[6]}] (D-6-2)--(D-7-2)--(D-7-1)--(D-6-1)--cycle ; + \node[rotate={90+(24)*\triv@purs@anglecases},scale={0.75*\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ($(D-6-2)!0.5!(D-7-1)$) {\triv@purs@lsticons[6]} ; + \draw[EpTraits,fill={\triv@purs@lstcol[1]}] (D-7-1)--(PB-19) arc({187.5}:{172.5}:{\triv@purs@rayonint}) --(D-6-1)--cycle ; + \node[rotate={90+(24)*\triv@purs@anglecases},scale={0.75*\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ($(D-6-1)!0.5!(PB-19)$) {\triv@purs@lsticons[1]} ; + %niveau 5 vertical + \draw[EpTraits,fill={\triv@purs@lstcol[6]}] (OM-4)--(OM-5)--(D-9-4)--(D-8-4)--cycle ; + \node[rotate={90+(32)*\triv@purs@anglecases},scale={0.75*\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ($(OM-4)!0.5!(D-9-4)$) {\triv@purs@lsticons[6]} ; + \draw[EpTraits,fill={\triv@purs@lstcol[4]}] (D-8-4)--(D-9-4)--(D-9-3)--(D-8-3)--cycle ; + \node[rotate={90+(32)*\triv@purs@anglecases},scale={0.75*\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ($(D-8-4)!0.5!(D-9-3)$) {\triv@purs@lsticons[4]} ; + \draw[EpTraits,fill={\triv@purs@lstcol[3]}] (D-8-3)--(D-9-3)--(D-9-2)--(D-8-2)--cycle ; + \node[rotate={90+(32)*\triv@purs@anglecases},scale={0.75*\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ($(D-8-3)!0.5!(D-9-2)$) {\triv@purs@lsticons[3]} ; + \draw[EpTraits,fill={\triv@purs@lstcol[1]}] (D-8-2)--(D-9-2)--(D-9-1)--(D-8-1)--cycle ; + \node[rotate={90+(32)*\triv@purs@anglecases},scale={0.75*\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ($(D-8-2)!0.5!(D-9-1)$) {\triv@purs@lsticons[1]} ; + \draw[EpTraits,fill={\triv@purs@lstcol[2]}] (D-9-1)--(PB-25) arc({247.5}:{232.5}:{\triv@purs@rayonint}) --(D-8-1)--cycle ; + \node[rotate={90+(32)*\triv@purs@anglecases},scale={0.75*\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ($(D-8-1)!0.5!(PB-25)$) {\triv@purs@lsticons[2]} ; + %niveau 6 vertical + \draw[EpTraits,fill={\triv@purs@lstcol[1]}] (OM-5)--(OM-6)--(D-11-4)--(D-10-4)--cycle ; + \node[rotate={90+(40)*\triv@purs@anglecases},scale={0.75*\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ($(OM-5)!0.5!(D-11-4)$) {\triv@purs@lsticons[1]} ; + \draw[EpTraits,fill={\triv@purs@lstcol[5]}] (D-10-4)--(D-11-4)--(D-11-3)--(D-10-3)--cycle ; + \node[rotate={90+(40)*\triv@purs@anglecases},scale={0.75*\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ($(D-10-4)!0.5!(D-11-3)$) {\triv@purs@lsticons[5]} ; + \draw[EpTraits,fill={\triv@purs@lstcol[4]}] (D-10-3)--(D-11-3)--(D-11-2)--(D-10-2)--cycle ; + \node[rotate={90+(40)*\triv@purs@anglecases},scale={0.75*\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ($(D-10-3)!0.5!(D-11-2)$) {\triv@purs@lsticons[4]} ; + \draw[EpTraits,fill={\triv@purs@lstcol[2]}] (D-10-2)--(D-11-2)--(D-11-1)--(D-10-1)--cycle ; + \node[rotate={90+(40)*\triv@purs@anglecases},scale={0.75*\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ($(D-10-2)!0.5!(D-11-1)$) {\triv@purs@lsticons[2]} ; + \draw[EpTraits,fill={\triv@purs@lstcol[3]}] (D-11-1)--(PB-31) arc({307.5}:{292.5}:{\triv@purs@rayonint}) --(D-10-1)--cycle ; + \node[rotate={90+(40)*\triv@purs@anglecases},scale={0.75*\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ($(D-10-1)!0.5!(PB-31)$) {\triv@purs@lsticons[3]} ; + %--------BORDS !!! + \ifboolKV[TrivPursEN]{Colors}% + {% + %Secteur1 + \draw[EpTraits,fill={\triv@purs@lstcol[4]}] (PB-1)--(GB-1) arc ({7.5+0*9}:{7.5+1*9}:{\triv@purs@rayon})--(PB-2) arc ({7.5+1*9}:{7.5+0*9}:{\triv@purs@rayonint}); + \draw[EpTraits,fill={\triv@purs@lstcol[3]}] (PB-2)--(GB-2) arc ({7.5+1*9}:{7.5+2*9}:{\triv@purs@rayon})--(PB-3) arc ({7.5+2*9}:{7.5+1*9}:{\triv@purs@rayonint}); + \draw[EpTraits,fill={\triv@purs@lstcol[6]}] (PB-4)--(GB-4) arc ({7.5+3*9}:{7.5+4*9}:{\triv@purs@rayon})--(PB-5) arc ({7.5+4*9}:{7.5+3*9}:{\triv@purs@rayonint}); + \draw[EpTraits,fill={\triv@purs@lstcol[5]}] (PB-5)--(GB-5) arc ({7.5+4*9}:{7.5+5*9}:{\triv@purs@rayon})--(PB-6) arc ({7.5+5*9}:{7.5+4*9}:{\triv@purs@rayonint}); + %Secteur2 + \draw[EpTraits,fill={\triv@purs@lstcol[5]}] (PB-7)--(GB-7) arc ({7.5+60+0*9}:{7.5+60+1*9}:{\triv@purs@rayon})--(PB-8) arc ({7.5+60+1*9}:{7.5+60+0*9}:{\triv@purs@rayonint}); + \draw[EpTraits,fill={\triv@purs@lstcol[4]}] (PB-8)--(GB-8) arc ({7.5+60+1*9}:{7.5+60+2*9}:{\triv@purs@rayon})--(PB-9) arc ({7.5+60+2*9}:{7.5+60+1*9}:{\triv@purs@rayonint}); + \draw[EpTraits,fill={\triv@purs@lstcol[1]}] (PB-10)--(GB-10) arc ({7.5+60+3*9}:{7.5+60+4*9}:{\triv@purs@rayon})--(PB-11) arc ({7.5+60+4*9}:{7.5+60+3*9}:{\triv@purs@rayonint}); + \draw[EpTraits,fill={\triv@purs@lstcol[6]}] (PB-11)--(GB-11) arc ({7.5+60+4*9}:{7.5+60+5*9}:{\triv@purs@rayon})--(PB-12) arc ({7.5+60+5*9}:{7.5+60+4*9}:{\triv@purs@rayonint}); + %Secteur3 + \draw[EpTraits,fill={\triv@purs@lstcol[6]}] (PB-13)--(GB-13) arc ({7.5+120+0*9}:{7.5+120+1*9}:{\triv@purs@rayon})--(PB-14) arc ({7.5+120+1*9}:{7.5+120+0*9}:{\triv@purs@rayonint}); + \draw[EpTraits,fill={\triv@purs@lstcol[5]}] (PB-14)--(GB-14) arc ({7.5+120+1*9}:{7.5+120+2*9}:{\triv@purs@rayon})--(PB-15) arc ({7.5+120+2*9}:{7.5+120+1*9}:{\triv@purs@rayonint}); + \draw[EpTraits,fill={\triv@purs@lstcol[2]}] (PB-16)--(GB-16) arc ({7.5+120+3*9}:{7.5+120+4*9}:{\triv@purs@rayon})--(PB-17) arc ({7.5+120+4*9}:{7.5+120+3*9}:{\triv@purs@rayonint}); + \draw[EpTraits,fill={\triv@purs@lstcol[1]}] (PB-17)--(GB-17) arc ({7.5+120+4*9}:{7.5+120+5*9}:{\triv@purs@rayon})--(PB-18) arc ({7.5+120+5*9}:{7.5+120+4*9}:{\triv@purs@rayonint}); + %Secteur4 + \draw[EpTraits,fill={\triv@purs@lstcol[1]}] (PB-19)--(GB-19) arc ({7.5+180+0*9}:{7.5+180+1*9}:{\triv@purs@rayon})--(PB-20) arc ({7.5+180+1*9}:{7.5+180+0*9}:{\triv@purs@rayonint}); + \draw[EpTraits,fill={\triv@purs@lstcol[6]}] (PB-20)--(GB-20) arc ({7.5+180+1*9}:{7.5+180+2*9}:{\triv@purs@rayon})--(PB-21) arc ({7.5+180+2*9}:{7.5+180+1*9}:{\triv@purs@rayonint}); + \draw[EpTraits,fill={\triv@purs@lstcol[3]}] (PB-22)--(GB-22) arc ({7.5+180+3*9}:{7.5+180+4*9}:{\triv@purs@rayon})--(PB-23) arc ({7.5+180+4*9}:{7.5+180+3*9}:{\triv@purs@rayonint}); + \draw[EpTraits,fill={\triv@purs@lstcol[2]}] (PB-23)--(GB-23) arc ({7.5+180+4*9}:{7.5+180+5*9}:{\triv@purs@rayon})--(PB-24) arc ({7.5+180+5*9}:{7.5+180+4*9}:{\triv@purs@rayonint}); + %Secteur5 + \draw[EpTraits,fill={\triv@purs@lstcol[2]}] (PB-25)--(GB-25) arc ({7.5+240+0*9}:{7.5+240+1*9}:{\triv@purs@rayon})--(PB-26) arc ({7.5+240+1*9}:{7.5+240+0*9}:{\triv@purs@rayonint}); + \draw[EpTraits,fill={\triv@purs@lstcol[1]}] (PB-26)--(GB-26) arc ({7.5+240+1*9}:{7.5+240+2*9}:{\triv@purs@rayon})--(PB-27) arc ({7.5+240+2*9}:{7.5+240+1*9}:{\triv@purs@rayonint}); + \draw[EpTraits,fill={\triv@purs@lstcol[4]}] (PB-28)--(GB-28) arc ({7.5+240+3*9}:{7.5+240+4*9}:{\triv@purs@rayon})--(PB-29) arc ({7.5+240+4*9}:{7.5+240+3*9}:{\triv@purs@rayonint}); + \draw[EpTraits,fill={\triv@purs@lstcol[3]}] (PB-29)--(GB-29) arc ({7.5+240+4*9}:{7.5+240+5*9}:{\triv@purs@rayon})--(PB-30) arc ({7.5+240+5*9}:{7.5+240+4*9}:{\triv@purs@rayonint}); + %Secteur6 + \draw[EpTraits,fill={\triv@purs@lstcol[3]}] (PB-31)--(GB-31) arc ({7.5+300+0*9}:{7.5+300+1*9}:{\triv@purs@rayon})--(PB-32) arc ({7.5+300+1*9}:{7.5+300+0*9}:{\triv@purs@rayonint}); + \draw[EpTraits,fill={\triv@purs@lstcol[2]}] (PB-32)--(GB-32) arc ({7.5+300+1*9}:{7.5+300+2*9}:{\triv@purs@rayon})--(PB-33) arc ({7.5+300+2*9}:{7.5+300+1*9}:{\triv@purs@rayonint}); + \draw[EpTraits,fill={\triv@purs@lstcol[5]}] (PB-34)--(GB-34) arc ({7.5+300+3*9}:{7.5+300+4*9}:{\triv@purs@rayon})--(PB-35) arc ({7.5+300+4*9}:{7.5+300+3*9}:{\triv@purs@rayonint}); + \draw[EpTraits,fill={\triv@purs@lstcol[4]}] (PB-35)--(GB-35) arc ({7.5+300+4*9}:{7.5+300+5*9}:{\triv@purs@rayon})--(PB-36) arc ({7.5+300+5*9}:{7.5+300+4*9}:{\triv@purs@rayonint}); + }% + {}% + \ifboolKV[TrivPursEN]{Icons}% + {% + %secteur1 + \node[rotate={90+0.5*(7.5+0*9+7.5+1*9)},scale={\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ({0.5*(7.5+7.5+1*9)}:{\triv@purs@rayon-0.5*\triv@purs@hautcases}) {\triv@purs@lsticons[4]} ; + \node[rotate={90+0.5*(7.5+1*9+7.5+2*9)},scale={\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ({0.5*(7.5+1*9+7.5+2*9)}:{\triv@purs@rayon-0.5*\triv@purs@hautcases}) {\triv@purs@lsticons[3]} ; + \node[rotate={90+0.5*(7.5+3*9+7.5+4*9)},scale={\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ({0.5*(7.5+3*9+7.5+4*9)}:{\triv@purs@rayon-0.5*\triv@purs@hautcases}) {\triv@purs@lsticons[6]} ; + \node[rotate={90+0.5*(7.5+5*9+7.5+5*9)},scale={\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ({0.5*(7.5+4*9+7.5+5*9)}:{\triv@purs@rayon-0.5*\triv@purs@hautcases}) {\triv@purs@lsticons[5]} ; + %secteur2 + \node[rotate={90+0.5*(2*60+7.5+0*9+7.5+1*9)},scale={\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ({0.5*(2*60+7.5+7.5+1*9)}:{\triv@purs@rayon-0.5*\triv@purs@hautcases}) {\triv@purs@lsticons[5]} ; + \node[rotate={90+0.5*(2*60+7.5+1*9+7.5+2*9)},scale={\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ({0.5*(2*60+7.5+1*9+7.5+2*9)}:{\triv@purs@rayon-0.5*\triv@purs@hautcases}) {\triv@purs@lsticons[4]} ; + \node[rotate={90+0.5*(2*60+7.5+3*9+7.5+4*9)},scale={\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ({0.5*(2*60+7.5+3*9+7.5+4*9)}:{\triv@purs@rayon-0.5*\triv@purs@hautcases}) {\triv@purs@lsticons[1]} ; + \node[rotate={90+0.5*(2*60+7.5+5*9+7.5+5*9)},scale={\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ({0.5*(2*60+7.5+4*9+7.5+5*9)}:{\triv@purs@rayon-0.5*\triv@purs@hautcases}) {\triv@purs@lsticons[6]} ; + %secteur3 + \node[rotate={90+0.5*(2*120+7.5+0*9+7.5+1*9)},scale={\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ({0.5*(2*120+7.5+7.5+1*9)}:{\triv@purs@rayon-0.5*\triv@purs@hautcases}) {\triv@purs@lsticons[6]} ; + \node[rotate={90+0.5*(2*120+7.5+1*9+7.5+2*9)},scale={\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ({0.5*(2*120+7.5+1*9+7.5+2*9)}:{\triv@purs@rayon-0.5*\triv@purs@hautcases}) {\triv@purs@lsticons[5]} ; + \node[rotate={90+0.5*(2*120+7.5+3*9+7.5+4*9)},scale={\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ({0.5*(2*120+7.5+3*9+7.5+4*9)}:{\triv@purs@rayon-0.5*\triv@purs@hautcases}) {\triv@purs@lsticons[2]} ; + \node[rotate={90+0.5*(2*120+7.5+5*9+7.5+5*9)},scale={\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ({0.5*(2*120+7.5+4*9+7.5+5*9)}:{\triv@purs@rayon-0.5*\triv@purs@hautcases}) {\triv@purs@lsticons[1]} ; + %secteur4 + \node[rotate={90+0.5*(2*180+7.5+0*9+7.5+1*9)},scale={\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ({0.5*(2*180+7.5+7.5+1*9)}:{\triv@purs@rayon-0.5*\triv@purs@hautcases}) {\triv@purs@lsticons[1]} ; + \node[rotate={90+0.5*(2*180+7.5+1*9+7.5+2*9)},scale={\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ({0.5*(2*180+7.5+1*9+7.5+2*9)}:{\triv@purs@rayon-0.5*\triv@purs@hautcases}) {\triv@purs@lsticons[6]} ; + \node[rotate={90+0.5*(2*180+7.5+3*9+7.5+4*9)},scale={\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ({0.5*(2*180+7.5+3*9+7.5+4*9)}:{\triv@purs@rayon-0.5*\triv@purs@hautcases}) {\triv@purs@lsticons[3]} ; + \node[rotate={90+0.5*(2*180+7.5+5*9+7.5+5*9)},scale={\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ({0.5*(2*180+7.5+4*9+7.5+5*9)}:{\triv@purs@rayon-0.5*\triv@purs@hautcases}) {\triv@purs@lsticons[2]} ; + %secteur5 + \node[rotate={90+0.5*(2*240+7.5+0*9+7.5+1*9)},scale={\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ({0.5*(2*240+7.5+7.5+1*9)}:{\triv@purs@rayon-0.5*\triv@purs@hautcases}) {\triv@purs@lsticons[2]} ; + \node[rotate={90+0.5*(2*240+7.5+1*9+7.5+2*9)},scale={\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ({0.5*(2*240+7.5+1*9+7.5+2*9)}:{\triv@purs@rayon-0.5*\triv@purs@hautcases}) {\triv@purs@lsticons[1]} ; + \node[rotate={90+0.5*(2*240+7.5+3*9+7.5+4*9)},scale={\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ({0.5*(2*240+7.5+3*9+7.5+4*9)}:{\triv@purs@rayon-0.5*\triv@purs@hautcases}) {\triv@purs@lsticons[4]} ; + \node[rotate={90+0.5*(2*240+7.5+5*9+7.5+5*9)},scale={\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ({0.5*(2*240+7.5+4*9+7.5+5*9)}:{\triv@purs@rayon-0.5*\triv@purs@hautcases}) {\triv@purs@lsticons[3]} ; + %secteur6 + \node[rotate={90+0.5*(2*300+7.5+0*9+7.5+1*9)},scale={\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ({0.5*(2*300+7.5+7.5+1*9)}:{\triv@purs@rayon-0.5*\triv@purs@hautcases}) {\triv@purs@lsticons[3]} ; + \node[rotate={90+0.5*(2*300+7.5+1*9+7.5+2*9)},scale={\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ({0.5*(2*300+7.5+1*9+7.5+2*9)}:{\triv@purs@rayon-0.5*\triv@purs@hautcases}) {\triv@purs@lsticons[2]} ; + \node[rotate={90+0.5*(2*300+7.5+3*9+7.5+4*9)},scale={\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ({0.5*(2*300+7.5+3*9+7.5+4*9)}:{\triv@purs@rayon-0.5*\triv@purs@hautcases}) {\triv@purs@lsticons[5]} ; + \node[rotate={90+0.5*(2*300+7.5+5*9+7.5+5*9)},scale={\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ({0.5*(2*300+7.5+4*9+7.5+5*9)}:{\triv@purs@rayon-0.5*\triv@purs@hautcases}) {\triv@purs@lsticons[4]} ; + }% + {}% + + %les jokers + \ifboolKV[TrivPursEN]{Icons}% + {% + \ifboolKV[TrivPursEN]{Jokers}% + {% + \node[rotate=30,scale={\triv@purs@scaleicons*\triv@purs@hautcases}] at ({30}:{\triv@purs@rayon-0.5*\triv@purs@hautcases}) {\triv@purs@iconjok} ; + \node[rotate=90,scale={\triv@purs@scaleicons*\triv@purs@hautcases}] at ({90}:{\triv@purs@rayon-0.5*\triv@purs@hautcases}) {\triv@purs@iconjok} ; + \node[rotate=150,scale={\triv@purs@scaleicons*\triv@purs@hautcases}] at ({150}:{\triv@purs@rayon-0.5*\triv@purs@hautcases}) {\triv@purs@iconjok} ; + \node[rotate=210,scale={\triv@purs@scaleicons*\triv@purs@hautcases}] at ({210}:{\triv@purs@rayon-0.5*\triv@purs@hautcases}) {\triv@purs@iconjok} ; + \node[rotate=270,scale={\triv@purs@scaleicons*\triv@purs@hautcases}] at ({270}:{\triv@purs@rayon-0.5*\triv@purs@hautcases}) {\triv@purs@iconjok} ; + \node[rotate=330,scale={\triv@purs@scaleicons*\triv@purs@hautcases}] at ({330}:{\triv@purs@rayon-0.5*\triv@purs@hautcases}) {\triv@purs@iconjok} ; + }% + {}% + }% + {}% +} +\NewDocumentCommand\DrawBordersTrivialShort{ }{%OK Court + %les tracés des cases + \draw[EpTraits] (0,0) circle[radius=\triv@purs@rayon] ; + \draw[EpTraits] (0,0) circle[radius={\triv@purs@rayon-\triv@purs@hautcases}] ; + \foreach \i in {1,...,36}{% + \draw[EpTraits] (PB-\i)--(GB-\i) ; + } + \draw[EpTraits] (PB-1)--(OM-1)--(OM-6)--(PB-36) ; + \draw[EpTraits] (PB-6)--(OM-1)--(OM-2)--(PB-7) ; + \draw[EpTraits] (PB-12)--(OM-2)--(OM-3)--(PB-13) ; + \draw[EpTraits] (PB-18)--(OM-3)--(OM-4)--(PB-19) ; + \draw[EpTraits] (PB-24)--(OM-4)--(OM-5)--(PB-25) ; + \draw[EpTraits] (PB-30)--(OM-5)--(OM-6)--(PB-31) ; + \foreach \j in {1,...,\xinteval{\triv@purs@nbcat-2}}{% + \draw[EpTraits] (D-2-\j)--(D-3-\j) ; + \draw[EpTraits] (D-4-\j)--(D-5-\j) ; + \draw[EpTraits] (D-6-\j)--(D-7-\j) ; + \draw[EpTraits] (D-8-\j)--(D-9-\j) ; + \draw[EpTraits] (D-10-\j)--(D-11-\j) ; + \draw[EpTraits] (D-12-\j)--(D-1-\j) ; + }% +} + +\NewDocumentCommand\FillCamembersTrivialShort{ }{%numéro des camemberts, en partant de la droite + \ifboolKV[TrivPursEN]{Colors}% + {% + %Couleur du 1er camembert + \draw[EpTraits,fill={\triv@purs@lstcol[1]}] (PB-36)--(GB-36) arc ({-\triv@purs@anglecases}:{\triv@purs@anglecases}:{\triv@purs@rayon})--(PB-1) arc ({\triv@purs@anglecases}:{-\triv@purs@anglecases}:{\triv@purs@rayonint})--cycle ; + %Couleur du 2ème + \draw[EpTraits,fill={\triv@purs@lstcol[2]}] (PB-6)--(GB-6) arc ({7*\triv@purs@anglecases}:{9*\triv@purs@anglecases}:{\triv@purs@rayon})--(PB-7) arc ({9*\triv@purs@anglecases}:{7*\triv@purs@anglecases}:{\triv@purs@rayonint})--cycle ; + %Couleur du 3ème + \draw[EpTraits,fill={\triv@purs@lstcol[3]}] (PB-12)--(GB-12) arc ({15*\triv@purs@anglecases}:{17*\triv@purs@anglecases}:{\triv@purs@rayon})--(PB-13) arc ({17*\triv@purs@anglecases}:{15*\triv@purs@anglecases}:{\triv@purs@rayonint})--cycle ; + %Couleur du 4ème + \draw[EpTraits,fill={\triv@purs@lstcol[4]}] (PB-18)--(GB-18) arc ({23*\triv@purs@anglecases}:{25*\triv@purs@anglecases}:{\triv@purs@rayon})--(PB-19) arc ({25*\triv@purs@anglecases}:{23*\triv@purs@anglecases}:{\triv@purs@rayonint})--cycle ; + %Couleur du 5ème + \draw[EpTraits,fill={\triv@purs@lstcol[5]}] (PB-24)--(GB-24) arc ({31*\triv@purs@anglecases}:{33*\triv@purs@anglecases}:{\triv@purs@rayon})--(PB-25) arc ({33*\triv@purs@anglecases}:{31*\triv@purs@anglecases}:{\triv@purs@rayonint})--cycle ; + %Couleur du 6ème + \draw[EpTraits,fill={\triv@purs@lstcol[6]}] (PB-30)--(GB-30) arc ({39*\triv@purs@anglecases}:{41*\triv@purs@anglecases}:{\triv@purs@rayon})--(PB-31) arc ({41*\triv@purs@anglecases}:{39*\triv@purs@anglecases}:{\triv@purs@rayonint})--cycle ; + }% + {}% + %si on affiche les icones + \ifboolKV[TrivPursEN]{Icons}% + {% + \node[rotate={90+0*\triv@purs@anglecases},scale={1.5*\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ({0}:{\triv@purs@rayon-0.5*\triv@purs@hautcases}) {\triv@purs@lsticons[1]} ; + \node[rotate={90+8*\triv@purs@anglecases},scale={1.5*\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ({8*\triv@purs@anglecases}:{\triv@purs@rayon-0.5*\triv@purs@hautcases}) {\triv@purs@lsticons[2]} ; + \node[rotate={90+16*\triv@purs@anglecases},scale={1.5*\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ({16*\triv@purs@anglecases}:{\triv@purs@rayon-0.5*\triv@purs@hautcases}) {\triv@purs@lsticons[3]} ; + \node[rotate={90+24*\triv@purs@anglecases},scale={1.5*\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ({24*\triv@purs@anglecases}:{\triv@purs@rayon-0.5*\triv@purs@hautcases}) {\triv@purs@lsticons[4]} ; + \node[rotate={90+32*\triv@purs@anglecases},scale={1.5*\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ({32*\triv@purs@anglecases}:{\triv@purs@rayon-0.5*\triv@purs@hautcases}) {\triv@purs@lsticons[5]} ; + \node[rotate={90+40*\triv@purs@anglecases},scale={1.5*\triv@purs@scaleicons*\triv@purs@hautcases},anchor=center] at ({40*\triv@purs@anglecases}:{\triv@purs@rayon-0.5*\triv@purs@hautcases}) {\triv@purs@lsticons[6]} ; + }% + {}% +} + %====CREATION \NewDocumentCommand\BoardTrivialPursuit{ O{} D<>{} }{% \restoreKV[TrivPursEN]% revenir au valeurs par défaut @@ -848,18 +1578,35 @@ \useasboundingbox (0,0) circle[radius={\triv@purs@rayon}] ; %création \begin{scope}[rotate=\triv@purs@rotate] - %les nœuds OK - \CreationNodesTrivial - %test avec centre OK - \ifboolKV[TrivPursEN]{Center}{\FillCenterTrivial}{} - %camemberts OK - \FillCamembersTrivial - %cases OK - \FillCellsBorder - %bordures - \DrawBordersTrivial - %logo central - \ifboolKV[TrivPursEN]{Logo}{\LogoCenterTrivialPursuit}{} + \ifboolKV[TrivPursEN]{ShortVersion}% + {% + %les nœuds OK + \CreationNodesTrivialShort + %test avec centre OK + \ifboolKV[TrivPursEN]{Center}{\FillCenterTrivial}{} + %camemberts OK + \FillCamembersTrivialShort + %cases OK + \FillCellsBorderShort + %bordures + \DrawBordersTrivialShort + %logo central + \ifboolKV[TrivPursEN]{Logo}{\LogoCenterTrivialPursuit}{} + }% + {% + %les nœuds OK + \CreationNodesTrivial + %test avec centre OK + \ifboolKV[TrivPursEN]{Center}{\FillCenterTrivial}{} + %camemberts OK + \FillCamembersTrivial + %cases OK + \FillCellsBorder + %bordures + \DrawBordersTrivial + %logo central + \ifboolKV[TrivPursEN]{Logo}{\LogoCenterTrivialPursuit}{} + }% \end{scope} \end{tikzpicture}% } diff --git a/graphics/pgf/contrib/wheelchart/README.md b/graphics/pgf/contrib/wheelchart/README.md index ec414f3440..df9f81a74d 100644 --- a/graphics/pgf/contrib/wheelchart/README.md +++ b/graphics/pgf/contrib/wheelchart/README.md @@ -2,9 +2,11 @@ ## Diagrams with circular or other shapes using Ti*k*Z and LaTeX3 -Version 3.0 (2024/03/08) +Version 4.0 (2024/07/28) -This package is based on the package [Ti*k*Z](https://ctan.org/pkg/pgf) and can be used to draw various kinds of diagrams such as a bar chart, doughnut chart, infographic, pie chart, ring chart, square chart, sunburst chart, waffle chart and wheel chart with Ti*k*Z. It provides several options to customize the diagrams. It is also possible to specify a plot for the shape of the chart. Furthermore a legend can be added and the table of contents can be displayed as one of these diagrams. +This package is based on the package [Ti*k*Z](https://ctan.org/pkg/pgf) and can be used to draw various kinds of diagrams such as bar charts, doughnut charts, infographics, pie charts, ring charts, square charts, sunburst charts, waffle charts and wheel charts. + +It provides several options to customize the diagrams. It is also possible to specify a plot for the shape of the chart. Furthermore a legend can be added and the table of contents can be displayed as one of these diagrams. %% README.md %% Copyright 2022-2024 Matthias Floré diff --git a/graphics/pgf/contrib/wheelchart/wheelchart.pdf b/graphics/pgf/contrib/wheelchart/wheelchart.pdf Binary files differindex 2cfa0dd1be..808551f33c 100644 --- a/graphics/pgf/contrib/wheelchart/wheelchart.pdf +++ b/graphics/pgf/contrib/wheelchart/wheelchart.pdf diff --git a/graphics/pgf/contrib/wheelchart/wheelchart.sty b/graphics/pgf/contrib/wheelchart/wheelchart.sty index e2c8543976..21e232b099 100644 --- a/graphics/pgf/contrib/wheelchart/wheelchart.sty +++ b/graphics/pgf/contrib/wheelchart/wheelchart.sty @@ -18,7 +18,7 @@ \NeedsTeXFormat{LaTeX2e} \RequirePackage{tikz} \usetikzlibrary{calc} -\ProvidesExplPackage{wheelchart}{2024/03/08}{3.0}{Diagrams with circular or other shapes using TikZ and LaTeX3} +\ProvidesExplPackage{wheelchart}{2024/07/28}{4.0}{Diagrams with circular or other shapes using TikZ and LaTeX3} %%> \subsection{Variables} @@ -59,6 +59,8 @@ \fp_const:Nn \c__wheelchart_arc_data_end_factor_left_fp { 1 } \fp_const:Nn \c__wheelchart_arc_data_end_factor_right_fp { 0 } \fp_new:N \l__wheelchart_arc_data_line_sep_factor_fp +\fp_new:N \l__wheelchart_arc_data_lines_pos_fp +\fp_new:N \l__wheelchart_arc_data_lines_shift_fp \fp_new:N \l__wheelchart_arc_data_pos_fp \fp_new:N \l__wheelchart_arc_data_radius_plot_false_fp \fp_new:N \l__wheelchart_arc_data_sep_fp @@ -168,6 +170,9 @@ \int_new:N \l__wheelchart_lines_ext_top_dir_int \int_new:N \l__wheelchart_max_list_items_int +\regex_const:Nn \c__wheelchart_braces_regex { \{(.+)\} } +\regex_const:Nn \c__wheelchart_key_braces_regex { [\w\s]+\{(.+)\} } + \seq_new:N \l__wheelchart_arc_data_seq \seq_new:N \l__wheelchart_discrete_coefficients_first_seq \seq_new:N \l__wheelchart_discrete_coefficients_second_seq @@ -180,8 +185,8 @@ { sign ( \l__wheelchart_arc_data_dir_fp ) * ( - \cs:w c__wheelchart_arc_data_start_factor_\l__wheelchart_arc_data_align_tl _fp\cs_end: - + \cs:w c__wheelchart_arc_data_end_factor_\l__wheelchart_arc_data_align_tl _fp\cs_end: + \cs:w c__wheelchart_arc_data_start_factor_\l__wheelchart_arc_data_align_tl _fp \cs_end: + + \cs:w c__wheelchart_arc_data_end_factor_\l__wheelchart_arc_data_align_tl _fp \cs_end: ) } \tl_new:N \l__wheelchart_arc_data_align_tl @@ -262,7 +267,7 @@ \cs_new_protected:Npn \__wheelchart_caption_and_title:nnnnn #1#2#3#4#5 { - \__wheelchart_if_text:nn {#1} + \__wheelchart_if_text:nnn {#1} { o } { \node [ anchor = #2 , align = #3 , / wheelchart / #1_style ] at ( $ (#4) + ( 0 , { #5 * ( \pgfkeysvalueof { / wheelchart / #1~sep } ) } ) $ ) @@ -282,12 +287,12 @@ { \fp_eval:n { - ( 1 - (#1) ) * \cs:w g__wheelchart_slice_inner_start_angle_\WCcount _fp\cs_end: - + (#1) * \cs:w g__wheelchart_slice_inner_end_angle_\WCcount _fp\cs_end: + ( 1 - (#1) ) * \cs:w g__wheelchart_slice_inner_start_angle_\WCcount _fp \cs_end: + + (#1) * \cs:w g__wheelchart_slice_inner_end_angle_\WCcount _fp \cs_end: + \l__wheelchart_counter_or_clockwise_fp * (#2) } } - { \fp_eval:n { \cs:w g__wheelchart_inner_radius_\WCcount _fp\cs_end: - (#4) } } + { \fp_eval:n { \cs:w g__wheelchart_inner_radius_\WCcount _fp \cs_end: - (#4) } } ) ! { \fp_eval:n {#3} } ! ( @@ -295,12 +300,12 @@ { \fp_eval:n { - ( 1 - (#1) ) * \cs:w g__wheelchart_slice_outer_start_angle_\WCcount _fp\cs_end: - + (#1) * \cs:w g__wheelchart_slice_outer_end_angle_\WCcount _fp\cs_end: + ( 1 - (#1) ) * \cs:w g__wheelchart_slice_outer_start_angle_\WCcount _fp \cs_end: + + (#1) * \cs:w g__wheelchart_slice_outer_end_angle_\WCcount _fp \cs_end: + \l__wheelchart_counter_or_clockwise_fp * (#2) } } - { \fp_eval:n { \cs:w g__wheelchart_outer_radius_\WCcount _fp\cs_end: + (#4) } } + { \fp_eval:n { \cs:w g__wheelchart_outer_radius_\WCcount _fp \cs_end: + (#4) } } ) $%note the () around the #i's to keep these contents together } @@ -374,10 +379,10 @@ \path let \p { l__wheelchart_def_angle_1 } = \__wheelchart_point_plot_true:nnnnn { \WCcount } {#1} {#2} { 0 } - { \fp_eval:n { (#4) + 1 / \cs:w g__wheelchart_samples_\WCcount _fp\cs_end: } } , + { \fp_eval:n { (#4) + 1 / \cs:w g__wheelchart_samples_\WCcount _fp \cs_end: } } , \p { l__wheelchart_def_angle_2 } = \__wheelchart_point_plot_true:nnnnn { \WCcount } {#1} {#2} { 1 } - { \fp_eval:n { (#4) + 1 / \cs:w g__wheelchart_samples_\WCcount _fp\cs_end: } } + { \fp_eval:n { (#4) + 1 / \cs:w g__wheelchart_samples_\WCcount _fp \cs_end: } } in [ / utils / exec = { \__wheelchart_def_angle_aux: } ] ; } @@ -392,10 +397,10 @@ { ( 1 - (#2) ) * ( - \cs:w g__wheelchart_slice_outer_start_angle_#1_fp\cs_end: - - \cs:w g__wheelchart_slice_inner_start_angle_#1_fp\cs_end: + \cs:w g__wheelchart_slice_outer_start_angle_#1_fp \cs_end: + - \cs:w g__wheelchart_slice_inner_start_angle_#1_fp \cs_end: ) - + (#2) * ( \cs:w g__wheelchart_slice_outer_end_angle_#1_fp\cs_end: - \cs:w g__wheelchart_slice_inner_end_angle_#1_fp\cs_end: ) + + (#2) * ( \cs:w g__wheelchart_slice_outer_end_angle_#1_fp \cs_end: - \cs:w g__wheelchart_slice_inner_end_angle_#1_fp \cs_end: ) } \cs_new:Npn \__wheelchart_def_angle_plot_false:nnnnn #1#2#3#4#5 @@ -410,11 +415,11 @@ ( sqrt ( - ( \cs:w g__wheelchart_outer_radius_#1_fp\cs_end: + \cs:w g__wheelchart_inner_radius_#1_fp\cs_end: ) ^ 2 - - \cs:w g__wheelchart_outer_radius_#1_fp\cs_end: * \cs:w g__wheelchart_inner_radius_#1_fp\cs_end: * + ( \cs:w g__wheelchart_outer_radius_#1_fp \cs_end: + \cs:w g__wheelchart_inner_radius_#1_fp \cs_end: ) ^ 2 + - \cs:w g__wheelchart_outer_radius_#1_fp \cs_end: * \cs:w g__wheelchart_inner_radius_#1_fp \cs_end: * ( 2 + 2 * cosd ( \__wheelchart_def_angle_plot_false_aux_angle:nn {#1} {#2} ) - + \cs:w g__wheelchart_outer_radius_#1_fp\cs_end: * \cs:w g__wheelchart_inner_radius_#1_fp\cs_end: + + \cs:w g__wheelchart_outer_radius_#1_fp \cs_end: * \cs:w g__wheelchart_inner_radius_#1_fp \cs_end: * ( ( @@ -425,25 +430,25 @@ ) ) ) - + \cs:w g__wheelchart_inner_radius_#1_fp\cs_end: * + + \cs:w g__wheelchart_inner_radius_#1_fp \cs_end: * ( - \cs:w g__wheelchart_inner_radius_#1_fp\cs_end: - - \cs:w g__wheelchart_outer_radius_#1_fp\cs_end: + \cs:w g__wheelchart_inner_radius_#1_fp \cs_end: + - \cs:w g__wheelchart_outer_radius_#1_fp \cs_end: * cosd ( \__wheelchart_def_angle_plot_false_aux_angle:nn {#1} {#2} ) ) / \__wheelchart_def_radius:nnn {#1} {#4} {#5} ) - * \cs:w g__wheelchart_outer_radius_#1_fp\cs_end: * sind ( \__wheelchart_def_angle_plot_false_aux_angle:nn {#1} {#2} ) + * \cs:w g__wheelchart_outer_radius_#1_fp \cs_end: * sind ( \__wheelchart_def_angle_plot_false_aux_angle:nn {#1} {#2} ) / ( - ( \cs:w g__wheelchart_outer_radius_#1_fp\cs_end: + \cs:w g__wheelchart_inner_radius_#1_fp\cs_end: ) ^ 2 - - 2 * \cs:w g__wheelchart_outer_radius_#1_fp\cs_end: * \cs:w g__wheelchart_inner_radius_#1_fp\cs_end: + ( \cs:w g__wheelchart_outer_radius_#1_fp \cs_end: + \cs:w g__wheelchart_inner_radius_#1_fp \cs_end: ) ^ 2 + - 2 * \cs:w g__wheelchart_outer_radius_#1_fp \cs_end: * \cs:w g__wheelchart_inner_radius_#1_fp \cs_end: * ( 1 + cosd ( \__wheelchart_def_angle_plot_false_aux_angle:nn {#1} {#2} ) ) ) ) } - + ( 1 - (#2) ) * ( \cs:w g__wheelchart_slice_inner_start_angle_#1_fp\cs_end: ) - + (#2) * ( \cs:w g__wheelchart_slice_inner_end_angle_#1_fp\cs_end: ) + + ( 1 - (#2) ) * ( \cs:w g__wheelchart_slice_inner_start_angle_#1_fp \cs_end: ) + + (#2) * ( \cs:w g__wheelchart_slice_inner_end_angle_#1_fp \cs_end: ) + \l__wheelchart_counter_or_clockwise_fp * (#3) } } @@ -451,7 +456,7 @@ \cs_new_protected:Npn \__wheelchart_def_coord:nnnn #1#2#3#4 { \path let \p { l__wheelchart_coord } = - ( \cs:w __wheelchart_#2_plot:nn\cs_end: {#4} { \fp_use:c { g__wheelchart_#2_radius_\WCcount _fp } } ) + ( \cs:w __wheelchart_#2_plot:nn \cs_end: {#4} { \fp_use:c { g__wheelchart_#2_radius_\WCcount _fp } } ) in [ / utils / exec = @@ -484,11 +489,11 @@ < \l__wheelchart_gap_fp ? - min ( \cs:w g__wheelchart_abs_half_angle_minus_new_angle_\WCcount _fp\cs_end: , \l__wheelchart_gap_max_angle_def_fp ) + min ( \cs:w g__wheelchart_abs_half_angle_minus_new_angle_\WCcount _fp \cs_end: , \l__wheelchart_gap_max_angle_def_fp ) : asind ( min ( \l__wheelchart_gap_fp / ( (#2) + 1 - sign (#2) ) , 1 ) ) + \l__wheelchart_gap_polar_fp - %note the min ( ... , 1 ) such that the asind is always defined - %also note the + 1 - sign (#2) such that the denominator is also nonzero if #2 = 0 + %note the min ( ... , 1 ) so that the asind is always defined + %also note the + 1 - sign (#2) so that the denominator is also nonzero if #2 = 0 } } @@ -516,7 +521,7 @@ : \g__wheelchart_new_angle_fp - \g__wheelchart_angle_fp ) - / \cs:w g__wheelchart_samples_1_fp\cs_end: + / \cs:w g__wheelchart_samples_1_fp \cs_end: } \path let \p { l__wheelchart_slices_orientation_1 } = @@ -579,8 +584,8 @@ { \fp_eval:n { - ( 1 - (#2) ) * ( \cs:w g__wheelchart_inner_radius_#1_fp\cs_end: - (#3) ) - + (#2) * ( \cs:w g__wheelchart_outer_radius_#1_fp\cs_end: + (#3) ) + ( 1 - (#2) ) * ( \cs:w g__wheelchart_inner_radius_#1_fp \cs_end: - (#3) ) + + (#2) * ( \cs:w g__wheelchart_outer_radius_#1_fp \cs_end: + (#3) ) } } @@ -591,26 +596,26 @@ { \fp_gset:cn { g__wheelchart_slice_#1_#2_angle_\WCcount _fp } { - \cs:w g__wheelchart_#3angle_fp\cs_end: + + \cs:w g__wheelchart_#3angle_fp \cs_end: + ( \l__wheelchart_counter_or_clockwise_fp * - ( (#4) * \cs:w g__wheelchart_#1_gap_\WCcount _fp\cs_end: + \cs:w l__wheelchart_slices_#1_#2_angle_shift_fp\cs_end: ) + ( (#4) * \cs:w g__wheelchart_#1_gap_\WCcount _fp \cs_end: + \cs:w l__wheelchart_slices_#1_#2_angle_shift_fp \cs_end: ) ) } } { \fp_gset:cn { g__wheelchart_slice_#1_#2_angle_\WCcount _fp } { - \cs:w g__wheelchart_#3angle_fp\cs_end: + + \cs:w g__wheelchart_#3angle_fp \cs_end: + ( \l__wheelchart_counter_or_clockwise_fp * ( - (#4) * \cs:w g__wheelchart_#1_gap_\WCcount _fp\cs_end: + \cs:w l__wheelchart_slices_#1_#2_angle_shift_fp\cs_end: + (#4) * \cs:w g__wheelchart_#1_gap_\WCcount _fp \cs_end: + \cs:w l__wheelchart_slices_#1_#2_angle_shift_fp \cs_end: - asind ( - \cs:w g__wheelchart_inner_radius_\WCcount _fp\cs_end: - * sind ( \cs:w l__wheelchart_slices_#1_#2_angle_shift_fp\cs_end: ) - / \cs:w g__wheelchart_outer_radius_\WCcount _fp\cs_end: + \cs:w g__wheelchart_inner_radius_\WCcount _fp \cs_end: + * sind ( \cs:w l__wheelchart_slices_#1_#2_angle_shift_fp \cs_end: ) + / \cs:w g__wheelchart_outer_radius_\WCcount _fp \cs_end: ) ) ) @@ -620,8 +625,8 @@ \cs_new_protected:Npn \__wheelchart_def_slice_keys:n #1 { - {%note the double {{...}} such that the contents is in a group - %such that pgfkeys which are specific to the current slice are local for this slice + {%note the double braces {{...}} so that the contents is in a group + %and in particular, pgfkeys which are specific to the current slice are local for this slice \clist_if_in:NVT \l__wheelchart_slice_range_local_clist \WCcount { \pgfkeys { / wheelchart , slice_final /. expanded = { \exp_not:v { l__wheelchart_slice_\WCcount _keys_clist } } } @@ -663,24 +668,24 @@ %g__wheelchart_WCcount_counter to be larger than \WCtotalcount \tl_build_end:N \WClegend \cs_set:Npn \WCcount { \theg__wheelchart_WCcount_counter } - \cs_set:Npn \WCpercentage { \cs:w l__wheelchart_WCpercentage_\theg__wheelchart_WCcount_counter\cs_end: } - \cs_set:Npn \WCpercentagerounded { \cs:w l__wheelchart_WCpercentagerounded_\theg__wheelchart_WCcount_counter\cs_end: } + \cs_set:Npn \WCpercentage { \cs:w l__wheelchart_WCpercentage_\theg__wheelchart_WCcount_counter \cs_end: } + \cs_set:Npn \WCpercentagerounded { \cs:w l__wheelchart_WCpercentagerounded_\theg__wheelchart_WCcount_counter \cs_end: } \str_if_eq:eeTF { \l__wheelchart_type_tl } { etoc } { \cs_set:Npn \WCetocthelinkedname - { \cs:w g__wheelchart_etoc_item_\l__wheelchart_etoc_name_tl _the_linked_name_\theg__wheelchart_WCcount_counter\cs_end: } + { \cs:w g__wheelchart_etoc_item_\l__wheelchart_etoc_name_tl _the_linked_name_\theg__wheelchart_WCcount_counter \cs_end: } \cs_set:Npn \WCetocthelinkednumber - { \cs:w g__wheelchart_etoc_item_\l__wheelchart_etoc_name_tl _the_linked_number_\theg__wheelchart_WCcount_counter\cs_end: } + { \cs:w g__wheelchart_etoc_item_\l__wheelchart_etoc_name_tl _the_linked_number_\theg__wheelchart_WCcount_counter \cs_end: } \cs_set:Npn \WCetocthelinkedpage - { \cs:w g__wheelchart_etoc_item_\l__wheelchart_etoc_name_tl _the_linked_page_\theg__wheelchart_WCcount_counter\cs_end: } + { \cs:w g__wheelchart_etoc_item_\l__wheelchart_etoc_name_tl _the_linked_page_\theg__wheelchart_WCcount_counter \cs_end: } \cs_set:Npn \WCetocthename - { \cs:w g__wheelchart_etoc_item_\l__wheelchart_etoc_name_tl _the_name_\theg__wheelchart_WCcount_counter\cs_end: } + { \cs:w g__wheelchart_etoc_item_\l__wheelchart_etoc_name_tl _the_name_\theg__wheelchart_WCcount_counter \cs_end: } \cs_set:Npn \WCetocthenumber - { \cs:w g__wheelchart_etoc_item_\l__wheelchart_etoc_name_tl _the_number_\theg__wheelchart_WCcount_counter\cs_end: } + { \cs:w g__wheelchart_etoc_item_\l__wheelchart_etoc_name_tl _the_number_\theg__wheelchart_WCcount_counter \cs_end: } \cs_set:Npn \WCetocthepage - { \cs:w g__wheelchart_etoc_item_\l__wheelchart_etoc_name_tl _the_page_\theg__wheelchart_WCcount_counter\cs_end: } + { \cs:w g__wheelchart_etoc_item_\l__wheelchart_etoc_name_tl _the_page_\theg__wheelchart_WCcount_counter \cs_end: } \cs_set:Npn \WCetocthenumberofpages - { \cs:w g__wheelchart_etoc_item_\l__wheelchart_etoc_name_tl _the_number_of_pages_\theg__wheelchart_WCcount_counter\cs_end: } + { \cs:w g__wheelchart_etoc_item_\l__wheelchart_etoc_name_tl _the_number_of_pages_\theg__wheelchart_WCcount_counter \cs_end: } } { \clist_if_empty:NTF \l__wheelchart_header_clist @@ -688,7 +693,7 @@ \int_step_inline:nn { \l__wheelchart_max_list_items_int } { \cs_set:cpn { WCvar\int_to_Alph:n {##1} } - { \cs:w l__wheelchart_item_WCvar\int_to_Alph:n {##1}_\theg__wheelchart_WCcount_counter\cs_end: } + { \cs:w l__wheelchart_item_WCvar\int_to_Alph:n {##1}_\theg__wheelchart_WCcount_counter \cs_end: } } } { @@ -717,13 +722,13 @@ ( atand ( - \cs:w g__wheelchart_#3_y_fp\cs_end: - \cs:w g__wheelchart_#4_y_fp\cs_end: , - \cs:w g__wheelchart_#3_x_fp\cs_end: - \cs:w g__wheelchart_#4_x_fp\cs_end: + \cs:w g__wheelchart_#3_y_fp \cs_end: - \cs:w g__wheelchart_#4_y_fp \cs_end: , + \cs:w g__wheelchart_#3_x_fp \cs_end: - \cs:w g__wheelchart_#4_x_fp \cs_end: ) - atand ( - \cs:w g__wheelchart_#1_y_fp\cs_end: - \cs:w g__wheelchart_#2_y_fp\cs_end: , - \cs:w g__wheelchart_#1_x_fp\cs_end: - \cs:w g__wheelchart_#2_x_fp\cs_end: + \cs:w g__wheelchart_#1_y_fp \cs_end: - \cs:w g__wheelchart_#2_y_fp \cs_end: , + \cs:w g__wheelchart_#1_x_fp \cs_end: - \cs:w g__wheelchart_#2_x_fp \cs_end: ) ) } @@ -969,9 +974,9 @@ \__wheelchart_for_loop:n { \pgfkeysvalueof { / wheelchart / before~slices } - \int_step_inline:nn { \fp_eval:n { round ( \cs:w g__wheelchart_value_\WCcount _fp\cs_end: ) } } - %note that \fp_eval:n { round ( ... ) } is necessary even when the value is an integer because if parse=pgfmath - %then .0 is added and then \int_step_inline:nn { \cs:w g__wheelchart_value_\WCcount _fp\cs_end: } would give the messages + \int_step_inline:nn { \fp_eval:n { round ( \cs:w g__wheelchart_value_\WCcount _fp \cs_end: ) } } + %note that \fp_eval:n { round ( ... ) } is necessary even when the value is an integer because pgfmath + %could have added .0 and then \int_step_inline:nn { \cs:w g__wheelchart_value_\WCcount _fp \cs_end: } would give the messages %Missing character: There is no . in font nullfont! Missing character: There is no 0 in font nullfont! { \int_gincr:N \g__wheelchart_discrete_count_int @@ -1082,7 +1087,7 @@ \cs_set:Npe \WCmidangle { \fp_use:c { g__wheelchart_WCmidangle_\WCcount _fp } } \pgfkeysvalueof { / wheelchart / for~loop~start }%this must be placed after the definition of macros such as \WCpercentage - %such that these macros can be used in the key for loop start + %so that these macros can be used in the key for loop start \begin { scope } [ shift = { ( \WCmidangle \c_colon_str \fp_use:c { g__wheelchart_explode_\WCcount _fp } ) } , @@ -1161,16 +1166,21 @@ \fp_gset:cn { g__wheelchart_#1_\WCcount _fp } { \pgfmathresult } } -\cs_new_protected:Npn \__wheelchart_if_text:nn #1#2 +\cs_new_protected:Npn \__wheelchart_if_text:nnn #1#2#3 { %https://tex.stackexchange.com/questions/42280/expand-away-empty-macros-within-ifthenelse %https://tex.stackexchange.com/questions/44919/proper-way-to-detect-empty-blank-text \begin { pgfinterruptpicture } + \DeclareDocumentCommand \\ {#2} {} + %for arc data, \\ is used with seq_set_split so has no optional argument thus then #2 is empty + %otherwise, #2 is o + %no s because an optional star does not apply in a node + %no ! because a space between \\ and its optional argument is allowed in a node %https://tex.stackexchange.com/questions/459853/savebox-within-tikzpicture-results-in-an-empty-savebox \hbox_gset:Nn \g__wheelchart_if_text_box { \pgfkeysvalueof { / wheelchart / #1 } } \end { pgfinterruptpicture } \dim_compare:nNnT { \box_wd:N \g__wheelchart_if_text_box } > { 0 pt } - { {#2} } + { {#3} } } \cs_new_protected:Npn \__wheelchart_initial:n #1 @@ -1182,7 +1192,7 @@ \tl_if_empty:nTF {#1} { \cs_set:Npn \WCtotalcount { 0 } } { - \cs:w seq_set_split:Ne\l__wheelchart_expand_list_tl\cs_end: + \cs:w seq_set_split:Ne\l__wheelchart_expand_list_tl \cs_end: \l__wheelchart_list_seq { \pgfkeysvalueof { / wheelchart / separator~rows } } {#1} @@ -1190,7 +1200,7 @@ \int_zero:N \l__wheelchart_max_list_items_int \seq_map_indexed_inline:Nn \l__wheelchart_list_seq { - \cs:w seq_set_split:Ne\l__wheelchart_expand_list_items_tl\cs_end: + \cs:w seq_set_split:Ne\l__wheelchart_expand_list_items_tl \cs_end: \l__wheelchart_list_items_seq { \pgfkeysvalueof { / wheelchart / separator~columns } } {##2} @@ -1245,7 +1255,7 @@ \etocsetnexttocdepth { -1 }%only for the next toc \etocsetstyle { \l__wheelchart_etoc_level_tl } {} {} { - \int_compare:nNnT { \cs:w g__wheelchart_etoc_item_\l__wheelchart_etoc_name_tl _count_int\cs_end: } > { 0 } + \int_compare:nNnT { \cs:w g__wheelchart_etoc_item_\l__wheelchart_etoc_name_tl _count_int \cs_end: } > { 0 } { \cs_gset:cpe { @@ -1304,7 +1314,7 @@ {} \int_gzero_new:c { g__wheelchart_etoc_item_\l__wheelchart_etoc_name_tl _count_int } \pgfkeysvalueof { / wheelchart / etoc~code } - \int_compare:nNnT { \cs:w g__wheelchart_etoc_item_\l__wheelchart_etoc_name_tl _count_int\cs_end: } > { 0 } + \int_compare:nNnT { \cs:w g__wheelchart_etoc_item_\l__wheelchart_etoc_name_tl _count_int \cs_end: } > { 0 } { \cs_gset:cpe { @@ -1331,32 +1341,32 @@ { \__wheelchart_def_slice_keys:n { \__wheelchart_gdef_count_fp:nn { value } { value } } - \cs_set:Npe \WCtotalnum { \fp_eval:n { \WCtotalnum + \cs:w g__wheelchart_value_\WCcount _fp\cs_end: } } + \cs_set:Npe \WCtotalnum { \fp_eval:n { \WCtotalnum + \cs:w g__wheelchart_value_\WCcount _fp \cs_end: } } } \int_step_inline:nn { \WCtotalcount } { \cs_set:cpe { l__wheelchart_WCpercentage_##1 } - { \fp_eval:n { \cs:w g__wheelchart_value_##1_fp\cs_end: / ( \WCtotalnum / 100 ) } } + { \fp_eval:n { \cs:w g__wheelchart_value_##1_fp \cs_end: / ( \WCtotalnum / 100 ) } } \cs_set:cpe { l__wheelchart_WCpercentagerounded_##1 } - { \fp_eval:n { round ( \cs:w l__wheelchart_WCpercentage_##1\cs_end: , \pgfkeysvalueof { / wheelchart / perc~precision } ) } } + { \fp_eval:n { round ( \cs:w l__wheelchart_WCpercentage_##1 \cs_end: , \pgfkeysvalueof { / wheelchart / perc~precision } ) } } } } \cs_new_protected:Npn \__wheelchart_inner_and_wheel_data:n #1 { - \__wheelchart_if_text:nn { #1~data } + \__wheelchart_if_text:nnn { #1~data } { o } { \__wheelchart_def_fp:nn { #1_data_angle_pos } { #1~data~angle~pos } \__wheelchart_def_fp:nn { #1_data_angle_shift } { #1~data~angle~shift } \__wheelchart_def_fp:nn { #1_data_pos } { #1~data~pos } \__wheelchart_def_fp:nn { #1_data_sep } { #1~data~sep } \node [ align = left , / wheelchart / #1_data_style ] at - \cs:w __wheelchart_point_plot_\bool_to_str:N \l__wheelchart_plot_bool :nnnnn\cs_end: + \cs:w __wheelchart_point_plot_\bool_to_str:N \l__wheelchart_plot_bool :nnnnn \cs_end: { \WCcount } - { \cs:w l__wheelchart_#1_data_angle_pos_fp\cs_end: } - { \cs:w l__wheelchart_#1_data_angle_shift_fp\cs_end: } - { \cs:w l__wheelchart_#1_data_pos_fp\cs_end: } - { \cs:w l__wheelchart_#1_data_sep_fp\cs_end: } + { \cs:w l__wheelchart_#1_data_angle_pos_fp \cs_end: } + { \cs:w l__wheelchart_#1_data_angle_shift_fp \cs_end: } + { \cs:w l__wheelchart_#1_data_pos_fp \cs_end: } + { \cs:w l__wheelchart_#1_data_sep_fp \cs_end: } { \pgfkeysvalueof { / wheelchart / #1~data } } ; } } @@ -1366,13 +1376,13 @@ \cs_new_protected:Npn \__wheelchart_legend_append:nn #1#2 { - \tl_build_put_right:NV \WClegend \l__wheelchart_legend_row_tl%note the V specifier such that \WClegend can also be combined - %with an S column of the package siunitx and such that \WClegend can be used in a tblr environment of the package tabularray + \tl_build_put_right:NV \WClegend \l__wheelchart_legend_row_tl%note the V specifier so that \WClegend can also be combined + %with an S column of the package siunitx and so that \WClegend can be used in a tblr environment of the package tabularray %and then the option expand=\WClegend needs to be given to the tblr environment \tl_build_put_right:Nn \WClegend { \protect \setcounter { g__wheelchart_WCcount_counter } }%note the \protect for in case that %\WClegend would be parsed in a particular way %note that the counter g__wheelchart_WCcount_counter is defined globally and at the end of the previous \l__wheelchart_legend_row_tl - %such that this value is defined and has the right value at the start of the next \l__wheelchart_legend_row_tl + %so that this value is defined and has the right value at the start of the next \l__wheelchart_legend_row_tl %if \WClegend is used in a tblr environment of the package tabularray then \UseTblrLibrary{counter} is required \tl_build_put_right:Ne \WClegend { { \int_eval:n {#1} } } \tl_build_put_right:Nn \WClegend {#2} @@ -1414,8 +1424,8 @@ { atand ( - \cs:w g__wheelchart_#3_y_fp\cs_end: - \cs:w g__wheelchart_#4_y_fp\cs_end: , - \cs:w g__wheelchart_#3_x_fp\cs_end: - \cs:w g__wheelchart_#4_x_fp\cs_end: + \cs:w g__wheelchart_#3_y_fp \cs_end: - \cs:w g__wheelchart_#4_y_fp \cs_end: , + \cs:w g__wheelchart_#3_x_fp \cs_end: - \cs:w g__wheelchart_#4_x_fp \cs_end: ) } \fp_set:Nn \l__wheelchart_slices_arc_coord_fp @@ -1440,7 +1450,7 @@ ) : atand ( ( \l__wheelchart_slices_arc_A_fp - ( 1 / \l__wheelchart_slices_arc_A_fp ) ) / 2 ) - }%note the min ( \l__wheelchart_slices_arc_B_fp , 0 ) such that the acosd is always defined + }%note the min ( \l__wheelchart_slices_arc_B_fp , 0 ) so that the acosd is always defined } } ] @@ -1486,8 +1496,8 @@ * abs ( ( 1 / \l__wheelchart_slices_arc_A_fp ) + \l__wheelchart_slices_arc_A_fp ) * sqrt ( - ( \cs:w g__wheelchart_#3_x_fp\cs_end: - \cs:w g__wheelchart_#4_x_fp\cs_end: ) ^ 2 - + ( \cs:w g__wheelchart_#3_y_fp\cs_end: - \cs:w g__wheelchart_#4_y_fp\cs_end: ) ^ 2 + ( \cs:w g__wheelchart_#3_x_fp \cs_end: - \cs:w g__wheelchart_#4_x_fp \cs_end: ) ^ 2 + + ( \cs:w g__wheelchart_#3_y_fp \cs_end: - \cs:w g__wheelchart_#4_y_fp \cs_end: ) ^ 2 ) } } @@ -1539,11 +1549,11 @@ \fp_eval:n { ( - \cs:w g__wheelchart_#3_x_fp\cs_end: + \cs:w g__wheelchart_#4_x_fp\cs_end: + + \cs:w g__wheelchart_#3_x_fp \cs_end: + \cs:w g__wheelchart_#4_x_fp \cs_end: + ( \g__wheelchart_slices_orientation_fp * ( \l__wheelchart_slices_arrow_coord_fp - 1 ) * \l__wheelchart_slices_arrow_A_fp - * ( \cs:w g__wheelchart_#3_y_fp\cs_end: - \cs:w g__wheelchart_#4_y_fp\cs_end: ) + * ( \cs:w g__wheelchart_#3_y_fp \cs_end: - \cs:w g__wheelchart_#4_y_fp \cs_end: ) ) ) / 2 @@ -1552,11 +1562,11 @@ \fp_eval:n { ( - \cs:w g__wheelchart_#3_y_fp\cs_end: + \cs:w g__wheelchart_#4_y_fp\cs_end: + + \cs:w g__wheelchart_#3_y_fp \cs_end: + \cs:w g__wheelchart_#4_y_fp \cs_end: + ( \g__wheelchart_slices_orientation_fp * ( \l__wheelchart_slices_arrow_coord_fp - 1 ) * \l__wheelchart_slices_arrow_A_fp - * ( \cs:w g__wheelchart_#4_x_fp\cs_end: - \cs:w g__wheelchart_#3_x_fp\cs_end: ) + * ( \cs:w g__wheelchart_#4_x_fp \cs_end: - \cs:w g__wheelchart_#3_x_fp \cs_end: ) ) ) / 2 @@ -1593,10 +1603,10 @@ { \fp_eval:n { - ( 1 - (#1) / max ( round ( \cs:w g__wheelchart_value_\WCcount _fp\cs_end: ) , 1 ) ) - * \cs:w g__wheelchart_slice_#2_start_angle_\WCcount _fp\cs_end: - + (#1) * \cs:w g__wheelchart_slice_#2_end_angle_\WCcount _fp\cs_end: - / max ( round ( \cs:w g__wheelchart_value_\WCcount _fp\cs_end: ) , 1 ) + ( 1 - (#1) / max ( round ( \cs:w g__wheelchart_value_\WCcount _fp \cs_end: ) , 1 ) ) + * \cs:w g__wheelchart_slice_#2_start_angle_\WCcount _fp \cs_end: + + (#1) * \cs:w g__wheelchart_slice_#2_end_angle_\WCcount _fp \cs_end: + / max ( round ( \cs:w g__wheelchart_value_\WCcount _fp \cs_end: ) , 1 ) } } @@ -1617,17 +1627,19 @@ arc_style /. style = {} , arc~around~line /. initial = 1 , arc~around~text /. default = true ,%this key is not set up with /.is choice or \bool_set:Nn - %such that for example \WCvarA can be used as value for this key + %so that for example \WCvarA can be used as value for this key arc~around~text /. initial = false , arc~data /. initial = {} , arc~data~align /. code = { \tl_set:Nn \l__wheelchart_arc_data_align_tl {#1} } ,%this key is not set up with /.is choice - %such that for example \WCvarA can be used as value for this key + %so that for example \WCvarA can be used as value for this key arc~data~align = center , arc~data~angle~pos /. initial = 0.5 , arc~data~angle~shift /. initial = 0 , arc~data~dir /. initial = 1 , arc~data~expand /. initial = n , arc~data~line~sep~factor /. initial = 1 , + arc~data~lines~pos /. initial = 0.5 , + arc~data~lines~shift /. initial = 0 , arc~data~pos /. initial = 1 , arc~data~sep /. initial = 1 ex / 1 cm , arc~data~style /. style = { arc_data_style /. style = {#1} } , @@ -1640,7 +1652,7 @@ arc~sep /. initial = 1 ex / 1 cm , at /. initial = { ( 0 , 0 ) } , before~slices /. initial = {} , - bool_set_true /. code = { \bool_set_true:N #1 } , + bool_set_true /. code = \bool_set_true:N #1 , caption /. initial = {} , caption~left /. initial = {} , caption~left~sep /. initial = 0.5 , @@ -1670,9 +1682,9 @@ data~style /. style = { data_style /. style = {#1} } , data_style /. style = {} , discrete /. is~choice , - discrete / false /. code = { \bool_set_false:N \l__wheelchart_discrete_bool } , + discrete / false /. code = \bool_set_false:N \l__wheelchart_discrete_bool , discrete / false /. value~forbidden , - discrete / true /. code = { \bool_set_true:N \l__wheelchart_discrete_bool } , + discrete / true /. code = \bool_set_true:N \l__wheelchart_discrete_bool , discrete / true /. value~forbidden , discrete /. default = true , discrete = false , @@ -1777,7 +1789,7 @@ legend /. initial = {} , legend~columns /. initial = 1 , legend~entry /. initial = {} , - legend~only /. code = { \bool_set:Nn \l__wheelchart_legend_only_bool { \cs:w c_#1_bool\cs_end: } } , + legend~only /. code = \bool_set:Nn \l__wheelchart_legend_only_bool { \cs:w c_#1_bool \cs_end: } , legend~only /. default = true , legend~only = false , legend~row /. code = @@ -1800,7 +1812,7 @@ } , lines~ext~dirsep /. initial = 0 , lines~ext~fixed /. default = true ,%this key is not set up with /.is choice or \bool_set:Nn - %such that for example \WCvarA can be used as value for this key + %so that for example \WCvarA can be used as value for this key lines~ext~fixed /. initial = false , lines~ext~fixed~left /. initial = { @@ -1808,7 +1820,7 @@ { \l__wheelchart_lines_ext_dir_int * ( - \cs:w g__wheelchart_outer_radius_\WCcount _fp\cs_end: + \l__wheelchart_lines_sep_fp + \cs:w g__wheelchart_outer_radius_\WCcount _fp \cs_end: + \l__wheelchart_lines_sep_fp + \l__wheelchart_lines_fp + \l__wheelchart_lines_ext_fp ) } @@ -1819,7 +1831,7 @@ { \l__wheelchart_lines_ext_dir_int * ( - \cs:w g__wheelchart_outer_radius_\WCcount _fp\cs_end: + \l__wheelchart_lines_sep_fp + \cs:w g__wheelchart_outer_radius_\WCcount _fp \cs_end: + \l__wheelchart_lines_sep_fp + \l__wheelchart_lines_fp + \l__wheelchart_lines_ext_fp ) } @@ -1870,7 +1882,7 @@ outer_plot_style /. style = {} , outer~radius /. initial = 3 , perc~precision /. initial = 0 , - pie /. code = { \bool_set:Nn \l__wheelchart_pie_bool { \cs:w c_#1_bool\cs_end: } } , + pie /. code = \bool_set:Nn \l__wheelchart_pie_bool { \cs:w c_#1_bool \cs_end: } , pie /. default = true , pie = false , plot /. style = @@ -2029,12 +2041,12 @@ } , slices~inner /. initial = { - \fp_compare:nNnT { \cs:w g__wheelchart_inner_radius_\WCcount _fp\cs_end: } > { 0 } + \fp_compare:nNnT { \cs:w g__wheelchart_inner_radius_\WCcount _fp \cs_end: } > { 0 } { \fp_compare:nNnT - { \cs:w g__wheelchart_inner_gap_\WCcount _fp\cs_end: } + { \cs:w g__wheelchart_inner_gap_\WCcount _fp \cs_end: } < - { \cs:w g__wheelchart_abs_half_angle_minus_new_angle_\WCcount _fp\cs_end: } + { \cs:w g__wheelchart_abs_half_angle_minus_new_angle_\WCcount _fp \cs_end: } { arc [ @@ -2212,7 +2224,7 @@ {} } } , - slices~start~arrow/.style~2~args = + slices~start~arrow /. style~2~args = { slices~start = { @@ -2241,13 +2253,13 @@ (#1) - \fp_eval:n { - \l__wheelchart_counter_or_clockwise_fp * \cs:w g__wheelchart_value_1_fp\cs_end: * 0.5 + \l__wheelchart_counter_or_clockwise_fp * \cs:w g__wheelchart_value_1_fp \cs_end: * 0.5 * ( \l__wheelchart_total_angle_fp / \WCtotalnum ) } } } , start~half /. default = 90 , - title /. initial= {} , + title /. initial = {} , title~left /. initial = {} , title~left~sep /. initial = 0.5 , title~left~style /. style = { title~left_style /. style = {#1} } , @@ -2283,13 +2295,13 @@ { \cs_set:cpn {#1} { \use:e { \clist_item:nn {#2} { \int_mod:nn { \WCcount - 1 } { \clist_count:n {#2} } + 1 } } } - %note the \use:e such that \WClist<name> also works when given as an argument to pgfmath + %note the \use:e so that \WClist<name> also works when given as an argument to pgfmath %if the list contains a macro, for example %\begin{tikzpicture} %\def\n{1} %\wheelchart[ - % value=\WClistA, - % WClistA={\n} + % value=\WClistA, + % WClistA=\n %]{\exampleforthismanual} %\end{tikzpicture} %https://tex.stackexchange.com/questions/671298/clist-item-and-pgfmathsetmacro-causing-an-error @@ -2331,18 +2343,18 @@ { \tl_set:Ne \l__wheelchart_key_name_tl { \pgfkeyscurrentname }%it is necessary to define \l__wheelchart_key_name_tl %because \pgfkeyscurrentname will be overwritten by / errors / unknown~key /. expanded - \regex_match:nVTF { \{(.+)\} } \l__wheelchart_key_name_tl + \regex_match:NVTF \c__wheelchart_braces_regex \l__wheelchart_key_name_tl { \tl_set:Ne \l__wheelchart_key_range_tl { \pgfkeyscurrentname } - \regex_replace_all:nnN { \{(.+)\} } {} \l__wheelchart_key_name_tl - \regex_replace_all:nnN { [\w\s]+\{(.+)\} } { \1 } \l__wheelchart_key_range_tl + \regex_replace_all:NnN \c__wheelchart_braces_regex {} \l__wheelchart_key_name_tl + \regex_replace_all:NnN \c__wheelchart_key_braces_regex { \1 } \l__wheelchart_key_range_tl \str_if_eq:eeTF { \l__wheelchart_key_range_tl } { list } { \pgfkeys { / wheelchart , WC_list = { l__wheelchart_list_\l__wheelchart_key_name_tl } {#1} } \pgfkeys { / wheelchart , - \l__wheelchart_key_name_tl /. expand~once = { \cs:w l__wheelchart_list_\l__wheelchart_key_name_tl\cs_end: } + \l__wheelchart_key_name_tl /. expand~once = { \cs:w l__wheelchart_list_\l__wheelchart_key_name_tl \cs_end: } } } { @@ -2393,12 +2405,12 @@ \NewDocumentCommand \wheelchart { O {} m } { - {%note the double braces {{...}} such that the contents is in a group and such that & can be used in pgfmath in a tabular + {%note the double braces {{...}} so that the contents is in a group and so that & can be used in pgfmath in a tabular \pgfkeys { / wheelchart , #1 } \IfPackageLoadedTF { siunitx } { \cs_set:Npn \WCperc { \qty { \WCpercentagerounded } { \percent } } } { \cs_set:Npn \WCperc { \WCpercentagerounded \, \% } }%the definition of \WCperc is placed inside the command \wheelchart - %such that \WCperc is not defined outside this command + %so that \WCperc is not defined outside this command \bool_if:NTF \l__wheelchart_legend_only_bool { \__wheelchart_initial:n {#2} @@ -2430,7 +2442,7 @@ { \g__wheelchart_angle_fp + ( - \l__wheelchart_counter_or_clockwise_fp * \cs:w g__wheelchart_value_\WCcount _fp\cs_end: + \l__wheelchart_counter_or_clockwise_fp * \cs:w g__wheelchart_value_\WCcount _fp \cs_end: * ( \l__wheelchart_total_angle_fp / \WCtotalnum ) ) } @@ -2455,7 +2467,7 @@ \fp_gset:cn { g__wheelchart_abs_half_angle_minus_new_angle_\WCcount _fp } { abs ( \g__wheelchart_angle_fp - \g__wheelchart_new_angle_fp ) / 2 } \fp_set:Nn \l__wheelchart_abs_half_angle_minus_new_angle_minus_gap_polar_fp - { \cs:w g__wheelchart_abs_half_angle_minus_new_angle_\WCcount _fp\cs_end: - \l__wheelchart_gap_polar_fp } + { \cs:w g__wheelchart_abs_half_angle_minus_new_angle_\WCcount _fp \cs_end: - \l__wheelchart_gap_polar_fp } \fp_gzero_new:c { g__wheelchart_outer_gap_\WCcount _fp } \fp_gzero_new:c { g__wheelchart_inner_gap_\WCcount _fp } \bool_if:NTF \l__wheelchart_plot_bool @@ -2466,7 +2478,7 @@ { \fp_set:Nn \l__wheelchart_gap_max_angle_def_fp { - \cs:w g__wheelchart_inner_radius_\WCcount _fp\cs_end: > 0 + \cs:w g__wheelchart_inner_radius_\WCcount _fp \cs_end: > 0 ? 90 : @@ -2490,8 +2502,8 @@ ) ) } - \__wheelchart_def_gap:nn { outer } { \cs:w g__wheelchart_outer_radius_\WCcount _fp\cs_end: } - \__wheelchart_def_gap:nn { inner } { \cs:w g__wheelchart_inner_radius_\WCcount _fp\cs_end: } + \__wheelchart_def_gap:nn { outer } { \cs:w g__wheelchart_outer_radius_\WCcount _fp \cs_end: } + \__wheelchart_def_gap:nn { inner } { \cs:w g__wheelchart_inner_radius_\WCcount _fp \cs_end: } \fp_compare:nNnT { \l__wheelchart_abs_half_angle_minus_new_angle_minus_gap_polar_fp } > { 0.01 } { \fp_gset:cn { g__wheelchart_inner_radius_\WCcount _fp } @@ -2508,7 +2520,7 @@ ) ) , - \cs:w g__wheelchart_inner_radius_\WCcount _fp\cs_end: + \cs:w g__wheelchart_inner_radius_\WCcount _fp \cs_end: ) } } @@ -2523,14 +2535,14 @@ \__wheelchart_gdef_count_fp:nn { data_pos } { data~pos } \__wheelchart_gdef_count_fp:nn { data_sep } { data~sep } \__wheelchart_def_angle:nnnn - { \cs:w g__wheelchart_data_angle_pos_\WCcount _fp\cs_end: } - { \cs:w g__wheelchart_data_angle_shift_\WCcount _fp\cs_end: } - { \cs:w g__wheelchart_data_pos_\WCcount _fp\cs_end: } - { \cs:w g__wheelchart_data_sep_\WCcount _fp\cs_end: } + { \cs:w g__wheelchart_data_angle_pos_\WCcount _fp \cs_end: } + { \cs:w g__wheelchart_data_angle_shift_\WCcount _fp \cs_end: } + { \cs:w g__wheelchart_data_pos_\WCcount _fp \cs_end: } + { \cs:w g__wheelchart_data_sep_\WCcount _fp \cs_end: } \cs_set:Npe \WCdataangle { \pgfmathresult } \__wheelchart_gdef_count_fp:nn { explode } { explode } \pgfkeysvalueof { / wheelchart / for~loop~start }%this must be placed after the definition of macros such as - %\WCpercentage such that these macros can be used in the key for loop start + %\WCpercentage so that these macros can be used in the key for loop start \int_compare:nNnT { \WCcount } = { 1 } { \begin { scope } @@ -2601,7 +2613,7 @@ [ shift /. expanded = { - \cs:w __wheelchart_point_plot_\bool_to_str:N \l__wheelchart_plot_bool :nnnnn\cs_end: + \cs:w __wheelchart_point_plot_\bool_to_str:N \l__wheelchart_plot_bool :nnnnn \cs_end: { \WCcount } { \l__wheelchart_slices_angle_pos_fp } { \l__wheelchart_slices_angle_shift_fp } @@ -2639,9 +2651,9 @@ \__wheelchart_for_loop:n { \bool_if:NT \l__wheelchart_wheel_lines_bool - %this is placed inside \__wheelchart_for_loop:n such that wheel lines can be applied for specific slices + %this is placed inside \__wheelchart_for_loop:n so that wheel lines can be applied for specific slices { - \int_step_inline:nnn { 0 } { \fp_eval:n { round ( \cs:w g__wheelchart_value_\WCcount _fp\cs_end: ) } } + \int_step_inline:nnn { 0 } { \fp_eval:n { round ( \cs:w g__wheelchart_value_\WCcount _fp \cs_end: ) } } %note the \fp_eval:n { round ( ... ) } to avoid the messages Missing character: There is no ... in font nullfont! { \bool_if:NTF \l__wheelchart_plot_bool @@ -2783,14 +2795,14 @@ \fp_compare:nF { \l__wheelchart_lines_fp == 0 && \l__wheelchart_lines_ext_fp == 0 } { \draw [ / wheelchart / lines_style ] let \p { l__wheelchart_lines_1 } = - \cs:w __wheelchart_point_plot_\bool_to_str:N \l__wheelchart_plot_bool :nnnnn\cs_end: + \cs:w __wheelchart_point_plot_\bool_to_str:N \l__wheelchart_plot_bool :nnnnn \cs_end: { \WCcount } - { \cs:w g__wheelchart_data_angle_pos_\WCcount _fp\cs_end: } - { \cs:w g__wheelchart_data_angle_shift_\WCcount _fp\cs_end: } - { \cs:w g__wheelchart_data_pos_\WCcount _fp\cs_end: } + { \cs:w g__wheelchart_data_angle_pos_\WCcount _fp \cs_end: } + { \cs:w g__wheelchart_data_angle_shift_\WCcount _fp \cs_end: } + { \cs:w g__wheelchart_data_pos_\WCcount _fp \cs_end: } { \l__wheelchart_lines_sep_fp + \l__wheelchart_lines_fp } in - \cs:w __wheelchart_point_plot_\bool_to_str:N \l__wheelchart_plot_bool :nnnnn\cs_end: + \cs:w __wheelchart_point_plot_\bool_to_str:N \l__wheelchart_plot_bool :nnnnn \cs_end: { \WCcount } { \l__wheelchart_lines_angle_pos_fp } { \l__wheelchart_lines_angle_shift_fp } @@ -2838,7 +2850,7 @@ { \fp_eval:n { - \l__wheelchart_lines_ext_dir_int * \cs:w g__wheelchart_data_sep_\WCcount _fp\cs_end: + \l__wheelchart_lines_ext_dir_int * \cs:w g__wheelchart_data_sep_\WCcount _fp \cs_end: } } , 0 @@ -2849,7 +2861,7 @@ } ; } - \__wheelchart_if_text:nn { data } + \__wheelchart_if_text:nnn { data } { o } { \fp_compare:nNnTF { \l__wheelchart_lines_ext_fp } = { 0 } { @@ -2876,13 +2888,13 @@ \coordinate [ at = - \cs:w __wheelchart_point_plot_\bool_to_str:N \l__wheelchart_plot_bool :nnnnn\cs_end: + \cs:w __wheelchart_point_plot_\bool_to_str:N \l__wheelchart_plot_bool :nnnnn \cs_end: { \WCcount } - { \cs:w g__wheelchart_data_angle_pos_\WCcount _fp\cs_end: } - { \cs:w g__wheelchart_data_angle_shift_\WCcount _fp\cs_end: } - { \cs:w g__wheelchart_data_pos_\WCcount _fp\cs_end: } + { \cs:w g__wheelchart_data_angle_pos_\WCcount _fp \cs_end: } + { \cs:w g__wheelchart_data_angle_shift_\WCcount _fp \cs_end: } + { \cs:w g__wheelchart_data_pos_\WCcount _fp \cs_end: } { - \cs:w g__wheelchart_data_sep_\WCcount _fp\cs_end: + + \cs:w g__wheelchart_data_sep_\WCcount _fp \cs_end: + ( \l__wheelchart_lines_fp == 0 ? @@ -2902,7 +2914,7 @@ \node [ anchor = \l__wheelchart_data_anchor_tl , align = left , / wheelchart / data_style ] at ( g__wheelchart_data_coordinate ) { \pgfkeysvalueof { / wheelchart / data } } ;%a separate \node and not at the end of the \draw with lines_style - %such that the key lines style is not passed to this \node + %so that the key lines style is not passed to this \node } \__wheelchart_def_fp:nn { arc_around_line } { arc~around~line } \__wheelchart_def_fp:nn { arc_data_angle_pos } { arc~data~angle~pos } @@ -2913,14 +2925,16 @@ \fp_gset:Nn \g__wheelchart_half_ex_over_one_cm_fp { 0.5 ex / 1 cm }% \endpgfinterruptpicture% \fp_gset:Nn \g__wheelchart_arc_data_aux_ii_fp { 0 } - \__wheelchart_if_text:nn { arc~data } + \__wheelchart_if_text:nnn { arc~data } {} { - \cs_set:Npn \WCperc { \WCpercentagerounded { \, } { \% } }%such that \WCperc follows the arc if used in arc data + \cs_set:Npn \WCperc { \WCpercentagerounded { \, } { \% } }%so that \WCperc follows the arc if used in arc data %this redefinition of \WCperc is local to the group of arc data \__wheelchart_def_fp:nn { arc_data_pos } { arc~data~pos } \__wheelchart_def_fp:nn { arc_data_sep } { arc~data~sep } \__wheelchart_def_fp:nn { arc_data_line_sep_factor } { arc~data~line~sep~factor } - \cs:w seq_set_split:Nn\pgfkeysvalueof { / wheelchart / arc~data~expand }\cs_end: + \__wheelchart_def_fp:nn { arc_data_lines_pos } { arc~data~lines~pos } + \__wheelchart_def_fp:nn { arc_data_lines_shift } { arc~data~lines~shift } + \cs:w seq_set_split:Nn\pgfkeysvalueof { / wheelchart / arc~data~expand } \cs_end: \l__wheelchart_arc_data_seq { \\ } { \pgfkeysvalueof { / wheelchart / arc~data } } @@ -2928,13 +2942,17 @@ { \fp_set:Nn \l__wheelchart_arc_data_text_pos_fp { - \l__wheelchart_arc_data_pos_fp + 2 * \g__wheelchart_slices_orientation_fp - * ( 2 * ####1 - \seq_count:N \l__wheelchart_arc_data_seq - 1 ) * sign ( \l__wheelchart_arc_data_dir_fp ) + \l__wheelchart_arc_data_pos_fp + 4 * \g__wheelchart_slices_orientation_fp * + ( + ####1 - 1 - \l__wheelchart_arc_data_lines_pos_fp * ( \seq_count:N \l__wheelchart_arc_data_seq - 1 ) + + \l__wheelchart_arc_data_lines_shift_fp + ) + * sign ( \l__wheelchart_arc_data_dir_fp ) * \l__wheelchart_arc_data_line_sep_factor_fp * \g__wheelchart_half_ex_over_one_cm_fp / ( - \cs:w g__wheelchart_outer_radius_\WCcount _fp\cs_end: - - \cs:w g__wheelchart_inner_radius_\WCcount _fp\cs_end: + \cs:w g__wheelchart_outer_radius_\WCcount _fp \cs_end: + - \cs:w g__wheelchart_inner_radius_\WCcount _fp \cs_end: + 2 * \l__wheelchart_arc_data_sep_fp ) }%the sign is needed because \l__wheelchart_arc_data_dir_fp is not necessarily 1 or -1 @@ -2957,9 +2975,9 @@ / wheelchart / arc_data_style } }%get the length of the path - %note the option overlay such that this does not increase the bounding box + %note the option overlay so that this does not increase the bounding box %note the {} at the start of text and the braces around \fp_gset:Nn ... - %such that the compilation does not stall + %so that the compilation does not stall { 0 } { 1 } { \l__wheelchart_plot_variable_tl } @@ -3033,7 +3051,7 @@ { \l__wheelchart_arc_data_text_pos_fp } { \l__wheelchart_arc_data_sep_fp + \g__wheelchart_half_ex_over_one_cm_fp } + \l__wheelchart_counter_or_clockwise_fp * \l__wheelchart_arc_data_dir_fp - * \cs:w c__wheelchart_arc_data_start_factor_\l__wheelchart_arc_data_align_tl _fp\cs_end: + * \cs:w c__wheelchart_arc_data_start_factor_\l__wheelchart_arc_data_align_tl _fp \cs_end: * \l__wheelchart_arc_data_total_angle_plot_false_fp } \path @@ -3188,7 +3206,7 @@ } \bool_if:NT \l__wheelchart_legend_row_bool { \__wheelchart_def_WClegend: } - \__wheelchart_if_text:nn { middle } + \__wheelchart_if_text:nnn { middle } { o } { \node [ align = center , / wheelchart / middle_style ] at ( 0 , 0 ) { \pgfkeysvalueof { / wheelchart / middle } } ; } \pgfkeysvalueof { / wheelchart / legend } \end { scope } @@ -3203,4 +3221,6 @@ \end { scope } } } - }
\ No newline at end of file + } + +\endinput
\ No newline at end of file diff --git a/graphics/pgf/contrib/wheelchart/wheelchart.tex b/graphics/pgf/contrib/wheelchart/wheelchart.tex index 5f0857f1a6..952fc93a81 100644 --- a/graphics/pgf/contrib/wheelchart/wheelchart.tex +++ b/graphics/pgf/contrib/wheelchart/wheelchart.tex @@ -137,7 +137,7 @@ \setcounter{secnumdepth}{2} \title{The \texttt{wheelchart} package\\[12pt]\large Diagrams with circular or other shapes using \tikzname{} and \LaTeX3} \author{Matthias Floré} -\date{Version 3.0 (2024/03/08)}%\\[12pt] +\date{Version 4.0 (2024/07/28)}%\\[12pt] \begin{document} \iftotalpages% \newsavebox{\fancyfootdefaultbox}% @@ -155,7 +155,11 @@ \maketitle \thispagestyle{fancy} \begin{abstract} -\noindent This package is based on the package |tikz| (see \cite{TtTaPGFp}) and can be used to draw various kinds of diagrams such as a bar chart, doughnut chart, infographic, pie chart, ring chart, square chart, sunburst chart, waffle chart and wheel chart with \tikzname. It provides several options to customize the diagrams. It is also possible to specify a plot for the shape of the chart. Furthermore a legend can be added and the table of contents can be displayed as one of these diagrams. Other tools for creating wheel charts or pie charts can be found in \cite{MpMP}, \cite{JhcIparowcltopotPGFm}, \cite{Tumfdb}, \cite{XdPCbupp} and \cite{RSVpaaMfp}.% This is the manual for version . +\noindent This package is based on the package |tikz| (see \cite{TtTaPGFp}) and can be used to draw various kinds of diagrams such as bar charts, doughnut charts, infographics, pie charts, ring charts, square charts, sunburst charts, waffle charts and wheel charts. + +\noindent It provides several options to customize the diagrams. It is also possible to specify a plot for the shape of the chart. Furthermore a legend can be added and the table of contents can be displayed as one of these diagrams. + +\noindent Other tools for creating wheel charts or pie charts can be found in \cite{MpMP}, \cite{JhcIparowcltopotPGFm}, \cite{Tumfdb}, \cite{XdPCbupp} and \cite{RSVpaaMfp}.% This is the manual for version . \end{abstract} \section*{\contentsname} \iftotalpages @@ -257,7 +261,7 @@ The default wheelchart with these data is shown below. \end{tikzpicture} \end{codeexample} \end{command} -\newpage%such that this section has its own block in the header +\newpage%so that this section has its own block in the header \section{Additional macros} \begin{command}{\WCangle\opt{\oarg{number}}\marg{angle pos}\marg{angle shift}\marg{pos}\marg{sep}} This command gives the angle in degrees of the point which is constructed as follows. @@ -670,6 +674,11 @@ In the example below, it is necessary to use |arc data expand=e| and to place |\ \begin{key}{/wheelchart/arc data line sep factor=\marg{factor} (initially 1)} The contents of the key |arc data| can consist of multiple lines separated by |\\|. The \meta{factor} determines the spacing between these lines. \end{key} +\begin{key}{/wheelchart/arc data lines pos=\marg{factor} (initially 0.5)} +\end{key} +\begin{key}{/wheelchart/arc data lines shift=\marg{value} (initially 0)} +The positioning of the lines of the key |arc data| is determined by the index $k-1-\text{|arc data lines pos|}\cdot(N-1)+\text{|arc data lines shift|}$ where $N$ is the number of lines and $k\in\{1,\dots,N\}$. +\end{key} \begin{key}{/wheelchart/arc data pos=\marg{value} (initially 1)} \end{key} \begin{key}{/wheelchart/arc data sep=\marg{value} (initially 1ex/1cm)} @@ -738,7 +747,6 @@ This key accepts a list of keys which will be applied to the node where the cont \begin{codeexample}[width=10cm] \begin{tikzpicture} \wheelchart[ - at={(5,2)}, caption=Caption, caption style={font=\scshape}, caption left=Caption left, @@ -2909,6 +2917,11 @@ The following example is an answer to the question on \url{https://tex.stackexch \item In v2.0, the key |arc data angle shift| was not taken into account for the key |arc| in combination with the key |arc around text|. This is fixed in v3.0. \item In v2.0, the number of items for each slice in the \meta{wheelchart data} which can be accessed with the macros |\WCvarA| and so on was determined by the number of items for the last slice. For example, |data{1}=\WCvarD| in combination with the \meta{wheelchart data} |1/black/A/a,2/gray/B| was not possible with v2.0. This is not a limitation anymore with v3.0. \end{itemize} +\item[] \textbf{Version 4.0 (2024/07/28)} +\begin{itemize} +\item Added the keys |arc data lines pos| and |arc data lines shift|. +\item Solved an incompatibility if |\\| is used in a key such as |data| inside an environment such as |center|. +\end{itemize} \end{itemize} \begin{thebibliography}{9} \bibitem{JhcIparowcltopotPGFm} diff --git a/graphics/pgf/contrib/wordle/README.md b/graphics/pgf/contrib/wordle/README.md index f1977a1ae7..fdfd996870 100644 --- a/graphics/pgf/contrib/wordle/README.md +++ b/graphics/pgf/contrib/wordle/README.md @@ -1,8 +1,33 @@ -wordle is a package to work with Wordle game. ------------------------------------------------------------ -wordle est un package pour travailler avec le jeu du sutom. ------------------------------------------------------------ -Author : Cédric Pierquet -email : cpierquet@outlook.fr -Licence : Released under the LaTeX Project Public License v1.3c or later, see http://www.latex-project.org/lppl.txt -Source : https://tex.stackexchange.com/questions/659860/wordle-like-colored-letter-boxes-in-latex
\ No newline at end of file +![v![]()ersion](https://img.shields.io/github/v/tag/AndrewMathas/wordle?color=success&label=version) +<a href="http://www.latex-project.org/lppl.txt"><img src="https://img.shields.io/badge/license-LPPLv1.3c-blueviolet.svg"></a> +<a href="https://www.latex-project.org/"><img src="https://img.shields.io/badge/latex-20B2AA?logo=Latex"></a> + +# Wordle + +A stupidly feature-rich LaTeX package for typesetting **Wordle** puzzles. This package provides a stupidly feature-rich way of creating Wordle puzzles in LaTeX, which [Wikipedia](https://en.wikipedia.org/wiki/Wordle) describes as a hugely popular web-based word game created and developed by Welsh software engineer Josh Wardle. + +This package provides the `wordle` environment, which uses the syntax: + +```tex +% \usepackage{wordle} +\begin{wordle}{ANVIL} + CRANE + NATAL + ANVIL +\end{wordle} +``` + +Ce package fournit un moyen stupidement riche en fonctionnalités de créer des puzzles **Wordle** en LaTeX, que [Wikipedia](https://en.wikipedia.org/wiki/Wordle) décrit comme comme un jeu de lettres en ligne extrêmement populaire, créé et développé par l'ingénieur logiciel gallois Josh Wardle. + +```tex +% \usepackage{wordle} +\begin{GrilleSutom}{REBUS} + ABRIS + ROUTE + REBUS +\end{GrilleSutom} +``` + +### Authors +Andrew Mathas and Cédric Pierquet + diff --git a/graphics/pgf/contrib/wordle/doc/wordle-doc-en.pdf b/graphics/pgf/contrib/wordle/doc/wordle-doc-en.pdf Binary files differdeleted file mode 100644 index aadb07f54b..0000000000 --- a/graphics/pgf/contrib/wordle/doc/wordle-doc-en.pdf +++ /dev/null diff --git a/graphics/pgf/contrib/wordle/doc/wordle-doc-en.tex b/graphics/pgf/contrib/wordle/doc/wordle-doc-en.tex deleted file mode 100644 index 06352f5ad5..0000000000 --- a/graphics/pgf/contrib/wordle/doc/wordle-doc-en.tex +++ /dev/null @@ -1,426 +0,0 @@ -% !TeX TXS-program:compile = txs:///arara -% arara: pdflatex: {shell: yes, synctex: no, interaction: batchmode} -% arara: pdflatex: {shell: yes, synctex: no, interaction: batchmode} if found('log', '(undefined references|Please rerun|Rerun to get)') - -\documentclass[english,a4paper,11pt]{article} -\usepackage[margin=2cm,includefoot]{geometry} -\def\TPversion{0.1.1} -\def\TPdate{03/09/2023} -\usepackage{amssymb,amsfonts,amsmath} -\usepackage[utf8]{inputenc} -%\usepackage[T1]{fontenc} -\usepackage{wordle} -\usepackage{awesomebox} -\usepackage{fontawesome5} -\usepackage{footnote} -\makesavenoteenv{tabular} -\usepackage{enumitem} -\usepackage{tabularray} -\usepackage{fancyvrb} -\usepackage{fancyhdr} -\fancyhf{} -\renewcommand{\headrulewidth}{0pt} -\lfoot{\sffamily\small [wordle]} -\cfoot{\sffamily\small - \thepage{} -} -\rfoot{\hyperlink{matoc}{\small\faArrowAltCircleUp[regular]}} - -%\usepackage{hvlogos} -\usepackage{xspace} -\usepackage{hologo} -\providecommand\tikzlogo{Ti\textit{k}Z} -\providecommand\TeXLive{\TeX{}Live\xspace} -\providecommand\PSTricks{\textsf{PSTricks}\xspace} -\let\pstricks\PSTricks -\let\TikZ\tikzlogo -\newcommand\TableauDocumentation{% - \begin{tblr}{width=\linewidth,colspec={X[c]X[c]X[c]X[c]X[c]X[c]},cells={font=\sffamily}} - {\LARGE \LaTeX} & & & & &\\ - & {\LARGE \hologo{pdfLaTeX}} & & & & \\ - & & {\LARGE \hologo{LuaLaTeX}} & & & \\ - & & & {\LARGE \TikZ} & & \\ - & & & & {\LARGE \TeXLive} & \\ - & & & & & {\LARGE \hologo{MiKTeX}} \\ - \end{tblr} -} - -\usepackage{hyperref} -\urlstyle{same} -\hypersetup{pdfborder=0 0 0} -\setlength{\parindent}{0pt} -\definecolor{LightGray}{gray}{0.9} - -\usepackage{babel} -%\AddThinSpaceBeforeFootnotes -%\FrenchFootnotes - -\usepackage{listings} - -\usepackage{newverbs} -\newverbcommand{\motcletex}{\color{cyan!75!black}}{} -\newverbcommand{\packagetex}{\color{violet!75!black}}{} - -\usepackage[most]{tcolorbox} -\tcbuselibrary{listingsutf8} -\newtcblisting{DemoCode}[1][]{% - enhanced,width=0.95\linewidth,center,% - bicolor,size=title,% - colback=cyan!2!white,% - colbacklower=cyan!1!white,% - colframe=cyan!75!black,% - listing options={% - breaklines=true,% - breakatwhitespace=true,% - style=tcblatex,basicstyle=\small\ttfamily,% - tabsize=4,% - commentstyle={\itshape\color{gray}}, - keywordstyle={\color{blue}},% - classoffset=0,% - keywords={},% - alsoletter={-},% - keywordstyle={\color{blue}},% - classoffset=1,% - alsoletter={-},% - morekeywords={center,justify},% - keywordstyle={\color{violet}},% - classoffset=2,% - alsoletter={-},% - morekeywords={WordleGrid},% - keywordstyle={\color{green!50!black}},% - classoffset=3,% - morekeywords={Colors,Rounded,Unit,Font,ColorLetters,Letters,Style,Thickness,BorderColor},% - keywordstyle={\color{orange}} - },% - #1 -} - -\tcbset{vignettes/.style={% - nobeforeafter,box align=base,boxsep=0pt,enhanced,sharp corners=all,rounded corners=southeast,% - boxrule=0.75pt,left=7pt,right=1pt,top=0pt,bottom=0.25pt,% - } -} - -\tcbset{vignetteMaJ/.style={% - fontupper={\vphantom{pf}\footnotesize\ttfamily}, - vignettes,colframe=purple!50!black,coltitle=white,colback=purple!10,% - overlay={\begin{tcbclipinterior}% - \fill[fill=purple!75]($(interior.south west)$) rectangle node[rotate=90]{\tiny \sffamily{\textcolor{black}{\scalebox{0.66}[0.66]{\textbf{MàJ}}}}} ($(interior.north west)+(5pt,0pt)$);% - \end{tcbclipinterior}} - } -} - -\newcommand\Cle[1]{{\small\sffamily\textlangle \textcolor{orange}{#1}\textrangle}} -\newcommand\cmaj[1]{\tcbox[vignetteMaJ]{#1}\xspace} - -\begin{document} - -\setlength{\aweboxleftmargin}{0.07\linewidth} -\setlength{\aweboxcontentwidth}{0.93\linewidth} -\setlength{\aweboxvskip}{8pt} - -\pagestyle{fancy} - -\thispagestyle{empty} - -\vspace{2cm} - -\begin{center} - \begin{minipage}{0.75\linewidth} - \begin{tcolorbox}[colframe=yellow,colback=yellow!15] - \begin{center} - \begin{tabular}{c} - {\Huge \texttt{wordle} [en]}\\ - \\ - {\LARGE Grids of Wordle,} \\ - \\ - {\LARGE made with \textsf{Ti\textit{k}Z}.} \\ - \end{tabular} - - \bigskip - - {\small \texttt{Version \TPversion{} -- \TPdate}} - \end{center} - \end{tcolorbox} -\end{minipage} -\end{center} - -\begin{center} - \begin{tabular}{c} - \texttt{Cédric Pierquet}\\ - {\ttfamily c pierquet -- at -- outlook . fr}\\ - \texttt{\url{https://github.com/cpierquet/wordle}} -\end{tabular} -\end{center} - -\vspace{0.25cm} - -{$\blacktriangleright$~~Create Wordle grids Wordle/Sutom\footnotemark\footnotetext{\url{https://en.wikipedia.org/wiki/Wordle}}.} - -\vspace{0.25cm} - -{$\blacktriangleright$~~Specify colors and font\footnotemark\footnotetext{Ideas from \url{ttps://tex.stackexchange.com/questions/659860/wordle-like-colored-letter-boxes-in-latex}}. - -\vspace{0.5cm} - -\begin{center} -\begin{WordleGrid}{CRAZE} - GRAIL TRACK CRAMP CRABS CRAZY CRAZE -\end{WordleGrid} -\end{center} - -\begin{center} -\begin{WordleGrid}[Rounded=0,Colors={lightgray,orange,teal},Style=alt,Unit=0.5,Letters=false]{LADLE} - FLAIL LAPEL LADLE -\end{WordleGrid} -% -\hspace{5mm} -% -\begin{WordleGrid}[Rounded=0,Colors={lightgray,orange,teal},Style=alt,Unit=0.5]{LADLE} - FLAIL LAPEL LADLE -\end{WordleGrid} -\end{center} - -\vspace{0.25cm} - -%\hfill{}\textit{Merci à Denis Bitouzé et à Gilles Le Bourhis pour leurs retours et idées !} - -\smallskip - -\vfill - -\hrule - -\medskip - -\TableauDocumentation - -\medskip - -\hrule - -\vspace*{1cm} - -\newpage - -\phantomsection -\hypertarget{matoc}{} - -\tableofcontents - -\vfill - -\section{History} - -\verb|v0.1.1|~:~~~~Bugfix with english version. - -\verb|v0.1.0|~:~~~~Initial version. - -\newpage - -\section{The wordle package} - -\subsection{The game} - -\begin{noteblock} -Wordle is a web-based word game created and developed by Welsh software engineer Josh Wardle. Players have six attempts to guess a five-letter word, with feedback given for each guess in the form of colored tiles indicating when letters match or occupy the correct position. - -Every day, a five-letter word is chosen which players aim to guess within six tries. After every guess, each letter is marked as either green, yellow or gray: green indicates that letter is correct and in the correct position, yellow means it is in the answer but not in the right position, while gray indicates it is not in the answer at all. Multiple instances of the same letter in a guess, such as the "o"s in "robot", will be colored green or yellow only if the letter also appears multiple times in the answer; otherwise, excess repeating letters will be colored gray. - -\smallskip - -\hfill{\scriptsize \url{https://en.wikipedia.org/wiki/Wordle}} -\end{noteblock} - -\subsection{The package} - -\begin{noteblock} -This package can display, in a \textsf{tex} file, a wordle grid (with \TikZ{} and within a \motcletex!minipage!), with ability : - -\begin{itemize} - \item to change dimensions and colors ; - \item to pick style for misplaced letters ; - \item to change borders and corners ; - \item to print or not the letters. -\end{itemize} - -It's possible to "play" with other words than five-letter words ! -\end{noteblock} - -\begin{importantblock} -Most of source code, in \hologo{LaTeX3}, is given by thread from \texttt{tex.stackexchange}, proposed by user \textsf{3141592653589793238}. -\end{importantblock} - -\subsection{Loading of the package, used packages} - -\begin{importantblock} -The package \packagetex!wordle! loads within the preamble. - -There's no option, and \packagetex!xcolor! isn't loaded. -\end{importantblock} - -\begin{DemoCode}[listing only] -\documentclass{article} -\usepackage{wordle} - -\end{DemoCode} - -\begin{noteblock} -\packagetex!wordle! loads the following packages and libraries : - -\begin{itemize} - \item \packagetex!tikz!; - \item \packagetex!simplekv! ; - \item \packagetex!xstring!. -\end{itemize} - -It’s mostly compatible with \textsf{latex}, \textsf{pdflatex}, \textsf{lualatex} or \textsf{xelatex} compilation ! -\end{noteblock} - -\vfill~ - -\pagebreak - -\section{WordleGrid environment} - -\subsection{Environment} - -\begin{cautionblock} -The environment to display a Wordle grid is \packagetex!WordleGrid!. - -It works with keys, between \texttt{[...]} and needs to know : - -\begin{itemize} - \item the good word ; - \item the different guesses. -\end{itemize} - -The code create the grid and the colors ! -\end{cautionblock} - -\begin{DemoCode}[listing only] -\begin{WordleGrid}[keys]{good word} - guess n°1 - guess n°2 - guess n°3 -\end{WordleGrid} -\end{DemoCode} - -\begin{noteblock} -the grid is created with a \motcletex!minipage!, with automatic width and spacings ! -\end{noteblock} - -\begin{DemoCode}[] -%default output -\begin{WordleGrid}{REBUS} - ARISE - ROUTE - RULES - REBUS -\end{WordleGrid} -\end{DemoCode} - -\subsection{Keys and options} - -\begin{tipblock} -The first argument, mandatory and between \texttt{[...]}, proposes the following \Cle{keys} : - -\begin{itemize} - \item \Cle{Colors} : = colors of the boxes \Cle{back,misplaced,good} ; - - \hfill{}default : \Cle{WordleBack,WordleBad,WordleGood},% - \item \Cle{Rounded} := arc for corners, in mm ; \hfill{}default : \Cle{0.1} - \item \Cle{Unit} := width of cases, in cm ; \hfill{}default : \Cle{1} - \item \Cle{Font} := font for letters ; \hfill{}default : \Cle{\textbackslash LARGE\textbackslash bfseries\textbackslash sffamily} - \item \Cle{ColorLetters} := color for letters ; \hfill{}default : \Cle{white} - \item \Cle{BorderColor} := color fot the border ; \hfill{}default : \Cle{white} - \item \Cle{Letters} := boolean to print letters ; \hfill{}default : \Cle{true} - \item \Cle{Style} := style within \Cle{default / other} to change the style ; \hfill{}default : \Cle{default} - \item \Cle{Thick} := thickness of the borders, in mm. \hfill{}default : \Cle{0.25} -\end{itemize} -\vspace*{-\baselineskip}\leavevmode -\end{tipblock} - -\begin{tipblock} -The second argument, optional and between \texttt{\{...\}} is the correct word. - -\smallskip - -Different guesses are given within the body of the environment (line by line or space separated). -\end{tipblock} - -\subsection{Examples} - -\begin{DemoCode}[] -\begin{WordleGrid}{BURGH} - ABATE - HERBS - BURLY - BURGH -\end{WordleGrid} -% -\hspace{5mm} -% -\begin{WordleGrid}[Style=alt]{BURGH} - ABATE HERBS BURLY BURGH -\end{WordleGrid} -\end{DemoCode} - -\begin{DemoCode}[] -\begin{WordleGrid} - [Thickness=0.3,BorderColor=black,% - Colors={lightgray,orange,teal}]{BURGH} - ABATE - HERBS - BURLY - BURGH -\end{WordleGrid} -% -\hspace{5mm} -% -\begin{WordleGrid} - [Rounded=0,Thickness=0.3,BorderColor=black,% - Colors={lightgray,orange,teal}]{BURGH} - ABATE - HERBS - BURLY - BURGH -\end{WordleGrid} -\end{DemoCode} - -\begin{DemoCode}[] -\begin{WordleGrid}[Unit=2,Font=\Huge\ttfamily,ColorLetters=black]{BURGH} - ABATE - HERBS - BURLY - BURGH -\end{WordleGrid} -\end{DemoCode} - -\begin{DemoCode}[] -\begin{WordleGrid}% - [Unit=0.75,Rounded=0,Colors={cyan,orange,violet},Letters=false]{BURGH} - ABATE - HERBS - BURLY - BURGH -\end{WordleGrid} -\hspace{5mm} -\begin{WordleGrid}% - [Unit=0.75,Rounded=0,Colors={cyan,orange,violet},Style=alt] - {BURGH} - ABATE - HERBS - BURLY - BURGH -\end{WordleGrid} -\hspace{5mm} -\begin{WordleGrid}% - [Unit=0.75,Rounded=0,Colors={cyan,orange,violet},Style=alt,Letters=false] - {BURGH} - ABATE - HERBS - BURLY - BURGH -\end{WordleGrid} -\end{DemoCode} - -\end{document}
\ No newline at end of file diff --git a/graphics/pgf/contrib/wordle/doc/wordle-doc-fr.pdf b/graphics/pgf/contrib/wordle/doc/wordle-doc-fr.pdf Binary files differdeleted file mode 100644 index 3277ca9a99..0000000000 --- a/graphics/pgf/contrib/wordle/doc/wordle-doc-fr.pdf +++ /dev/null diff --git a/graphics/pgf/contrib/wordle/doc/wordle-doc-fr.tex b/graphics/pgf/contrib/wordle/doc/wordle-doc-fr.tex deleted file mode 100644 index f365cbb459..0000000000 --- a/graphics/pgf/contrib/wordle/doc/wordle-doc-fr.tex +++ /dev/null @@ -1,422 +0,0 @@ -% !TeX TXS-program:compile = txs:///arara -% arara: pdflatex: {shell: yes, synctex: no, interaction: batchmode} -% arara: pdflatex: {shell: yes, synctex: no, interaction: batchmode} if found('log', '(undefined references|Please rerun|Rerun to get)') - -\documentclass[french,a4paper,11pt]{article} -\usepackage[margin=2cm,includefoot]{geometry} -\def\TPversion{0.1.1} -\def\TPdate{3 septembre 2023} -\usepackage{amssymb,amsfonts,amsmath} -\usepackage[utf8]{inputenc} -%\usepackage[T1]{fontenc} -\usepackage{wordle} -\usepackage{awesomebox} -\usepackage{fontawesome5} -\usepackage{footnote} -\makesavenoteenv{tabular} -\usepackage{enumitem} -\usepackage{tabularray} -\usepackage{fancyvrb} -\usepackage{fancyhdr} -\fancyhf{} -\renewcommand{\headrulewidth}{0pt} -\lfoot{\sffamily\small [wordle]} -\cfoot{\sffamily\small - \thepage{} -} -\rfoot{\hyperlink{matoc}{\small\faArrowAltCircleUp[regular]}} - -%\usepackage{hvlogos} -\usepackage{hologo} -\providecommand\tikzlogo{Ti\textit{k}Z} -\providecommand\TeXLive{\TeX{}Live\xspace} -\providecommand\PSTricks{\textsf{PSTricks}\xspace} -\let\pstricks\PSTricks -\let\TikZ\tikzlogo -\newcommand\TableauDocumentation{% - \begin{tblr}{width=\linewidth,colspec={X[c]X[c]X[c]X[c]X[c]X[c]},cells={font=\sffamily}} - {\LARGE \LaTeX} & & & & &\\ - & {\LARGE \hologo{pdfLaTeX}} & & & & \\ - & & {\LARGE \hologo{LuaLaTeX}} & & & \\ - & & & {\LARGE \TikZ} & & \\ - & & & & {\LARGE \TeXLive} & \\ - & & & & & {\LARGE \hologo{MiKTeX}} \\ - \end{tblr} -} - -\usepackage{hyperref} -\urlstyle{same} -\hypersetup{pdfborder=0 0 0} -\setlength{\parindent}{0pt} -\definecolor{LightGray}{gray}{0.9} - -\usepackage{babel} -\AddThinSpaceBeforeFootnotes -\FrenchFootnotes - -\usepackage{listings} - -\usepackage{newverbs} -\newverbcommand{\motcletex}{\color{cyan!75!black}}{} -\newverbcommand{\packagetex}{\color{violet!75!black}}{} - -\usepackage[most]{tcolorbox} -\tcbuselibrary{listingsutf8} -\newtcblisting{DemoCode}[1][]{% - enhanced,width=0.95\linewidth,center,% - bicolor,size=title,% - colback=cyan!2!white,% - colbacklower=cyan!1!white,% - colframe=cyan!75!black,% - listing options={% - breaklines=true,% - breakatwhitespace=true,% - style=tcblatex,basicstyle=\small\ttfamily,% - tabsize=4,% - commentstyle={\itshape\color{gray}}, - keywordstyle={\color{blue}},% - classoffset=0,% - keywords={},% - alsoletter={-},% - keywordstyle={\color{blue}},% - classoffset=1,% - alsoletter={-},% - morekeywords={center,justify},% - keywordstyle={\color{violet}},% - classoffset=2,% - alsoletter={-},% - morekeywords={GrilleSutom},% - keywordstyle={\color{green!50!black}},% - classoffset=3,% - morekeywords={Couleurs,Arrondi,Unite,Police,CouleurLettres,Lettres,Style,Epaisseur,CouleurBordure},% - keywordstyle={\color{orange}} - },% - #1 -} - -\tcbset{vignettes/.style={% - nobeforeafter,box align=base,boxsep=0pt,enhanced,sharp corners=all,rounded corners=southeast,% - boxrule=0.75pt,left=7pt,right=1pt,top=0pt,bottom=0.25pt,% - } -} - -\tcbset{vignetteMaJ/.style={% - fontupper={\vphantom{pf}\footnotesize\ttfamily}, - vignettes,colframe=purple!50!black,coltitle=white,colback=purple!10,% - overlay={\begin{tcbclipinterior}% - \fill[fill=purple!75]($(interior.south west)$) rectangle node[rotate=90]{\tiny \sffamily{\textcolor{black}{\scalebox{0.66}[0.66]{\textbf{MàJ}}}}} ($(interior.north west)+(5pt,0pt)$);% - \end{tcbclipinterior}} - } -} - -\newcommand\Cle[1]{{\small\sffamily\textlangle \textcolor{orange}{#1}\textrangle}} -\newcommand\cmaj[1]{\tcbox[vignetteMaJ]{#1}\xspace} - -\begin{document} - -\setlength{\aweboxleftmargin}{0.07\linewidth} -\setlength{\aweboxcontentwidth}{0.93\linewidth} -\setlength{\aweboxvskip}{8pt} - -\pagestyle{fancy} - -\thispagestyle{empty} - -\vspace{2cm} - -\begin{center} - \begin{minipage}{0.75\linewidth} - \begin{tcolorbox}[colframe=yellow,colback=yellow!15] - \begin{center} - \begin{tabular}{c} - {\Huge \texttt{wordle} [fr]}\\ - \\ - {\LARGE Des grilles de Wordle (Sutom),} \\ - \\ - {\LARGE avec \textsf{Ti\textit{k}Z}.} \\ - \end{tabular} - - \bigskip - - {\small \texttt{Version \TPversion{} -- \TPdate}} - \end{center} - \end{tcolorbox} -\end{minipage} -\end{center} - -\begin{center} - \begin{tabular}{c} - \texttt{Cédric Pierquet}\\ - {\ttfamily c pierquet -- at -- outlook . fr}\\ - \texttt{\url{https://github.com/cpierquet/wordle}} -\end{tabular} -\end{center} - -\vspace{0.25cm} - -{$\blacktriangleright$~~Créer des grilles de Wordle/Sutom\footnotemark\footnotetext{\url{https://fr.wikipedia.org/wiki/Wordle}}.} - -\vspace{0.25cm} - -{$\blacktriangleright$~~Gestion des couleurs, de la taille\footnotemark\footnotetext{Idées venant de \url{ttps://tex.stackexchange.com/questions/659860/wordle-like-colored-letter-boxes-in-latex}}. - -\vspace{1cm} - -\begin{center} -\begin{GrilleSutom}{LUCIOLE} - LAPINES - LUMIERE - LOURDES - LUCIOLE -\end{GrilleSutom} -\end{center} - -\medskip - -\begin{center} -\begin{GrilleSutom}[Arrondi=0,Couleurs={lightgray,orange,teal},Style=alt,Unite=0.5,Lettres=false]{REBUS} - ABRIS - ROUTE - RUDES - REBUS -\end{GrilleSutom} -% -\hspace{5mm} -% -\begin{GrilleSutom}[Arrondi=0,Couleurs={lightgray,orange,teal},Style=alt,Unite=0.5]{REBUS} - ABRIS - ROUTE - RUDES - REBUS -\end{GrilleSutom} -\end{center} - -\vspace{0.5cm} - -%\hfill{}\textit{Merci à Denis Bitouzé et à Gilles Le Bourhis pour leurs retours et idées !} - -\smallskip - -\vfill - -\hrule - -\medskip - -\TableauDocumentation - -\medskip - -\hrule - -\vspace*{1cm} - -\newpage - -\phantomsection -\hypertarget{matoc}{} - -\tableofcontents - -\vfill - -\section{Historique} - -\verb|v0.1.0|~:~~~~Correction d'un bug avec la version anglaise. - -\verb|v0.1.0|~:~~~~Version initiale. - -\newpage - -\section{Le package wordle} - -\subsection{Le principe du jeu} - -\begin{noteblock} -Wordle est un jeu de lettres en ligne gratuit développé en 2021 par Josh Wardle. Ce jeu est une adaptation directe du jeu télévisé américain Lingo (Motus en France) qui propose de faire deviner un mot par plusieurs tentatives, en indiquant pour chacune d'entre-elles la position des lettres bien placées et mal placées. - -Le but du jeu est de deviner un mot spécifique de cinq lettres en un maximum de six tentatives, en tapant des lettres sur un écran de six lignes de cinq cases chacune. La personne qui joue inscrit sur la première ligne un mot de cinq lettres de son choix et entre sa proposition. Après chaque proposition, les lettres apparaissent en couleurs : le fond gris représente les lettres qui ne se trouvent pas dans le mot recherché, le fond jaune représente les lettres qui se trouvent ailleurs dans le mot, et le fond vert représente les lettres qui se trouvent à la bonne place dans le mot à trouver. - -\smallskip - -\hfill{\scriptsize \url{https://fr.wikipedia.org/wiki/Wordle}} -\end{noteblock} - -\subsection{Le package} - -\begin{noteblock} -Le package propose de quoi afficher, dans son document \LaTeX, une grille de Wordle (ou de Sutom) à l'aide de \TikZ{} et d'une \motcletex!minipage!, avec la possibilité : - -\begin{itemize} - \item de spécifier les dimensions, la couleur ; - \item de choisir le style des lettres mal placées ; - \item de personnaliser les bordure et les coins ; - \item d'afficher ou non les lettres. -\end{itemize} - -Contrairement au jeu \og initial \fg, il est possible de travailler avec des mots de longueur différente de 5 ! -\end{noteblock} - -\begin{importantblock} -Une bonne partie du code, en \hologo{LaTeX3}, est issu d'un fil sur \texttt{tex.stackexchange}, et proposé par l'internaute \textsf{3141592653589793238}. -\end{importantblock} - -\subsection{Chargement du package, packages utilisés} - -\begin{importantblock} -Le package se charge, de manière classique, dans le préambule. - -Il n'existe pas d'option pour le package, et \packagetex!xcolor! n'est pas chargé. -\end{importantblock} - -\begin{DemoCode}[listing only] -\documentclass{article} -\usepackage{wordle} - -\end{DemoCode} - -\begin{noteblock} -\packagetex!wordle! charge les packages suivants : - -\begin{itemize} - \item \packagetex!tikz!; - \item \packagetex!simplekv! ; - \item \packagetex!xstring!. -\end{itemize} - -Il est compatible avec les compilations usuelles en \textsf{latex}, \textsf{pdflatex}, \textsf{lualatex} ou \textsf{xelatex}. -\end{noteblock} - -\vfill~ - -\pagebreak - -\section{Environnement GrilleSutom} - -\subsection{Fonctionnement global} - -\begin{cautionblock} -L'environnement dédié à la création de la grille du Sutom est \packagetex!GrilleSutom!. - -Il fonctionne avec un système de clés, entre \texttt{[...]}, et nécessite de préciser : - -\begin{itemize} - \item le bon mot ; - \item les différentes propositions. -\end{itemize} - -Le code se charge de mettre en forme (grâce à une \motcletex!minipage!) la grille et les différentes couleurs d'aide. -\end{cautionblock} - -\begin{DemoCode}[listing only] -\begin{GrilleSutom}[clés]{mot à trouver} - proposition n°1 - proposition n°2 - proposition n°3 -\end{GrilleSutom} -\end{DemoCode} - -\begin{noteblock} -Comme indiqué dans l'introduction, la grille est créée à l'aide d'un environnement \motcletex!minipage!, avec gestion automatique de la largeur et des espacements. -\end{noteblock} - -\begin{DemoCode}[] -%sortie par défaut -\begin{GrilleSutom}{SUTOM} - SAUCE - SAUTS - SUTOM -\end{GrilleSutom} -\end{DemoCode} - -\subsection{Clés et options} - -\begin{tipblock} -Le premier argument, optionnel et entre \texttt{[...]}, propose les \Cle{clés} suivantes : - -\begin{itemize} - \item \Cle{Couleurs} : = couleur des cases, sous la forme \Cle{fond,mal placée,bien placée} ; - - \hfill{}défaut : \Cle{cyan!75!black,yellow,red},% - \item \Cle{Arrondi} := arrondi des coins, en mm ; \hfill{}défaut : \Cle{0.1} - \item \Cle{Unite} := largeur des cases, en cm ; \hfill{}défaut : \Cle{1} - \item \Cle{Police} := police des lettres ; \hfill{}défaut : \Cle{\textbackslash LARGE\textbackslash bfseries\textbackslash sffamily} - \item \Cle{CouleurLettres} := couleur des lettres ; \hfill{}défaut : \Cle{white} - \item \Cle{CouleurBordure} := couleur de la bordure des cases ; \hfill{}défaut : \Cle{white} - \item \Cle{Lettres} := booléen pour afficher les lettre ; \hfill{}défaut : \Cle{true} - \item \Cle{Style} := style parmi \Cle{rond / autre} pour changer le style ; \hfill{}défaut : \Cle{rond} - \item \Cle{Epaisseur} := épaisseur des traits, en mm. \hfill{}défaut : \Cle{0.25} -\end{itemize} -\vspace*{-\baselineskip}\leavevmode -\end{tipblock} - -\begin{tipblock} -Le second argument, obligatoire et entre \texttt{\{...\}} correspond au mot correct à trouver. - -\smallskip - -Les différentes propositions sont à donner (ligne par ligne ou séparées par des espaces) dans le corps de l'environnement. -\end{tipblock} - -\subsection{Exemples} - -\begin{DemoCode}[] -\begin{GrilleSutom}{BOURDON} - BALEINE - BOURBON - BROMURE - BOURDON -\end{GrilleSutom} -% -\hspace{5mm} -% -\begin{GrilleSutom}[Style=alt]{BOURDON} - BALEINE BOURBON BROMURE BOURDON -\end{GrilleSutom} -\end{DemoCode} - -\begin{DemoCode}[] -\begin{GrilleSutom} - [Style=alt,Epaisseur=0.3,CouleurBordure=black,% - Couleurs={lightgray,orange,teal}]% - {BOURDON} - BALEINE BOURBON BROMURE BOURDON -\end{GrilleSutom} -% -\hspace{5mm} -% -\begin{GrilleSutom} - [Arrondi=0,Epaisseur=0.3,CouleurBordure=black,% - Couleurs={lightgray,orange,teal}]% - {BOURDON} - BALEINE BOURBON BROMURE BOURDON -\end{GrilleSutom} -\end{DemoCode} - -\begin{DemoCode}[] -\begin{GrilleSutom}[Unite=2,Police=\Huge\ttfamily,CouleurLettres=black]{BOURDON} - BALEINE - BOURBON - BROMURE - BOURDON -\end{GrilleSutom} -\end{DemoCode} - -\begin{DemoCode}[] -\begin{GrilleSutom}% - [Unite=0.75,Arrondi=0,Couleurs={cyan,orange,violet},% - Style=alt,Lettres=false]{REBUS} - ABRIS - ROUTE - RUDES - REBUS -\end{GrilleSutom} -\hspace{5mm} -\begin{GrilleSutom}% - [Unite=0.75,Arrondi=0,Couleurs={cyan,orange,violet},Style=alt]{REBUS} - ABRIS - ROUTE - RUDES - REBUS -\end{GrilleSutom} -\end{DemoCode} - -\end{document}
\ No newline at end of file diff --git a/graphics/pgf/contrib/wordle/tex/wordle.sty b/graphics/pgf/contrib/wordle/tex/wordle.sty deleted file mode 100644 index 4df1801ba0..0000000000 --- a/graphics/pgf/contrib/wordle/tex/wordle.sty +++ /dev/null @@ -1,298 +0,0 @@ -% Author.........: C. Pierquet -% licence........: Released under the LaTeX Project Public License v1.3c or later, see http://www.latex-project.org/lppl.txtf -% Inspiration....: https://tex.stackexchange.com/questions/659860/wordle-like-colored-letter-boxes-in-latex - -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{wordle}[2023/09/03 v0.1.1 Wordle grid] -% 0.1.1 Coorection d'un bug sur la version anglaise -% 0.1.0 Version initiale + quelques modèles - -%------Packages utiles -\RequirePackage{tikz} -\RequirePackage{simplekv} -\RequirePackage{xstring} - -%commandes utiles -\usepackage{expl3} -\ExplSyntaxOn - -%boite en [fr] -\cs_new:Npn \l__sutom_boite_lettre:nn #1#2#3 -{ - \ifboolKV[SUTOM]{Lettres}% - {% - \tikz \draw[rounded~corners=\fpeval{#3*\SutomUnit}cm,draw=\SutomBorder,line~width=\SutomWidth~mm,fill=#1] (0,0) rectangle++ (\SutomUnit,\SutomUnit) node[midway,font=\SutomFonte,text=\SutomFonteColor,scale=\SutomUnit] {#2} ; - }% - {% - \tikz \draw[rounded~corners=\fpeval{#3*\SutomUnit}cm,draw=\SutomBorder,line~width=\SutomWidth~mm,fill=#1] (0,0) rectangle++ (\SutomUnit,\SutomUnit) ; - }% -} - -\cs_new:Npn \l__sutom_boite_lettre_rond:nn #1#2#3#4 -{ - \IfStrEq{\SutomStyle}{rond} - {% - \tikz {\draw[rounded~corners=\fpeval{#4*\SutomUnit}cm,draw=\SutomBorder,line~width=\SutomWidth~mm,fill=#1] (0,0) rectangle++ (\SutomUnit,\SutomUnit) ; - \ifboolKV[SUTOM]{Lettres}% - {% - \draw[line~width=\SutomWidth~mm,draw=#2,fill=#2] ({0.5*\SutomUnit},{0.5*\SutomUnit}) circle[radius=\fpeval{0.5*\SutomUnit-0.1*\SutomWidth}] node[font=\SutomFonte,text=\SutomFonteColor,scale=\SutomUnit] {#3} ; - }% - {% - \draw[line~width=\SutomWidth~mm,draw=#2,fill=#2] ({0.5*\SutomUnit},{0.5*\SutomUnit}) circle[radius=\fpeval{0.5*\SutomUnit-0.1*\SutomWidth}]; - }% - }% - }% - {% - \ifboolKV[SUTOM]{Lettres}% - {% - \tikz \draw[rounded~corners=\fpeval{#4*\SutomUnit}cm,line~width=0\SutomWidth~mm,draw=\SutomBorder,fill=#2] (0,0) rectangle++ (\SutomUnit,\SutomUnit) node[midway,font=\SutomFonte,text=\SutomFonteColor,scale=\SutomUnit] {#3} ; - }% - {% - \tikz \draw[rounded~corners=\fpeval{#4*\SutomUnit}cm,line~width=\SutomWidth~mm,draw=\SutomBorder,fill=#2] (0,0) rectangle++ (\SutomUnit,\SutomUnit) ; - }% - }% -} - -%boite en [en] -\cs_new:Npn \l__wordle_boite_lettre:nn #1#2#3 -{ - \ifboolKV[WORDLE]{Letters}% - {% - \tikz \draw[rounded~corners=\fpeval{#3*\SutomUnit}cm,draw=\SutomBorder,line~width=\SutomWidth~mm,fill=#1] (0,0) rectangle++ (\SutomUnit,\SutomUnit) node[midway,font=\SutomFonte,text=\SutomFonteColor,scale=\SutomUnit] {#2} ; - }% - {% - \tikz \draw[rounded~corners=\fpeval{#3*\SutomUnit}cm,draw=\SutomBorder,line~width=\SutomWidth~mm,fill=#1] (0,0) rectangle++ (\SutomUnit,\SutomUnit) ; - }% -} - -\cs_new:Npn \l__wordle_boite_lettre_rond:nn #1#2#3#4 -{ - \IfStrEq{\SutomStyle}{default} - {% - \ifboolKV[WORDLE]{Letters}% - {% - \tikz \draw[rounded~corners=\fpeval{#4*\SutomUnit}cm,line~width=\SutomWidth~mm,draw=\SutomBorder,fill=#2] (0,0) rectangle++ (\SutomUnit,\SutomUnit) node[midway,font=\SutomFonte,text=\SutomFonteColor,scale=\SutomUnit] {#3} ; - }% - {% - \tikz \draw[rounded~corners=\fpeval{#4*\SutomUnit}cm,line~width=\SutomWidth~mm,draw=\SutomBorder,fill=#2] (0,0) rectangle++ (\SutomUnit,\SutomUnit) ; - }% - }% - {% - \tikz {\draw[rounded~corners=\fpeval{#4*\SutomUnit}cm,draw=\SutomBorder,line~width=\SutomWidth~mm,fill=#1] (0,0) rectangle++ (\SutomUnit,\SutomUnit) ; - \ifboolKV[WORDLE]{Letters}% - {% - \draw[line~width=\SutomWidth~mm,draw=#2,fill=#2] ({0.5*\SutomUnit},{0.5*\SutomUnit}) circle[radius=\fpeval{0.5*\SutomUnit-0.1*\SutomWidth}] node[font=\SutomFonte,text=\SutomFonteColor,scale=\SutomUnit] {#3} ; - }% - {% - \draw[line~width=\SutomWidth~mm,draw=#2,fill=#2] ({0.5*\SutomUnit},{0.5*\SutomUnit}) circle[radius=\fpeval{0.5*\SutomUnit-0.1*\SutomWidth}]; - }% - }% - }% -} - -\seq_new:N \l_wordle_seq % the answer -\prop_new:N \l_wordle_prop % count letters in wordle -\seq_new:N \l_words_seq % list of all words -\prop_new:N \l_word_prop % count letters in word -\int_new:N \l_letter_int % index of current letter in word - -% a conditional for nonnegative prop counter in \l_word_prop -\prg_new_protected_conditional:Npnn \if_wordle_letter_nonnegative:n #1 {TF} -{ - \prop_if_in:NnTF \l_word_prop {#1} - { % letter in in prop - \prop_get:NnN \l_word_prop {#1} \l_tmpa_tl - \int_compare:nNnTF {\l_tmpa_tl} < {0} - {\prg_return_false:} {\prg_return_true:} - } - {\prg_return_false:} -} - -% a conditional for comparing letters -\prg_new_protected_conditional:Npnn \if_wordle_letters_agree:n #1 {T, TF} -{ - \str_set:Nx \l_tmpa_str {\seq_item:Nn \l_wordle_seq {\l_letter_int}} - \str_if_eq:nVTF {#1} \l_tmpa_str {\prg_return_true:} {\prg_return_false:} -} - -% add #3 to <prop=#1>.#2 -\cs_new_protected:Npn \wordle__add_to_prop_counter:Nnn #1#2#3 -{ - \prop_put_if_new:Nnn #1 {#2} {0} - \prop_pop:NnN #1 {#2} \l_tmp_a - \prop_put:Nnx #1 {#2} {\int_eval:n {#3+\l_tmp_a}} -} - -% make \l_wordle_prop<x> = #x's in wordle_seq -\cs_new_protected:Npn \count_letters_in_wordle:n #1 -{ - \wordle__add_to_prop_counter:Nnn \l_wordle_prop {#1} {1}% -} - -% first run: subtract correct matches from letter counts -\cs_new:Npn \count_letters_in_word:n #1 -{ - \int_incr:N \l_letter_int - \if_wordle_letters_agree:nT {#1} - { \wordle__add_to_prop_counter:Nnn \l_word_prop {#1} {-1} }% -} - -%commande [fr] -% on the second run we print a coloured wordle word -\cs_new:Npn \write_letters_in_word:n #1 -{ - \int_incr:N \l_letter_int - \if_wordle_letters_agree:nTF {#1} - { \l__sutom_boite_lettre:nn {\SutomBienPlacee}{#1}{\SutomRounded} } - { - % subtract 1 from the prop counter - \wordle__add_to_prop_counter:Nnn \l_word_prop {#1} {-1} - % if the counter is non-negative this is a pseudo match - \if_wordle_letter_nonnegative:nTF {#1} - { \l__sutom_boite_lettre_rond:nn {\SutomCoulFond}{\SutomCoulMalPlacee}{#1}{\SutomRounded} } - { \l__sutom_boite_lettre:nn {\SutomCoulFond}{#1}{\SutomRounded} } - }% -} - -%commande [en] -% on the second run we print a coloured wordle word -\cs_new:Npn \write_letters_in_wordle:n #1 -{ - \int_incr:N \l_letter_int - \if_wordle_letters_agree:nTF {#1} - { \l__wordle_boite_lettre:nn {\SutomBienPlacee}{#1}{\SutomRounded} } - { - % subtract 1 from the prop counter - \wordle__add_to_prop_counter:Nnn \l_word_prop {#1} {-1} - % if the counter is non-negative this is a pseudo match - \if_wordle_letter_nonnegative:nTF {#1} - { \l__wordle_boite_lettre_rond:nn {\SutomCoulFond}{\SutomCoulMalPlacee}{#1}{\SutomRounded} } - { \l__wordle_boite_lettre:nn {\SutomCoulFond}{#1}{\SutomRounded} } - }% -} - -%clés [fr] -\defKV[SUTOM]{% - Couleurs=\def\SutomCouleurs{#1},% - Arrondi=\def\SutomRounded{#1},% - Unite=\def\SutomUnit{#1},% - Police=\def\SutomFonte{#1},% - CouleurLettres=\def\SutomFonteColor{#1},% - Style=\def\SutomStyle{#1},% - Epaisseur=\def\SutomWidth{#1},% - CouleurBordure=\def\SutomBorder{#1} -} - -\setKVdefault[SUTOM]{% - Couleurs={cyan!75!black,yellow,red},% - Arrondi=0.1,% - Unite=1,% - Police=\LARGE\bfseries\sffamily,% - CouleurLettres=white,% - Lettres=true,% - Style=rond,% - Epaisseur=0.25,% - CouleurBordure=white -} - -%environnement [fr] -\NewDocumentEnvironment{GrilleSutom}{ O{} m b }% -{% - \restoreKV[SUTOM]% - \setKV[SUTOM]{#1}% - \StrBefore{\SutomCouleurs}{,}[\SutomCoulFond]% - \StrBetween[1,2]{\SutomCouleurs}{,}{,}[\SutomCoulMalPlacee]% - \StrBehind[2]{\SutomCouleurs}{,}[\SutomBienPlacee]% - \StrLen{#2}[\SutomNbLettres]% - \def\SutomLarg{\fpeval{1.01*\SutomUnit*\SutomNbLettres}}% - \begin{minipage}{\SutomLarg~cm} - \lineskip=0pt% - \parindent=0pt% - % split the answer into letters - \seq_set_split:Nnn \l_wordle_seq {} {#2} - % we need to count the number of times each letter appears in \l_wordle_seq - \prop_clear:N \l_wordle_prop - \tl_map_function:nN {#2} \count_letters_in_wordle:n - % split the solution into words - \regex_split:nnN {\s} {#3} \l_words_seq - % process the words - \seq_map_inline:Nn \l_words_seq - { - \int_zero:N \l_letter_int - \prop_set_eq:NN \l_word_prop \l_wordle_prop - \tl_map_function:nN {##1} \count_letters_in_word:n - \int_zero:N \l_letter_int - \tl_map_function:nN {##1} \write_letters_in_word:n - \par - } -}% -{% - \end{minipage}% -} - -%clés [en] -\definecolor{WordleBack}{HTML}{797D7F} -\definecolor{WordleBad}{HTML}{CAB557} -\definecolor{WordleGood}{HTML}{6AAB64} - -\defKV[WORDLE]{% - Colors=\def\SutomCouleurs{#1},% - Rounded=\def\SutomRounded{#1},% - Unit=\def\SutomUnit{#1},% - Fonte=\def\SutomFonte{#1},% - ColorLetters=\def\SutomFonteColor{#1},% - Style=\def\SutomStyle{#1},% - Thickness=\def\SutomWidth{#1},% - BorderColor=\def\SutomBorder{#1} -} - -\setKVdefault[WORDLE]{% - Colors={WordleBack,WordleBad,WordleGood},% - Rounded=0.1,% - Unit=1,% - Fonte=\LARGE\bfseries\sffamily,% - CouleurLettres=white,% - Letters=true,% - Style=default,% - Thick=0.25,% - BorderColor=white -} - -%environnement [en] -\NewDocumentEnvironment{WordleGrid}{ O{} m b } -{% - \restoreKV[WORDLE]% - \setKV[WORDLE]{#1}% - \StrBefore{\SutomCouleurs}{,}[\SutomCoulFond]% - \StrBetween[1,2]{\SutomCouleurs}{,}{,}[\SutomCoulMalPlacee]% - \StrBehind[2]{\SutomCouleurs}{,}[\SutomBienPlacee]% - \StrLen{#2}[\SutomNbLettres]% - \def\SutomLarg{\fpeval{1.01*\SutomUnit*\SutomNbLettres}}% - \begin{minipage}{\SutomLarg~cm} - \parindent=0pt - \lineskip=0pt - % split the answer into letters - \seq_set_split:Nnn \l_wordle_seq {} {#2} - % we need to count the number of times each letter appears in \l_wordle_seq - \prop_clear:N \l_wordle_prop - \tl_map_function:nN {#2} \count_letters_in_wordle:n - % split the solution into words - \regex_split:nnN {\s} {#3} \l_words_seq - % process the words - \seq_map_inline:Nn \l_words_seq - { - \int_zero:N \l_letter_int - \prop_set_eq:NN \l_word_prop \l_wordle_prop - \tl_map_function:nN {##1} \count_letters_in_word:n - \int_zero:N \l_letter_int - \tl_map_function:nN {##1} \write_letters_in_wordle:n - \par - } -}% -{% - \end{minipage}% -} - -\ExplSyntaxOff - -\endinput
\ No newline at end of file diff --git a/graphics/pgf/contrib/wordle/wordle-doc-en.pdf b/graphics/pgf/contrib/wordle/wordle-doc-en.pdf Binary files differnew file mode 100644 index 0000000000..7845bc31b5 --- /dev/null +++ b/graphics/pgf/contrib/wordle/wordle-doc-en.pdf diff --git a/graphics/pgf/contrib/wordle/wordle-doc-en.tex b/graphics/pgf/contrib/wordle/wordle-doc-en.tex new file mode 100644 index 0000000000..a638ed9496 --- /dev/null +++ b/graphics/pgf/contrib/wordle/wordle-doc-en.tex @@ -0,0 +1,921 @@ +% !TeX TS-program = pdflatex + +\documentclass[svgnames]{report} +\usepackage{wordle} +\usepackage{manfnt} +\usepackage{enumitem} +\setlist[description]{font=\sffamily\bfseries\color{ForestGreen},labelwidth=\textwidth} +\usepackage{booktabs} +\usepackage[a4paper,margin=18mm]{geometry} +\synctex=1 +\parindent=0pt +\parskip=2mm + +\usepackage{cmap} % fix search and cut-and-paste in Acrobat +\setcounter{secnumdepth}{0} + +\usepackage{listings}\lstset{language=[LaTeX]TeX,framerule=2pt} +\lstset{language=[LaTeX]TeX, + texcsstyle=*\bfseries\color{Peru}, + backgroundcolor=\color{Ivory}, + numbers=none, + breaklines=true, + keywordstyle=\color{Sienna}, + commentstyle=\color{BurlyWood}, + tabsize=2, + morekeywords={Wordle,wordle,GrilleSutom}, + resetmargins=true, +} +% hyperref links to ctan +\newcommand\ctan[1]{\href{https://www.ctan.org/pkg/#1}{\texttt{#1}}} + +\newcommand\Section[1]{\subsection{\textcolor{DarkGreen}{#1}}} + +\ExplSyntaxOn +\NewDocumentCommand\option{ omo }{% + \IfNoValueTF{#1}{\textsf{#2}} + {% + \textbf{\textcolor{Crimson}{#2}} + \str_if_empty:nF {#1}{~(default:~\textcolor{DarkRed}{#1})}% + \IfNoValueF{#3}{\hfill\textcolor{Gray}{[accepts:~#3]}}% + }% + \index{#2}% +} +\ExplSyntaxOff + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\usepackage{imakeidx} +\indexsetup{level=\section*, toclevel=section, noclearpage} +\makeindex[intoc,columns=3] + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\usepackage[skins,listings]{tcolorbox} +\usetikzlibrary{backgrounds, shapes.geometric} % for tikz={framed,...} + +\DeclareTotalTCBox\keyword{ O{} v }{ + fontupper=\sffamily, + nobeforeafter, + skin=tile, + verbatim, + on line, + tcbox raise base, + top=0pt,bottom=0pt,left=0mm,right=0mm, + colback=OldLace, + colupper=ForestGreen, + #1} +{#2} + +\lstdefinestyle{tikz}{style=tcblatex, + classoffset=0, + texcsstyle=*\color{DarkGoldenrod},% + deletetexcs={begin, end}, + moretexcs={,% + node, + draw, + true, + false + },% + classoffset=1, + keywordstyle=\color{ForestGreen},% + morekeywords={wordle,GrilleSutom}, + classoffset=2, + keywordstyle=\color{Crimson},% + morekeywords={ + absent, + align, + border, + borders, + case, + color, + colors, + colour, + colours, + correct, + empty, + font, + frame, + frames, + letters, + lower, + name, + natural, + noalign, + noletters, + params, + present, + rounded, + rows, + scale, + sensitive, + separation, + shape, + shapes, + size, + strict, + style, + style, + text, + thickness, + tikz, + tile, + upper, + }, + classoffset=3, + keywordstyle=\color{DarkOrange},% + morekeywords={ + hard, + standard, + sutom, + } +} + +\DeclareTCBListing{example}{ !O{} }{% + skin=bicolor, + colframe=MediumSeaGreen, + colbacklower=OldLace, + colback=LawnGreen!20, + lefthand width=50mm, + listing style=tikz, + sidebyside, + sidebyside align=center, + sidebyside gap=4mm, + text and listing, + text outside listing, + boxsep = 0pt, + #1 +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + +\makeatletter +\author{Andrew Mathas and Cédric Pierquet} +\usepackage{tikz} +\usetikzlibrary{shadows.blur} +\tikzset{shadowed/.style={blur shadow={shadow blur steps=5}, + bottom color=ForestGreen!30, + draw=MediumSeaGreen!70, + shade, + font=\normalfont\Huge\bfseries\scshape, + rounded corners=8pt, + top color=SeaGreen, + }, + boxes/.style={draw=SeaGreen, + fill=Cornsilk, + font=\sffamily\small, + inner sep=5pt, + rectangle, + rounded corners=8pt, + text=DarkGreen, + } +} +\newcommand\Wordle{% + \begin{tikzpicture}[remember picture,overlay] + \node[yshift=-3cm] at (current page.north west) + {\begin{tikzpicture}[remember picture, overlay] + \draw[shadowed](30mm,0) rectangle node[white]{wordle} (\paperwidth-30mm,16mm); + \node[anchor=west,boxes] at (4cm,0cm) {\@author}; + \node[anchor=east,boxes] at (\paperwidth-4cm,0) {Version \wordle@version}; + \end{tikzpicture} + }; + \end{tikzpicture} + \vspace*{20mm} +} + +\def\@oddfoot{\textsc{Wordle} --- \wordle@version~(released~\wordle@release)\hfill\thepage} + +\usepackage[colorlinks=true,linkcolor=blue,urlcolor=MediumBlue]{hyperref} +\hypersetup{ + pdfcreator={ Generated by pdfLaTeX }, + pdfinfo={ + Author ={ Andrew Mathas and Cédric Pierquet}, + Keywords={ wordle }, + License ={ LaTeX Project Public License v1.3c or later }, + Subject ={ LaTeXing Wordle puzzles }, + Title ={ Wordle - \wordle@version } + }, +} +\makeatother + +\begin{document} + + \Wordle + + This package provides a stupidly feature-rich way of creating + \keyword{Wordle} puzzles in \LaTeX, which + \href{https://en.wikipedia.org/wiki/Wordle}{Wikipedia} describes as a + hugely popular web-based word game created and developed by Welsh + software engineer Josh Wardle. This package is an enhanced version of + one of the solutions to a question asked by \textcolor{FireBrick}{valerio\_new} + on + \href{https://tex.stackexchange.com/questions/659860/wordle-like-colored-letter-boxes-in-latex/660056#660056}{tex.stackexchange.com}. + + This package provides the \keyword{wordle} environment, which uses the + syntax: + + \begin{tcblisting}{ + listing only, + skin=bicolor, + colframe=MediumSeaGreen, + colbacklower=OldLace, + colback=LawnGreen!20, + listing style=tikz, + boxsep = 0pt, + } + % \usepackage{wordle} + \begin{wordle}[wordle settings]{solution}[optional tikz commands] + guess1 guess2 ... + \end{wordle} + \end{tcblisting} + \index{environment!wordle} + \index{wordle} + + and the \keyword{GrilleSutom} environment, for \keyword{Sutom}, the French version of + the games: + + \begin{tcblisting}{ + listing only, + skin=bicolor, + colframe=MediumSeaGreen, + colbacklower=OldLace, + colback=LawnGreen!20, + listing style=tikz, + boxsep = 0pt, + } + % \usepackage{wordle} + \begin{GrilleSutom}[sutom settings]{solution}[optional TikZ commands] + guess1 guess2 ... + \end{GrilleSutom} + \end{tcblisting} + \index{environment!GrilleSutom} + \index{GrilleSutom} + \index{sutom} + + The words in the puzzle can be entered on a single lines, or on separate + lines. Here are some examples: + + \begin{example} + \begin{wordle}{ANVIL} + % English version of sutom (wordle) + CRANE + NATAL + ANVIL + \end{wordle} + \end{example} + + \begin{example} + % French version of wordle (sutom) + \begin{GrilleSutom}{REBUS} + ABRIS + ROUTE + REBUS + \end{GrilleSutom} + \end{example} + + As in the online puzzles, the \keyword{wordle} environment + automatically colours the letter tiles + \keyword[colback=WordleCorrect,colupper=White]{green} + when the letter is in the same position as the solution, and as + \keyword[colback=WordlePresent,colupper=White]{gold} when + the letter is in the solution but it is not in the correct position. + Similarly, \keyword{GrilleSutom} colours the correct letters + \keyword[colback=WordleSutomCorrect,colupper=White]{red} + and the present letters + \keyword[colback=WordleSutomPresent,colupper=White]{gold}. + As described below, these colours can be changed to suit your tastes. + + The number of letters in the puzzle is determined by the solution, + being constrained only by the page width. + + \begin{example} + \begin{wordle}[rows=4]{orange} + normal + orders + orange + \end{wordle} + \end{example} + + The letters in the puzzle can be entered in upper case, lower case, or + mixed case. By default, the case of the letters is ignored when + determining the colours of the letter tiles. + + As described below, the \keyword{wordle} and \keyword{GrilleSutom} + environments accept an array of different options that change the + colours, fonts, and shapes of the tile. In addition, you can the case + sensitivity of the environments, add extra rows to the puzzle, disable + special formatting of the \textit{letter tiles}. These options are + given as a comma separated list key-value pairs. They can be set + locally, using the optional argument of the \keyword|wordle| + environment, or they can be set globally (more accurately, in the + current \LaTeX\ group) using the \keyword{\WordleSetup} command + \index{\textbackslash WordleSetup}, or as global package options, via + \keyword{\usepackage[options]{wordle}}. The order of the options does + not matter, except that later options take precedence over earlier + ones, with the exception of \option{tikz} and \option{tile style} keys + which are always applied last. + + The \keyword{wordle} puzzles are drawn using \ctan{TikZ}, with each + letter in the puzzle sitting inside a \ctan{TikZ} node. Many of the + options control the settings of these nodes. + + The descriptions of the options below are grouped according to their + function. + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \Section{Wordle styles} + + The \option{style} key can be used to change many characteristics of + the tiles in a \keyword{wordle} puzzle, including their colours, the + fonts and so on. The more common settings can be setting using the + \option{style} keyword. \textit{The style should always be set first + because, otherwise, the style settings may override earlier settings.} + + The following styles are supported: + + \textcolor{DarkOrange}{sutom} + \index{style!sutom} + \index{sutom} + + \begin{example} + \begin{wordle}[style=sutom]{ANVIL} + CRANE + NATAL + ANVIL + \end{wordle} + \end{example} + + The \textcolor{DarkOrange}{sutom} style is the default + style for the \keyword{GrilleSutom} environment. + + \textcolor{DarkOrange}{standard} + \index{style!standard} + + \begin{example} + \begin{wordle}[style=standard]{ANVIL} + CRANE + NATAL + ANVIL + \end{wordle} + \end{example} + + The \textcolor{DarkOrange}{standard} style is the default style for the + \keyword{wordle} environment. + + \textcolor{DarkOrange}{hard} + \index{style!hard} + + \begin{example} + \begin{wordle}[style=hard]{ANVIL} + CRANE + NATAL + ANVIL + \end{wordle} + \end{example} + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \Section{Options for the individual styles of the letter tiles} + + There are four types of letter tiles in \keyword{wordle}: + \option{absent}, \option{present}, \option{correct} and + \option{empty}, corresponding to letters not in the solution, + incorrectly placed letters, correctly placed letters, and empty + tiles, respectively. The options in this section can be used to set + the text, tile and border colours, shapes, and frames of these tiles. + + The letter tiles in a \keyword{wordle} environment are typeset inside + a \ctan{TikZ} \keyword{\node}. The options below control the different + style settings of these nodes. + + \option[--]{colours}[comma separated list of valid colours] + + The \option{colours} option is a short-hand for specifying the colours + of the \option{absent}, \option{present}, \option{correct} and + \option{empty} tiles, in that order. Later colours can be omitted but + the colours should be given in this order, from left to right. + If only one colour is given then this colour is applied to all tiles. + + \begin{example} + \begin{wordle}[colours={LightGray,Orange,Teal}]{cellar} + pounds + taylor + cellar + \end{wordle} + \end{example} + + The colours can also be set individually using \option{absent colour}, + \option{present colour}, \option{correct colour} and \option{empty + colour}. To support north American dialects, is also possible to use + \option{colors}, \option{absent color}, \option{present color}, + \option{correct color} and \option{empty color}. + + \begin{example} + \begin{wordle}[absent colour=DarkGray,present color=Salmon, + correct color=SeaGreen]{cellar} + pounds + taylor + cellar + \end{wordle} + \end{example} + + \option[white]{borders}[comma separated list of valid colours] + + Similar to the \option{colours} option, this is a short-hand for the + setting border colour of the \option{absent}, \option{present}, + \option{correct} and \option{empty} tiles, in that order. + If only one colour is given then this colour is applied to all tiles. + + \begin{example} + \begin{wordle}[borders={red, orange,blue}]{ANVIL} + CRANE + NATAL + ANVIL + \end{wordle} + \end{example} + + You can set the border borders of the individual tiles using + \option{absent border}, \option{present border}, \option{correct + border} and \option{empty border} + + \option[false]{frames}[comma separated list of true/false] + + This is a short-hand for adding a rectangular frame around the + \option{absent}, \option{present}, \option{correct} and \option{empty} + tiles, in that order, with the same background colour as the + \option{absent} file. This is only useful for non-square tiles. + + \begin{example} + \begin{wordle}[frames={false,true,true}, shapes=circle]{ANVIL} + CRANE + NATAL + ANVIL + \end{wordle} + \end{example} + + You can set the frames of the individual tiles using + \option{absent frame}, \option{present frame}, + \option{correct frame} and \option{empty~frame}. + + \option[rectangle]{shapes}[comma separated list of TikZ shapes] + + Similar to the \option{colours} option, this is a short-hand for the + setting shape colour of the \option{absent}, \option{present}, + \option{correct} and \option{empty} tiles, in that order. + + \begin{example} + \begin{wordle}[shapes={circle, rectangle, circle}]{ANVIL} + CRANE + NATAL + ANVIL + \end{wordle} + \end{example} + + You can set the shape shapes of the individual tiles using + \option{absent shape}, \option{present shape}, + \option{correct shape} and \option{empty shape} + You can use the shapes provided by the \ctan{TikZ} + \texttt{shapes.geometric} package, including \texttt{diamond}, + \texttt{ellipse}, \texttt{trapezium} and \texttt{star}; see + section~71.2 of the \ctan{TikZ} manual. + + \begin{example} + % \usepackage{shapes.geometric} + \begin{wordle}[shapes={diamond, ellipse, star}]{LADLE} + FLAIL + LAPEL + * + LADLE + LOVER + \end{wordle} + \end{example} + + \option[white]{text}[comma separated list of valid colours] + + This is a short-hand for the setting the text colours of the + \option{absent}, \option{present}, \option{correct} and \option{empty} + tiles, in that order. + + \begin{example} + \begin{wordle}[text={red, orange,blue}]{ANVIL} + CRANE + NATAL + ANVIL + \end{wordle} + \end{example} + + You can set the text borders of the individual tiles using + \option{absent text}, \option{present border}, \option{correct + text} and \option{empty border} + + + \Section{Common tile characteristics} + + The following options apply to all tiles. + + \option[]{noalign} (default) \qquad + \option[]{align} + + The options tweak the vertical alignment of the letters in each row of + the puzzle. This is only likely to be useful if you have lower case + letters in your puzzle. + + \begin{example} + \begin{wordle}[align]{agony} + groan + angry + agony + \end{wordle} + \end{example} + + \begin{example} + \begin{wordle}[noalign]{agony} % the default + groan + angry + agony + \end{wordle} + \end{example} + + \option[\textbackslash Large\textbackslash bfseries\textbackslash sffamily]{font} + [LaTeX font specification] + + Sets the font used by all \keyword{wordle} letters. Any valid sequence + of \LaTeX\ font commands can be used. + + \begin{example} + \begin{wordle}[font=\large\sffamily]{ANVIL} + CRANE + NATAL + ANVIL + \end{wordle} + \end{example} + + \option[1mm]{rounded}[a length] + + Set TikZ \texttt{rounded corners} key for the \keyword{wordle} letter tiles. + + \begin{example} + \begin{wordle}[rounded=2mm]{ANVIL} + CRANE + NATAL + ANVIL + \end{wordle} + \end{example} + + \option[0.5mm]{separation}[a length] + + Sets the separation distance between the \keyword{wordle} letter + tiles. + + \begin{example} + \begin{wordle}[separation=2mm, borders=black]{ANVIL} + CRANE + NATAL + ANVIL + \end{wordle} + \end{example} + + \option[1]{scale}[a number] + + The \option{scale} option rescales the \keyword{wordle} environment. + The \option{scale} alters the dimensions sets by the \option{rounded}, + \option{separation} \option{size} and \option{thickness} options. If + you change the scale, then you will almost certainly want + to change font size font as well, which you can do using the + \option{font} option: + + \begin{example} + \begin{wordle}[scale=1.5, font=\huge\bfseries]{SIZE} + HELP + WISE + SIZE + \end{wordle} + \end{example} + + \option[8mm]{size}[a length] + + The \option{size} option sets the size of the \keyword{wordle} letter + tiles. Unlike the \option{scale} option, \option{size} only changes + the dimensions of the letter tiles. + + \begin{example} + \begin{wordle}[size=10mm, font=\huge\bfseries]{LADLE} + FLAIL LAPEL * LADLE + \end{wordle} + \end{example} + + \option[0.25mm]{thickness}[a length] + + Sets the border thickness of the \keyword{wordle} letter tiles. By + default, the borders of the tiles are white, which makes this setting + hard to see, so the following example changes the border to red. + + \begin{example} + \begin{wordle}[thickness=1mm, borders=red]{LADLE} + FLAIL + LAPEL + LADLE + \end{wordle} + \end{example} + + \option[--]{tile style}[comma separated list of TikZ style keys] + + A comma-separated list of \ctan{Tikz} node keys that are appended to + the style of the \ctan{TikZ} node that contains each of the + \keyword{wordle} letters. Some of the options given above can be set + directly using the \option{tile style} option. When using the + \option{tile style}, be careful not to break the special formatting of + letters provided by the \keyword{wordle} environment.\par + + With most of the \keyword{wordle} options, the latter options take + precedence, however, the \option{tile style} option is applied last, + so it overrides any competing options. + + % TODO: Fix this because it looks like this style is being applied + % twice because the PDF file shows a rotation of 90 = 2*45... + \begin{example} + \begin{wordle}[tile style={rotate=45}]{ANVIL} + CRANE + NATAL + ANVIL + \end{wordle} + \end{example} + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \Section{Extra rows and columns} + + By default, all of the words in a \keyword{wordle} puzzle are assumed + to have the same number of letters as the solution, and the number of + rows in the puzzle is number of words given in the environment. The + options below give more control over the number of rows and columns in + the puzzle. + + \option[]{letters} (default)\qquad + \option[]{noletters} + + By default, the letters in the puzzle are printed. You can hide the + letters from the puzzle, while still keeping the \keyword{wordle} tile + colouring, using \option{noletters}. + + \begin{example} + \begin{wordle}[letters]{CRAZE} % the default + TRACE + CREAM + CRAZE + \end{wordle} + \end{example} + + \begin{example} + \begin{wordle}[noletters]{CRAZE} + TRACE + CREAM + CRAZE + \end{wordle} + \end{example} + + \option[false]{strict}[true/false/--] + + By default, the \keyword{wordle} environment does not check that each + word in the puzzle has the same length as the solution, so missing + and extra letters receive no special processing. + + \begin{example} + \begin{wordle}[strict=false]{CRAZE} % the default + GRAIL + CRAMPS + CRAM + CRABS + \end{wordle} + \end{example} + + The \option{strict} option enforces the word length in the puzzle by + marking missing letters as incorrect and striking out extra letters. + + \begin{example} + \begin{wordle}[strict]{CRAZE} + GRAIL + CRAMPS + CRAM + CRABS + \end{wordle} + \end{example} + + \option[--]{rows} + + By default, a \keyword{wordle} environment displays the words + in the puzzle environment with one word per row. You can add extra + (blank) rows to the puzzle with the \option{rows} option. + + \begin{example} + \begin{wordle}[rows=4]{ANVIL} + CRANE + NATAL + ANVIL + \end{wordle} + \end{example} + + The \option{rows} option only adds extra rows to the puzzle if they + are needed. This option does not prevent ``extra'' rows from + appearing. + + \begin{example} + \begin{wordle}[rows=2]{ANVIL} + CRANE + NATAL + ANVIL + \end{wordle} + \end{example} + + + \option[]{*} + + You can disable the special colouring of letter tiles in a + \keyword{wordle} puzzle by adding an asterisk,~\option{*}, as a + \textit{word}, into the puzzle. + + \begin{example} + \begin{wordle}{ANVIL} + CRANE + NATAL + * % disable wordle colouring + ANNUL + ANVIL + \end{wordle} + \end{example} + + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \Section{Case sensitivity} + \index{case~sensitive} + \index{case~sensitive!lower case} + \index{case~sensitive!natural case} + \index{case~sensitive!upper case} + + By default, the letters are printed in upper and lower case, exactly + as typed, and the letter comparisons are not case sensitive. + + \option[false]{case~sensitive} + + By default the \keyword{wordle} puzzles are not case sensitive, but + you can make them case sensitive using this option. Note that + \keyword{case sensitive} is the same as \keyword{case sensitive=true} + (and the default option is the same as + \keyword{case sensitive=false}). + + \begin{example} + \begin{wordle}[case sensitive=false]{youth} % the default + North + South + Youth + \end{wordle} + \end{example} + + Here is a case sensitive version of this puzzle. + + \begin{example} + \begin{wordle}[case sensitive]{youth} + North + South + Youth + \end{wordle} + \end{example} + + As this puzzle is case sensitive, the \keyword{Y} on the last line is + not marked as being correct because it does not match the \keyword{y} + in the solution. + + \option[]{natural case} (default) \qquad + \option[]{lower case} \qquad + \option[]{upper case} + + The \option{lower case} and \option{upper case} options force all + letters in the puzzle to be in lower or upper case, respectively. + + \begin{example} + \begin{wordle}[lower case]{YOUTH} + North + South + Youth + \end{wordle} + \end{example} + + \begin{example} + \begin{wordle}[upper case]{youth} + North + South + Youth + \end{wordle} + \end{example} + + As these examples show, both of these options disable the case + sensitivity of the tests for colouring the \keyword{wordle} tiles; + that is, they set \option{case sensitive=false}. To balance the + \option{lower case} and \option{upper case} options, the + \option{natural case} option makes the \keyword{wordle} environment + restores the default behaviour, which respects the case of the letters + as typed into the environment. The \option{natural case} option does + not change the \option{case sensitive} setting. + + \begin{example} + \begin{wordle}[natural case]{youth} % the default + North + South + youth + \end{wordle} + \end{example} + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \Section{Adding \ctan{TikZ} code} + + The \keyword{wordle} environment is a fancy wrapper around a + \keyword{tikzpicture} environment, with some code under the hood that + automatically colours the letter tiles according to how well they + match the solution. The options in this section describe how to access + the underlying \ctan{TikZ} layer. + + \option[]{tikz}[TikZ commands] + + The \option{tikz} option passes \ctan{TikZ} keys to the underlying + \keyword{tikzpicture} environment. The \option{tikz} option is almost + the same as using a \keyword{\tikzset{...}} command before the + \keyword{wordle} environment except that it is applied to the + \keyword{tikpicture} environment, which contains the \keyword{wordle} + puzzle, such that the \option{tikz} keys are applied \textit{after} + all of options above and \textit{before} \option{tile style} is + applied. + + \begin{example} + % \usetikzlibrary{backgrounds} + \begin{wordle}[ + tikz={framed, + background rectangle/.style={ + double,ultra thick, draw=SteelBlue + } + }]{youth} + North South youth + \end{wordle} + \end{example} + + As this example indicates, it is advisable to enclose complicated + \ctan{TikZ} settings inside braces. + + \option[W]{name} + + All of the tiles in a \keyword{wordle} puzzle are given node names of + the form $\langle$\textsf{name}$\rangle$-$\mathsf{r}$-$\mathsf{c}$, + for the tile in row~$\mathsf{r}$ and column~$\mathsf{c}$. By default, + the prefix \textsf{name} is \texttt{W}. Within reason, the + \option{name} prefix can be changed to anything you like using the + \option{name} option. + + One way to use the named nodes for the letter tiles is with + \ctan{TikZ} \texttt{overlay} and \texttt{remember picture} keys: + + \begin{example} + \begin{wordle}[tikz={remember picture}]{CRAZE} + TRACE + CREAM + CRAZE + \end{wordle} + \end{example} + + This makes it possible, for example, to draw arrows to tiles in a + \keyword{wordle} puzzle: + + \begin{example} + \tikz[remember picture]\draw[overlay, very thick, opacity=0.5,->,red](0,0)node{No M!} to [out=90, in=180](W-2-5); + \end{example} + + A second use of the tile node names is in conjunction with \ctan{TikZ} + commands that can be added to a \keyword{wordle} puzzle using the + second optional argument to the environment. As with the \option{tikz} + option, it is advisable to enclose complicated \ctan{TikZ} commands + inside braces. + + \begin{example} + \begin{wordle}[name=M, + tikz={arr/.style={Red,ultra thick,->}} + ]{MACAW} + [{ + \draw[arr](M-1-3.south)--(M-3-2.north)--(M-4-2.north); + \draw[arr](M-1-1.south)--(M-3-5)--(M-4-3.north east); + }] + CRANE HOTLY BASIC MACAW + \end{wordle} + \end{example} + + In practice, we are not convinced that anyone will find a real use for this! + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \Section{The package code} + + The \keyword{wordle} package is a \LaTeX3 package. There are many + comments in the code explaining how the code works. The automatic + colouring of the letter tiles is a fun exercise in \LaTeX3 + programming, which was motivated by a + \href{https://tex.stackexchange.com/questions/659860/wordle-like-colored-letter-boxes-in-latex/660056#660056}{tex.stackexchange.com} post. + + Bug reports and feature requests can be made on \href{https://github.com/AndrewMathas/Wordle}{github}. + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \printindex + +\end{document} diff --git a/graphics/pgf/contrib/wordle/wordle-doc-fr.pdf b/graphics/pgf/contrib/wordle/wordle-doc-fr.pdf Binary files differnew file mode 100644 index 0000000000..09d306b0f3 --- /dev/null +++ b/graphics/pgf/contrib/wordle/wordle-doc-fr.pdf diff --git a/graphics/pgf/contrib/wordle/wordle-doc-fr.tex b/graphics/pgf/contrib/wordle/wordle-doc-fr.tex new file mode 100644 index 0000000000..039bc7a158 --- /dev/null +++ b/graphics/pgf/contrib/wordle/wordle-doc-fr.tex @@ -0,0 +1,767 @@ +% !TeX TS-program = pdflatex + +\documentclass[svgnames]{report} +\usepackage[utf8]{inputenc} +\usepackage{wordle} +\usepackage{manfnt} +\usepackage{enumitem} +\setlist[description]{font=\sffamily\bfseries\color{ForestGreen},labelwidth=\textwidth} +\usepackage{booktabs} +\usepackage[a4paper,margin=18mm]{geometry} +\synctex=1 +\parindent=0pt +\parskip=2mm + +\usepackage{cmap} % fix search and cut-and-paste in Acrobat +\setcounter{secnumdepth}{0} + +\usepackage{listings}\lstset{language=[LaTeX]TeX,framerule=2pt} +\lstset{language=[LaTeX]TeX, + texcsstyle=*\bfseries\color{Peru}, + backgroundcolor=\color{Ivory}, + numbers=none, + breaklines=true, + keywordstyle=\color{Sienna}, + commentstyle=\color{BurlyWood}, + tabsize=2, + morekeywords={Wordle,wordle,GrilleSutom}, + resetmargins=true, +} +% hyperref links to ctan +\newcommand\ctan[1]{\href{https://www.ctan.org/pkg/#1}{\texttt{#1}}} + +\newcommand\Section[1]{\subsection{\textcolor{DarkGreen}{#1}}} + +\ExplSyntaxOn +\NewDocumentCommand\option{ omo }{% + \IfNoValueTF{#1}{\textsf{#2}} + {% + \textbf{\textcolor{Crimson}{#2}} + \str_if_empty:nF {#1}{~(défaut~:~\textcolor{DarkRed}{#1})}% + \IfNoValueF{#3}{\hfill\textcolor{Gray}{[accepte~:~#3]}}% + }% + \index{#2}% +} +\ExplSyntaxOff + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\usepackage{imakeidx} +\indexsetup{level=\section*, toclevel=section, noclearpage} +\makeindex[intoc,columns=3] + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\usepackage[skins,listings]{tcolorbox} +\usetikzlibrary{backgrounds, shapes.geometric} % for tikz={framed,...} + +\DeclareTotalTCBox\keyword{ O{} v }{ + fontupper=\sffamily, + nobeforeafter, + skin=tile, + verbatim, + on line, + tcbox raise base, + top=0pt,bottom=0pt,left=0mm,right=0mm, + colback=OldLace, + colupper=ForestGreen, + #1} +{#2} + +\lstdefinestyle{tikz}{style=tcblatex, + classoffset=0, + texcsstyle=*\color{DarkGoldenrod},% + deletetexcs={begin, end}, + moretexcs={,% + node, + draw, + true, + false + },% + classoffset=1, + keywordstyle=\color{ForestGreen},% + morekeywords={wordle,GrilleSutom}, + classoffset=2, + keywordstyle=\color{Crimson},% + morekeywords={ + absent, + Strict, + Taille, + Lignes, + Epaisseur, + align, + border, + borders, + Bords, + Cadres, + Style, + Formes, + Separation, + case, + Police, + Arrondi, + Echelle, + NonLettres, + color, + Couleurs, + CouleurBordures, + CouleurLettres, + bordure, + couleur, + colours, + correct, + vide, + font, + frame, + frames, + letters, + lower, + params, + name, + natural, + noalign, + noletters, + present, + rounded, + rows, + scale, + sensitive, + separation, + shape, + shapes, + size, + strict, + style, + style, + text, + thickness, + tikz, + tile, + upper, + }, + classoffset=3, + keywordstyle=\color{DarkOrange},% + morekeywords={ + hard, + standard, + sutom, + } +} + +\DeclareTCBListing{example}{ !O{} }{% + skin=bicolor, + colframe=MediumSeaGreen, + colbacklower=OldLace, + colback=LawnGreen!20, + lefthand width=50mm, + listing style=tikz, + sidebyside, + sidebyside align=center, + sidebyside gap=4mm, + text and listing, + text outside listing, + boxsep = 0pt, + #1 +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + +\makeatletter +\author{Andrew Mathas \&\ Cédric Pierquet} +\usepackage{tikz} +\usetikzlibrary{shadows.blur} +\tikzset{shadowed/.style={blur shadow={shadow blur steps=5}, + bottom color=ForestGreen!30, + draw=MediumSeaGreen!70, + shade, + font=\normalfont\Huge\bfseries\scshape, + rounded corners=8pt, + top color=SeaGreen, + }, + boxes/.style={draw=SeaGreen, + fill=Cornsilk, + font=\sffamily\small, + inner sep=5pt, + rectangle, + rounded corners=8pt, + text=DarkGreen, + } +} +\newcommand\Wordle{% + \begin{tikzpicture}[remember picture,overlay] + \node[yshift=-3cm] at (current page.north west) + {\begin{tikzpicture}[remember picture, overlay] + \draw[shadowed](30mm,0) rectangle node[white]{wordle} (\paperwidth-30mm,16mm); + \node[anchor=west,boxes] at (4cm,0cm) {\@author}; + \node[anchor=east,boxes] at (\paperwidth-4cm,0) {Version \wordle@version}; + \end{tikzpicture} + }; + \end{tikzpicture} + \vspace*{20mm} +} + +\def\@oddfoot{\textsc{Wordle} --- \wordle@version~(version~du~\wordle@release)\hfill\thepage} + +\usepackage[colorlinks=true,linkcolor=blue,urlcolor=MediumBlue]{hyperref} +\hypersetup{ + pdfcreator={ Generated by pdfLaTeX }, + pdfinfo={ + Author ={ Andrew Mathas et Cédric Pierquet }, + Keywords={ wordle }, + License ={ LaTeX Project Public License v1.3c or later }, + Subject ={ LaTeXing Wordle puzzles }, + Title ={ Wordle - \wordle@version } + }, +} +\makeatother + +\begin{document} + + \Wordle + + Ce package fournit un moyen \textit{stupidement} riche en fonctionnalités de créer des puzzles \keyword{Wordle} en \LaTeX, que \href{https://en.wikipedia.org/wiki/Wordle}{Wikipedia} décrit comme + comme un jeu de lettres en ligne extrêmement populaire, créé et développé par l'ingénieur logiciel gallois Josh Wardle. Ce paquet + est une version améliorée d'une des solutions à une question posée par \textcolor{FireBrick}{valerio\_new} sur \href{https://tex.stackexchange.com/questions/659860/wordle-like-colored-letter-boxes-in-latex/660056#660056}{tex.stackexchange.com}. + + Ce paquet fournit l'environnement \keyword{GrilleSutom}, qui utilise la syntaxe : + + \begin{tcblisting}{ + listing only, + skin=bicolor, + colframe=MediumSeaGreen, + colbacklower=OldLace, + colback=LawnGreen!20, + listing style=tikz, + boxsep = 0pt, + } + % \usepackage{wordle} + \begin{GrilleSutom}[params sutom]{solution}[commandes tikz optionnelles] + essai1 essai2 ... + \end{GrilleSutom} + \end{tcblisting} + \index{environnement!GrilleSutom} + \index{GrilleSutom} + \index{sutom} + + et l'environnement \keyword{wordle}, pour la version anglaise du jeu : + + \begin{tcblisting}{ + listing only, + skin=bicolor, + colframe=MediumSeaGreen, + colbacklower=OldLace, + colback=LawnGreen!20, + listing style=tikz, + boxsep = 0pt, + } + % \usepackage{wordle} + \begin{wordle}[params wordle]{solution}[commandes tikz optionnelles] + essai1 essai2 ... + \end{wordle} + \end{tcblisting} + \index{environnement!wordle} + \index{wordle} + + Les mots du puzzle peuvent être saisis sur une seule ligne ou sur des lignes séparées. Voici quelques exemples : + + \begin{example} + %Version fr du wordle (sutom) + \begin{GrilleSutom}{REBUS} + ABRIS + ROUTE + REBUS + \end{GrilleSutom} + \end{example} + + \begin{example} + % Version en du sutom (wordle) + \begin{wordle}{SUTOM} + SAUCE + SAUTS + SUTOM + \end{wordle} + \end{example} + + Comme pour les puzzles en ligne, l'environnement \keyword{GrilleSutom} + colore automatiquement les lettres en + \keyword[colback=WordleSutomCorrect,colupper=White]{rouge} + lorsque la lettre se trouve dans la même position que la solution, et en + \keyword[colback=WordlePresent,colupper=White]{or} lorsque la lettre est dans la solution mais qu'elle n'est pas bien placée. + De même, \keyword{GrilleSutom} colore les lettres correctes en + \keyword[colback=WordleCorrect,colupper=White]{vert} + et les lettres actuelles en + \keyword[colback=WordleCorrect,colupper=White]{or}. + Comme décrites ci-dessous, ces couleurs peuvent être modifiées en fonction de vos goûts. + + Le nombre de lettres du puzzle est déterminé par la solution, et n'est limité que par la largeur de la page. + + \begin{example} + \begin{GrilleSutom}[Lignes=4]{orange} + normal + ordres + orange + \end{GrilleSutom} + \end{example} + + Les lettres du puzzle peuvent être saisies en majuscules, en minuscules ou en mélange de majuscules et de minuscules. Par défaut, la casse des lettres est ignorée lors de la détermination des couleurs des cases de lettres. + + Comme décrit ci-dessous, les environnements \keyword{wordle} et \keyword{GrilleSutom} acceptent une liste d'options différentes qui modifient les couleurs, les polices et les formes de la tuile. De plus, vous pouvez modifier la sensibilité à la casse des environnements, ajouter des lignes supplémentaires au puzzle, désactiver la mise en forme spéciale des \textit{cases de lettres}. Ces options sont données sous la forme d'une liste séparée par des virgules de paires \texttt{clé-valeur}. Elles peuvent être définies localement, en utilisant l'argument optionnel de l'environnement \keyword|wordle|, ou globalement (plus précisément, dans le groupe \LaTeX\ actuel) en utilisant la commande \keyword{\ParamsSutom} \index{\textbackslash ParamsSutom}, ou comme options globales du package, via \keyword{\usepackage[options]{wordle}}. L'ordre des options n'a pas d'importance, sauf que les options ultérieures ont priorité sur les options précédentes, à l'exception des clés \option{tikz} et \option{tile style} qui sont toujours appliquées en dernier. + + Les puzzles \keyword{wordle} sont dessinés à l'aide de \ctan{TikZ}, chaque lettre du puzzle étant placée à l'intérieur d'un nœud \ctan{TikZ}. De nombreuses options contrôlent les paramètres de ces nœuds. Les descriptions des options ci-dessous sont regroupées en fonction de leur fonction. + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \Section{Styles Wordle} + + La clé \option{Style} peut être utilisée pour modifier de nombreuses caractéristiques des cases dans un puzzle \keyword{wordle}, y compris leurs couleurs, les polices et ainsi de suite. Les paramètres les plus courants peuvent être définis à l'aide du mot-clé \option{style}. \textit{Le style doit toujours être défini en premier car, sinon, les paramètres de style peuvent remplacer les paramètres précédents.} + + Les styles suivants sont pris en charge : + + \textcolor{DarkOrange}{sutom} + \index{Style!sutom} + \index{sutom} + + \begin{example} + \begin{GrilleSutom}[Style=sutom]{REBUS} + ABRIS + ROUTE + REBUS + \end{GrilleSutom} + \end{example} + + En plus de définir les couleurs des cases, les cadres et les formes, le style \textsf{sutom} définit également la taille des cases à 8 mm. Le style \textsf{sutom} est le style par défaut pour l'environnement \keyword{GrilleSutom}. + + \textcolor{DarkOrange}{standard} + \index{style!standard} + + \begin{example} + \begin{GrilleSutom}[Style=standard]{REBUS} + ABRIS + ROUTE + REBUS + \end{GrilleSutom} + \end{example} + + Le style \textcolor{DarkOrange}{standard} est le style par défaut pour l'environnement \keyword{wordle}. + + \textcolor{DarkOrange}{hard} + \index{style!hard} + + \begin{example} + \begin{GrilleSutom}[Style=hard]{REBUS} + ABRIS + ROUTE + REBUS + \end{GrilleSutom} + \end{example} + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \Section{Options pour les styles individuels des cases de lettres} + + Il existe quatre types de cases de lettres dans \keyword{wordle} : + \option{absent}, \option{present}, \option{correct} et + \option{vide}, correspondant respectivement aux lettres qui ne sont pas dans la solution, + aux lettres mal placées, aux lettres correctement placées et aux cases vides. Les options de cette section peuvent être utilisées pour + définir les couleurs du texte, des cases et des bordures, les formes et les cadres de ces cases. + + Les cases de lettres dans un environnement \keyword{wordle} sont composées à l'intérieur + d'un \keyword{\node} \ctan{TikZ}. Les options ci-dessous contrôlent les + différents paramètres de style de ces nœuds. + + \option[--]{Couleurs}[liste de couleurs valides séparées par des virgules] + + L'option \option{Couleurs} est un raccourci pour spécifier les + couleurs des cases \option{absent}, \option{present}, \option{correct} et + \option{vide}, dans cet ordre. Les couleurs suivantes peuvent être omises, mais + les couleurs doivent être données dans cet ordre, de gauche à droite. + Si une seule couleur est donnée, cette couleur est appliquée à toutes les cases. + + \begin{example} + \begin{GrilleSutom}[Couleurs={LightGray,Orange,Teal}]{cellar} + pounds + taylor + cellar + \end{GrilleSutom} + \end{example} + + Les couleurs peuvent également être définies individuellement à l'aide de \option{couleur absent}, \option{couleur present}, \option{couleur correct} et \option{couleur vide}. + + \begin{example} + \begin{GrilleSutom}[couleur absent=DarkGray,couleur present=Salmon, + couleur correct=SeaGreen]{cellar} + pounds + taylor + cellar + \end{GrilleSutom} + \end{example} + + \option[white]{CouleurBordures}[liste de couleurs valides séparées par des virgules] + + de manière similaire à l'option \option{Couleurs}, il s'agit d'un raccourci pour le paramétrage des couleurs des bordures des cases \option{absent}, \option{present}, + \option{correct} et \option{vide}, dans cet ordre. + + Si une seule couleur est donnée, elle est appliquée à toutes les cases. + + \begin{example} + \begin{GrilleSutom}[CouleurBordures={red,orange,blue}]{REBUS} + ABRIS + ROUTE + REBUS + \end{GrilleSutom} + \end{example} + + Les bordures pour les cases individuelles peuvent être paramétrer via + \option{bordure absent}, \option{bordure present}, \option{bordure correct} et \option{bordure vide}. + + \option[false]{Cadres}[liste de booléens true/false séparées par des virgules] + + Il s'agit d'un raccourci pour ajouter un cadre autour des cases \option{absent}, \option{present}, \option{correct} et \option{vide}, dans cet ordre, avec la même couleur que \option{absent}. C'est utile uniquement pour les cases non carrée. + + \begin{example} + \begin{GrilleSutom}[Cadres={false,true,true},Formes=circle]{REBUS} + ABRIS + ROUTE + REBUS + \end{GrilleSutom} + \end{example} + + Les cadres pour les cases individuelles peuvent être paramétrer via \option{cadre absent}, \option{cadre present}, + \option{cadre correct} and \option{cadre vide}. + + \option[rectangle]{Formes}[liste de formes TikZ séparées par des virgules] + + De même que pour l'option \option{Couleurs}, c'est un raccourci pour paramétrer les formes des cases \option{absent}, \option{present}, + \option{correct} et \option{vide}, dans cet ordre. + + \begin{example} + \begin{GrilleSutom}[Formes={circle, rectangle, circle}]{REBUS} + ABRIS + ROUTE + REBUS + \end{GrilleSutom} + \end{example} + + Les formes individuelles peuvent être paramétrer via \option{forme absent}, \option{forme present}, + \option{forme correct} et \option{forme vide}. + + Les formes proposés par le package \ctan{TikZ} + \texttt{shapes.geometric}, incluant \texttt{diamond}, + \texttt{ellipse}, \texttt{trapezium} et \texttt{star} (voir section~71.2 du manuel \ctan{TikZ}). + + \begin{example} + % \usepackage{shapes.geometric} + \begin{GrilleSutom}[Formes={diamond,ellipse,star}]{LADLE} + FLAIL + LAPEL + * + LADLE + LOVER + \end{GrilleSutom} + \end{example} + + \option[white]{CouleurLettres}[liste de couleurs valides séparées par des virgules] + + Il s'agir d'un raccourci pour paramétrer la couleur des lettres des cases \option{absent}, \option{present}, \option{correct} et \option{vide}, dans cet ordre. + + \begin{example} + \begin{GrilleSutom}[CouleurLettres={red,orange,blue}]{REBUS} + ABRIS + ROUTE + REBUS + \end{GrilleSutom} + \end{example} + + Les cases individuelles peuvent être paramétrer via \option{coultxt absent}, \option{coultxt present}, \option{coultxt correct} et \option{coultxt vide}. + + + \Section{Caractéristiques communes des cases} + + Les options suivantes s'appliquent à toutes les cases. + + \option[]{nonalign} (default) \qquad + \option[]{align} + + Cette option s'occupe de l'alignement vertical des lettres. C'est utile essentiellement lors de l'utilisation de minuscules. + + \begin{example} + \begin{GrilleSutom}[align]{agony} + groan + angry + agony + \end{GrilleSutom} + \end{example} + + \begin{example} + \begin{GrilleSutom}{agony} % nonalign par defaut + groan + angry + agony + \end{GrilleSutom} + \end{example} + + \option[\textbackslash Large\textbackslash bfseries\textbackslash sffamily]{Police} + [Police \LaTeX] + + Cela permet de paramétrer la police de toutes les lettres. Toute commande valide est acceptée. + + \begin{example} + \begin{GrilleSutom}[Police=\large\ttfamily]{REBUS} + ABRIS + ROUTE + REBUS + \end{GrilleSutom} + \end{example} + + \option[1mm]{Arrondi}[une longueur] + + Cela permet de paramétrer le paramètres \texttt{rounded corners} (de TikZ) pour les cases \keyword{wordle}. + + \begin{example} + \begin{GrilleSutom}[Arrondi=2.5mm]{REBUS} + ABRIS + ROUTE + REBUS + \end{GrilleSutom} + \end{example} + + \option[0.5mm]{Separation}[une longueur] + + Cela permet de paramétrer la séparation entre les cases du \keyword{wordle}. + + \begin{example} + \begin{GrilleSutom}[Separation=2mm,CouleurBordures=black]{REBUS} + ABRIS + ROUTE + REBUS + \end{GrilleSutom} + \end{example} + + \option[1]{Echelle}[un nombre] + + L'option \option{Echelle} applique un facteur à l'environnement \keyword{wordle}. + Cette option modifie les dimensions définies par les options \option{Arrondi}, + \option{Separation}, \option{Taille} et \option{Epaisseur}. Si vous changez l'échelle, vous voudrez également changer la police de caractères via \option{Police} : + + \begin{example} + \begin{GrilleSutom}[Echelle=1.5,Police=\huge\bfseries]{SIZE} + HELP + WISE + SIZE + \end{GrilleSutom} + \end{example} + + \option[8mm]{Taille}[une longueur] + + L'option \option{Taille} définit la taille des cases. Contrairement à l'option \option{Echelle}, \option{Taille} change uniquement la dimension des cases. + + \begin{example} + \begin{GrilleSutom}[Taille=10mm,Police=\huge\bfseries]{REPU} + ABRI ROUE * REPU + \end{GrilleSutom} + \end{example} + + \option[0.25mm]{Epaisseur}[une longueur]• + + Cela permet de paramétrer la taille des bordures des cases. Par défaut la couleur est blanche, donc pour illustrer cette option elle sera paramétrer en rouge. + + \begin{example} + \begin{GrilleSutom}[Epaisseur=0.75mm,CouleurBordures=red]{LADLE} + FLAIL + LAPEL + LADLE + \end{GrilleSutom} + \end{example} + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \Section{Lignes et colonnes supplémentaires} + + Par défaut, le nombre de lignes et de colonnes de la grille est fixée par les mots donnés. + + \option[]{Lettres} (défaut)\qquad + \option[]{NonLettres} + + Par dafut, les lettres sont affichées, mais l'option \option{NonLettres} peuvent être cachées. + + \begin{example} + \begin{GrilleSutom}{CRAZE} % the default + TRACE + CREAM + CRAZE + \end{GrilleSutom} + \end{example} + + \begin{example} + \begin{GrilleSutom}[NonLettres]{CRAZE} + TRACE + CREAM + CRAZE + \end{GrilleSutom} + \end{example} + + \option[false]{Strict}[true/false/--] + + Par défaut, l'environnement ne vérifie pas si tous les mots sont la même taille, donc les lettres \textit{en trop} n'ont pas de style particulier. + + \begin{example} + \begin{GrilleSutom}[Strict=false]{CRAZE} % par defaut + GRAIL + CRAMPS + CRAM + CRABS + \end{GrilleSutom} + \end{example} + + L'option booléenne \option{Strict} force un style particulier des lettre \textit{en trop}. + + \begin{example} + \begin{GrilleSutom}[Strict]{CRAZE} + GRAIL + CRAMPS + CRAM + CRABS + \end{GrilleSutom} + \end{example} + + \option[--]{Lignes} + + Par défaut, l'environnement \keyword{wordle} affiche le nombre de lignes en adéquation avec le nombre de mots donnés. L'option \option{Lignes} permet de modifier le nombre de lignes (évenuellement vides). + + \begin{example} + \begin{GrilleSutom}[Lignes=4]{ANVIL} + CRANE + NATAL + ANVIL + \end{GrilleSutom} + \end{example} + + \begin{example} + \begin{GrilleSutom}[Lignes=2]{ANVIL} + CRANE + NATAL + ANVIL + \end{GrilleSutom} + \end{example} + + \option[]{*} + + Le style des case peut être annulé en ajoutant un astérisque,~\option{*}, en tant que mot. + + \begin{example} + \begin{GrilleSutom}{ANVIL} + CRANE + NATAL + * % annule la mise en forme + ANNUL + ANVIL + \end{GrilleSutom} + \end{example} + + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \Section{Sensibilité à la casse} + \index{case~sensitive} + \index{case~sensitive!lower case} + \index{case~sensitive!natural case} + \index{case~sensitive!upper case} + + Par défaut, les lettres peuvent être écrites en majuscule ou en minuscule, comme saisies par l'utilisateur. + + L'option (voir doc en anglais) \option{case~sensitive} permet de spécifier un paramétrage de la casse. + + \begin{example} + \begin{GrilleSutom}[case sensitive=false]{youth} % par defaut + North + South + Youth + \end{GrilleSutom} + \end{example} + + \begin{example} + \begin{GrilleSutom}[case sensitive]{youth} + North + South + Youth + \end{GrilleSutom} + \end{example} + + Les options \textit{fines} \option{natural case} (défaut), \option{lower case}et \option{upper case} permettent de travailler plus finement sur la casse des lettres correctes et/ou mal placées. + + \begin{example} + \begin{GrilleSutom}[lower case]{YOUTH} + North + South + Youth + \end{GrilleSutom} + \end{example} + + \begin{example} + \begin{GrilleSutom}[upper case]{youth} + North + South + Youth + \end{GrilleSutom} + \end{example} + + \begin{example} + \begin{GrilleSutom}[natural case]{youth} % par defaut + North + South + youth + \end{GrilleSutom} + \end{example} + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \Section{Style \ctan{TikZ} complémentaire} + + \option[]{tikz}[commandes TikZ] + + \begin{example} + % \usetikzlibrary{backgrounds} + \begin{GrilleSutom}[ + tikz={framed, + background rectangle/.style={ + double,ultra thick, draw=SteelBlue + } + }]{youth} + North South youth + \end{GrilleSutom} + \end{example} + + \pagebreak + + \option[W]{Nom} + + \begin{example} + \begin{GrilleSutom}[tikz={remember picture}]{CRAZE} + TRACE + CREAM + CRAZE + \end{GrilleSutom} + \end{example} + + \begin{example} + \tikz[remember picture]\draw[overlay, very thick, opacity=0.5,->,red](0,0)node{Pas de M !!!} to [out=90, in=180](W-2-5); + \end{example} + + \begin{example} + \begin{GrilleSutom}[name=M, + tikz={arr/.style={red,ultra thick,->}} + ]{MACAW} + [{ + \draw[arr](M-1-3.south)--(M-3-2.north)--(M-4-2.north); + \draw[arr](M-1-1.south)--(M-3-5)--(M-4-3.north east); + }] + CRANE HOTLY BASIC MACAW + \end{GrilleSutom} + \end{example} + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \Section{Le code} + + Le package \keyword{wordle} est écrit en \LaTeX3. Beaucoup de commentaires permettent d'expliciter le fonctionnement du code. La coloration automatique des cases est un exercice amusant en \LaTeX3, motivépar un message issu de + \href{https://tex.stackexchange.com/questions/659860/wordle-like-colored-letter-boxes-in-latex/660056#660056}{tex.stackexchange.com}. + + Le dépôt \href{https://github.com/AndrewMathas/Wordle}{github.com/AndrewMathas/Wordle} est disponible pour signaler tout bug. + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \printindex + +\end{document} diff --git a/graphics/pgf/contrib/wordle/wordle.sty b/graphics/pgf/contrib/wordle/wordle.sty new file mode 100644 index 0000000000..a463f22837 --- /dev/null +++ b/graphics/pgf/contrib/wordle/wordle.sty @@ -0,0 +1,670 @@ +% --------------------------------------------------------------- +% wordle --- A latex package for typesetting wordle puzzles +% +% E-mail: andrew.mathas@gmail.com and cpierquet@outlook.fr +% Released under the LaTeX Project Public License v1.3c or later +% See http://www.latex-project.org/lppl.txt +% ---------------------------------------------------------------- + +\NeedsTeXFormat{LaTeX2e} + +% Package version +\def\wordle@version{0.3.0} +\def\wordle@release{2024-08-18} + +\providecommand\DeclareRelease[3]{} +\providecommand\DeclareCurrentRelease[2]{} +\DeclareRelease{\wordle@version}{\wordle@release}{wordle.sty} +\DeclareCurrentRelease{}{\wordle@release} + +\ProvidesExplPackage{wordle} {\wordle@release} {\wordle@version} + {A latex package for typesetting wordle puzzles} + +% ---------------------------------------------------------------- +% Required packages +%\RequirePackage{xcolor} +\RequirePackage{tikz} + +% ---------------------------------------------------------------- +% predefined tile colours + +% from https://www.nytimes.com/games/wordle +\definecolor{WordleAbsent} {HTML} {797D7F} +\definecolor{WordlePresent} {HTML} {F7DA21} +\definecolor{WordleCorrect} {HTML} {6AAB64} +\definecolor{WordleEmpty} {HTML} {F5F5DC} + +\definecolor{WordleHardPresent} {HTML} {95BEFA} +\definecolor{WordleHardCorrect} {HTML} {FB9B00} + +% from https://sutom.nocle.fr/# +\definecolor{WordleSutomAbsent} {HTML} {0077B7} +\definecolor{WordleSutomPresent} {HTML} {FFBB00} +\definecolor{WordleSutomCorrect} {HTML} {EB2152} + +% ---------------------------------------------------------------- +% package variables + +\bool_new:N \l__wordle_case_sensitive_bool % case sensitive mode (false by default) +\bool_new:N \l__wordle_strict_bool % strict mode (false by default) + +\dim_new:N \l__wordle_grid_dim +\dim_new:N \l__wordle_rounded_dim +\dim_new:N \l__wordle_sep_dim +\dim_new:N \l__wordle_size_dim +\dim_new:N \l__wordle_thickness_dim + +\int_new:N \l__wordle_rows_int + +\fp_new:N \l__wordle_scale_fp + +\tl_new:N \l__wordle_align_tl +\tl_new:N \l__wordle_depth_tl +\tl_new:N \l__wordle_font_tl +\tl_new:N \l__wordle_name_tl +\tl_new:N \l__wordle_style_tl +\tl_new:N \l__wordle_tikz_tl +\tl_new:N \l__wordle_tile_style_tl + +\tl_new:N \l__wordle_present_border_tl +\tl_new:N \l__wordle_present_colour_tl +\tl_new:N \l__wordle_present_frame_tl +\tl_new:N \l__wordle_present_shape_tl +\tl_new:N \l__wordle_present_text_tl + +\tl_new:N \l__wordle_correct_border_tl +\tl_new:N \l__wordle_correct_colour_tl +\tl_new:N \l__wordle_correct_frame_tl +\tl_new:N \l__wordle_correct_shape_tl +\tl_new:N \l__wordle_correct_text_tl + +\tl_new:N \l__wordle_empty_border_tl +\tl_new:N \l__wordle_empty_colour_tl +\tl_new:N \l__wordle_empty_frame_tl +\tl_new:N \l__wordle_empty_shape_tl +\tl_new:N \l__wordle_empty_text_tl + +\tl_new:N \l__wordle_absent_border_tl +\tl_new:N \l__wordle_absent_colour_tl +\tl_new:N \l__wordle_absent_frame_tl +\tl_new:N \l__wordle_absent_shape_tl +\tl_new:N \l__wordle_absent_text_tl + + +% ---------------------------------------------------------------- +% Assign up to four style attributes from comma separated list to absent, +% present, correct, empty, respectively. If there is only one entry in +% the list then everything is set equal to that entry +\cs_new_nopar:Npn \__wordle_set_style:nn #1#2 +{ + \seq_set_split:Nnn \l_tmpa_seq {,} {#2} + \int_compare:nNnTF {\seq_count:N \l_tmpa_seq} = {1} + { + \tl_set:co {l__wordle_absent_#1_tl} {#2} + \tl_set:co {l__wordle_present_#1_tl} {#2} + \tl_set:co {l__wordle_correct_#1_tl} {#2} + \tl_set:co {l__wordle_empty_#1_tl} {#2} + } + { + \seq_pop_left:NNT \l_tmpa_seq \l_tmpa_tl { \tl_set:co {l__wordle_absent_#1_tl} {\l_tmpa_tl} } + \seq_pop_left:NNT \l_tmpa_seq \l_tmpa_tl { \tl_set:co {l__wordle_present_#1_tl} {\l_tmpa_tl} } + \seq_pop_left:NNT \l_tmpa_seq \l_tmpa_tl { \tl_set:co {l__wordle_correct_#1_tl} {\l_tmpa_tl} } + \seq_pop_left:NNT \l_tmpa_seq \l_tmpa_tl { \tl_set:co {l__wordle_empty_#1_tl} {\l_tmpa_tl} } + } +} + +% apply the wordle styles +\cs_new_nopar:Npn \__wordle_apply_style:n #1 { + \str_case:enF { #1 } + { + {hard} + { + \__wordle_set_style:nn {border} {white} + \__wordle_set_style:nn {colour} {WordleAbsent,WordleHardPresent,WordleHardCorrect,WordleEmpty} + \__wordle_set_style:nn {frame} {false} + \__wordle_set_style:nn {shape} {rectangle} + \__wordle_set_style:nn {text} {white,white,white,black} + } + + {alt} + { % alt appears in the English version of Cedric's manual for sutom + \__wordle_set_style:nn {border} {white} + \__wordle_set_style:nn {colour} {WordleSutomAbsent,WordleSutomPresent,WordleSutomCorrect,WordleEmpty} + \__wordle_set_style:nn {frame} {false,true,false,false} + \__wordle_set_style:nn {shape} {rectangle,circle,rectangle,circle} + \__wordle_set_style:nn {text} {white,white,white,black} + \tl_set:Nn \l_wordle_font_tl {\LARGE\bfseries\sffamily} + + } + + {sutom} + { + \__wordle_set_style:nn {border} {white} + \__wordle_set_style:nn {colour} {WordleSutomAbsent,WordleSutomPresent,WordleSutomCorrect,WordleEmpty} + \__wordle_set_style:nn {frame} {false,true,false,false} + \__wordle_set_style:nn {shape} {rectangle,circle,rectangle,circle} + \__wordle_set_style:nn {text} {white,white,white,black} + \tl_set:Nn \l_wordle_font_tl {\LARGE\bfseries\sffamily} + } + } + { + % default style + \__wordle_set_style:nn {border} {white} + \__wordle_set_style:nn {colour} {WordleAbsent,WordlePresent,WordleCorrect,WordleEmpty} + \__wordle_set_style:nn {frame} {false} + \__wordle_set_style:nn {shape} {rectangle} + \__wordle_set_style:nn {text} {white,white,white,black} + } +} + +% rescale dimensions +\cs_new_nopar:Npn \__wordle_rescale:n #1 +{ + \fp_set:Nn \l__wordle_scale_fp {#1} + \dim_set:Nn \l__wordle_rounded_dim { \fp_eval:n {#1*\dim_to_decimal_in_mm:n {\l__wordle_rounded_dim }}mm } + \dim_set:Nn \l__wordle_sep_dim { \fp_eval:n {#1*\dim_to_decimal_in_mm:n {\l__wordle_sep_dim }}mm } + \dim_set:Nn \l__wordle_size_dim { \fp_eval:n {#1*\dim_to_decimal_in_mm:n {\l__wordle_size_dim }}mm } + \dim_set:Nn \l__wordle_thickness_dim { \fp_eval:n {#1*\dim_to_decimal_in_mm:n {\l__wordle_thickness_dim}}mm } +} + + +% ---------------------------------------------------------------- +% just in case we're running an old version of latex +\providecommand \IfFormatAtLeastTF { \@ifl@t@r \fmtversion } + +\IfFormatAtLeastTF { 2022-06-01 } + { \ProcessKeyOptions [ wordle ] } + { + \RequirePackage { l3keys2e } + \ProcessKeysOptions { wordle } + } + +% ---------------------------------------------------------------- +% Define keys for the package options and their defaults + +\keys_define:nn { wordle } +{ + % apply puzzle styles: sets colours of absent, present, correct and empty tiles + style .code:n = { + \seq_set_from_clist:Nn \l_tmpa_seq {#1} + \seq_map_inline:Nn \l_tmpa_seq { \__wordle_apply_style:n { \str_lowercase:n{##1}} } + }, + Style .meta:n = { style = #1 }, + style .initial:n = standard, + + % specifying tile colours and shapes + borders .code:n = { \__wordle_set_style:nn {border} {#1} }, + BorderColor .code:n = { \__wordle_set_style:nn {border} {#1} }, + CouleurBordures.code:n = { \__wordle_set_style:nn {border} {#1} }, + + Couleurs .code:n = { \__wordle_set_style:nn {colour} {#1} }, + colours .code:n = { \__wordle_set_style:nn {colour} {#1} }, + + frames .code:n = { \__wordle_set_style:nn {frame} {#1} }, + Cadres .code:n = { \__wordle_set_style:nn {frame} {#1} }, + frames .default:n = true, + shapes .code:n = { \__wordle_set_style:nn {shape} {#1} }, + Formes .code:n = { \__wordle_set_style:nn {shape} {#1} }, + + % text colour + text .code:n = { \__wordle_set_style:nn {text} {#1} }, + CouleurLettres .code:n = { \__wordle_set_style:nn {text} {#1} }, + + % align letters in puzzle + align .code:n = { + \tl_set:Nn \l__wordle_align_tl {\vphantom{azertyuiopqsdfghjklmwxcvbnAZERTYUIOPQSDFGHJKLMWXCVBN}} + \tl_set:Nn \l__wordle_depth_tl {text~depth=0pt} + }, + noalign .code:n = { + \tl_set:Nn \l__wordle_align_tl {} + \tl_set:Nn \l__wordle_depth_tl {} + }, + nonalign .meta:n = { noalign }, + align .initial:n = {true}, + + absent .tl_set:N = \l__wordle_absent_colour_tl, + absent~color .tl_set:N = \l__wordle_absent_colour_tl, + couleur~absent .tl_set:N = \l__wordle_absent_colour_tl, + absent~colour .tl_set:N = \l__wordle_absent_colour_tl, + bordure~absent .tl_set:N = \l__wordle_absent_border_tl, + absent~border .tl_set:N = \l__wordle_absent_border_tl, + absent~frame .tl_set:N = \l__wordle_absent_frame_tl, + cadre~absent .tl_set:N = \l__wordle_absent_frame_tl, + absent~frame .default:n = true, + absent~shape .tl_set:N = \l__wordle_absent_shape_tl, + forme~absent .tl_set:N = \l__wordle_absent_shape_tl, + absent~text .tl_set:N = \l__wordle_absent_text_tl, + coultxt~absent .tl_set:N = \l__wordle_absent_text_tl, + + correct .tl_set:N = \l__wordle_correct_colour_tl, + correct~color .tl_set:N = \l__wordle_correct_colour_tl, + correct~colour .tl_set:N = \l__wordle_correct_colour_tl, + couleur~correct.tl_set:N = \l__wordle_correct_colour_tl, + correct~border .tl_set:N = \l__wordle_correct_border_tl, + bordure~correct.tl_set:N = \l__wordle_correct_border_tl, + correct~frame .tl_set:N = \l__wordle_correct_frame_tl, + cadre~correct .tl_set:N = \l__wordle_correct_frame_tl, + correct~frame .default:n = true, + correct~shape .tl_set:N = \l__wordle_correct_shape_tl, + forme~correct .tl_set:N = \l__wordle_correct_shape_tl, + correct~text .tl_set:N = \l__wordle_correct_text_tl, + coultxt~correct.tl_set:N = \l__wordle_correct_text_tl, + + empty .tl_set:N = \l__wordle_empty_colour_tl, + couleur~vide .tl_set:N = \l__wordle_empty_colour_tl, + empty~color .tl_set:N = \l__wordle_empty_colour_tl, + empty~colour .tl_set:N = \l__wordle_empty_colour_tl, + empty~border .tl_set:N = \l__wordle_empty_border_tl, + bordure~vide .tl_set:N = \l__wordle_empty_border_tl, + empty~frame .tl_set:N = \l__wordle_empty_frame_tl, + cadre~vide .tl_set:N = \l__wordle_empty_frame_tl, + empty~frame .default:n = true, + empty~shape .tl_set:N = \l__wordle_empty_shape_tl, + forme~vide .tl_set:N = \l__wordle_empty_shape_tl, + empty~text .tl_set:N = \l__wordle_empty_text_tl, + coultxt~vide. tl_set:N = \l__wordle_empty_text_tl, + + present .tl_set:N = \l__wordle_present_colour_tl, + couleur~present.tl_set:N = \l__wordle_present_colour_tl, + present~color .tl_set:N = \l__wordle_present_colour_tl, + present~colour .tl_set:N = \l__wordle_present_colour_tl, + present~border .tl_set:N = \l__wordle_present_border_tl, + bordure~present.tl_set:N = \l__wordle_present_border_tl, + present~frame .tl_set:N = \l__wordle_present_frame_tl, + cadre~present .tl_set:N = \l__wordle_present_frame_tl, + present~frame .default:n = true, + present~shape .tl_set:N = \l__wordle_present_shape_tl, + forme~present .tl_set:N = \l__wordle_present_shape_tl, + present~text .tl_set:N = \l__wordle_present_text_tl, + coultxt~present.tl_set:N = \l__wordle_present_text_tl, + + % text font + font .tl_set:N = \l__wordle_font_tl, + Fonte .tl_set:N = \l__wordle_font_tl, + Police .tl_set:N = \l__wordle_font_tl, + font .initial:n = \Large\bfseries\sffamily, + + % tile size + size .dim_set:N = \l__wordle_size_dim, + Taille .dim_set:N = \l__wordle_size_dim, + size .initial:n = 8mm, + + % thickness of tile border + thickness .dim_set:N = \l__wordle_thickness_dim, + Epaisseur .dim_set:N = \l__wordle_thickness_dim, + Thick .code:n = {\dim_set:Nn \l__wordle_thickness_dim {#1mm}}, + thickness .initial:n = 0.25mm, + + % rounded-corner = # + rounded .dim_set:N = \l__wordle_rounded_dim, + Arrondi .dim_set:N = \l__wordle_rounded_dim, + rounded .default:n = 4pt, + Rounded .code:n = {\dim_set:Nn \l__wordle_rounded_dim {#1mm}}, + rounded .initial:n = 1mm, + + % separation between tiles + separation .dim_set:N = \l__wordle_sep_dim, + Separation .dim_set:N = \l__wordle_sep_dim, + separation .initial:n = 0.5mm, + + % rescale tiles + scale .code:n = { \__wordle_rescale:n {#1} }, + Echelle .code:n = { \__wordle_rescale:n {#1} }, + scale .initial:n = 1, + Unit .code:n = { \__wordle_rescale:n {#1} }, + Unite .code:n = { \__wordle_rescale:n {#1} }, + + % letter case + case~sensitive .bool_set:N = \l__wordle_case_sensitive_bool, + case~sensitive .default:n = true, + case~sensitive .initial:n = false, + + % letter visibility + letters .code:n = {\cs_set_eq:NN \__wordle_letter:n \__wordle_letter_natural:n}, + Lettres .code:n = {\cs_set_eq:NN \__wordle_letter:n \__wordle_letter_natural:n}, + noletters .code:n = {\cs_set_eq:NN \__wordle_letter:n \__wordle_letter_none:n}, + NonLettres .code:n = {\cs_set_eq:NN \__wordle_letter:n \__wordle_letter_none:n}, + letters .initial:n = true, + + % forced letter case + natural~case .code:n = { + \cs_set_eq:NN \__wordle_letter:n \__wordle_letter_natural:n + }, + lower~case .code:n = { + \cs_set_eq:NN \__wordle_letter:n \__wordle_letter_lower:n + \bool_set_false:N \l__wordle_case_sensitive_bool + }, + upper~case .code:n = { + \cs_set_eq:NN \__wordle_letter:n \__wordle_letter_upper:n + \bool_set_false:N \l__wordle_case_sensitive_bool + }, + + % puzzle specs: rows and columns + rows .int_set:N = \l__wordle_rows_int, + Lignes .int_set:N = \l__wordle_rows_int, + rows .initial:n = 0, + + strict .bool_set:N = \l__wordle_strict_bool, + Strict .bool_set:N = \l__wordle_strict_bool, + strict .default:n = true, + strict .initial:n = false, + + % tikz settings + tile~style .tl_set:N = \l__wordle_tile_style_tl, + Style~case .tl_set:N = \l__wordle_tile_style_tl, + tile~style .initial:n = , + + name .tl_set:N = \l__wordle_name_tl, + Nom .tl_set:N = \l__wordle_name_tl, + name .initial:n = W, + tikz .tl_set:N = \l__wordle_tikz_tl, + tikz .initial:n = , +} + +% user settings +\NewDocumentCommand\WordleSetup{ m }{ \keys_set:nn { wordle } {#1} } +\NewDocumentCommand\ParamsSutom{ m }{ \keys_set:nn { wordle } {#1} } + +% ---------------------------------------------------------------- +% Define TikZ Wordle styles for the letters. Using tikz styles both +% ensures consistency and has the added advantage of taking care of +% expansion issues with the tile settings +\tikzset{/Wordle/.is~family, /Wordle, + tile/.style = { + /tikz, % change back to using tikz keys + inner~sep = \l__wordle_sep_dim, + minimum~height = \l__wordle_size_dim, + minimum~size = \l__wordle_size_dim, + rounded~corners= \l__wordle_rounded_dim, + line~width = \l__wordle_thickness_dim, + font = \l__wordle_font_tl, + % scale = \fp_to_decimal:N \l__wordle_scale_fp, + text = \tl_use:c {l__wordle_#1_text_tl}, + fill = \tl_use:c {l__wordle_#1_colour_tl}, + shape = \tl_use:c {l__wordle_#1_shape_tl}, + }, + frame/.style = { + /Wordle/tile=#1, + /tikz, % change back to using tikz keys + draw = \tl_use:c{l__wordle_#1_border_tl}, + minimum~size = {\l__wordle_size_dim+\l__wordle_thickness_dim}, + fill = \tl_use:c {l__wordle_#1_colour_tl}, + shape = rectangle, + }, +} + +% apply a TikZ setting +\cs_new_nopar:Npn \__wordle_tikzset:n #1 { \exp_args:Nx \tikzset{#1} } + +% ---------------------------------------------------------------- +% preprocessing of the wordle letters +\cs_new_nopar:Npn \__wordle_letter_none:n #1 {} +\cs_new_nopar:Npn \__wordle_letter_natural:n #1 {#1} +\cs_new_nopar:Npn \__wordle_letter_lower:n #1 { \str_lowercase:n {#1} } +\cs_new_nopar:Npn \__wordle_letter_upper:n #1 { \str_uppercase:n {#1} } + +% by default wordle letters are not processed +\cs_set_eq:NN \__wordle_letter:n \__wordle_letter_natural:n + +% Print a letter in a box as a node. There is slightly different behaviour +% depending on whether the tile is frames or we are in strict mode. The way +% that the entry is printed depends is controlled by \__wordle_letter:n. +\cs_new_nopar:Npn \wordle__boxed_letter:nn #1#2 +{ + % determine the node name, which takes the form <W>-<row>-<col> + \tl_set:No \l_tmpa_tl + { + \l__wordle_name_tl-\int_eval:n{1+\l__wordle_row_index_int}-\int_use:N\l__wordle_letter_index_int + } + + % the construction of the node depends on whether the tile is framed + \tl_if_eq:cnTF {l__wordle_#1_frame_tl} {true} + { + % draw the frame + \node[/Wordle/frame=absent] % frame use the absent fill colour + at ({\l__wordle_letter_index_int*\l__wordle_grid_dim},{-\l__wordle_row_index_int*\l__wordle_grid_dim}){}; + % draw the tile + \node[/Wordle/tile=#1] + (\l_tmpa_tl) at ({\l__wordle_letter_index_int*\l__wordle_grid_dim}, + {-\l__wordle_row_index_int*\l__wordle_grid_dim}) + { \l__wordle_align_tl\__wordle_letter:n {#2} }; + } + { + % draw the tile, with a border + \node[/Wordle/frame=#1, /Wordle/tile=#1] + (\l_tmpa_tl) at ({\l__wordle_letter_index_int*\l__wordle_grid_dim}, + {-\l__wordle_row_index_int*\l__wordle_grid_dim}) + { \l__wordle_align_tl\__wordle_letter:n {#2} }; + } + + % if strict then put a slash through any extra letters + \bool_if:NT \l__wordle_strict_bool + { + \int_compare:nNnT {\l__wordle_letter_index_int} > {\seq_count:N \l__wordle_answer_seq } + { + \draw[red,ultra~thick] (\tl_use:N\l_tmpa_tl.south~west)--(\tl_use:N\l_tmpa_tl.north~east); + } + } +} + +\seq_new:N \l__wordle_answer_seq % the answer +\prop_new:N \l__wordle_answer_counts_prop % count letters in wordle +\seq_new:N \l__wordle_solution_seq % list of all words +\prop_new:N \l__wordle_word_counts_prop % count letters in word +\int_new:N \l__wordle_letter_index_int % index of current letter in word +\int_new:N \l__wordle_row_index_int % TikZ row index in solution + +% a conditional for non-negative prop counter in \l__wordle_word_counts_prop +\prg_new_protected_conditional:Npnn \if__wordle_letter_nonnegative:n #1 {TF} +{ + \prop_if_in:NnTF \l__wordle_word_counts_prop {#1} + { % letter in in prop + \prop_get:NnN \l__wordle_word_counts_prop {#1} \l_tmpa_tl + \int_compare:nNnTF {\l_tmpa_tl} < {0} + {\prg_return_false:} {\prg_return_true:} + } + {\prg_return_false:} +} + +\cs_generate_variant:Nn \str_if_eq:nVTF {xVTF} + +% a conditional for comparing letters +\prg_new_protected_conditional:Npnn \if__wordle_letters_agree:n #1 {T, TF} +{ + \str_set:Nx \l_tmpa_str + {\seq_item:Nn \l__wordle_answer_seq {\l__wordle_letter_index_int}} + + + \bool_if:NTF \l__wordle_case_sensitive_bool + {\str_if_eq:nVTF {#1} \l_tmpa_str {\prg_return_true:} {\prg_return_false:}} + {\str_if_eq:xVTF {\str_uppercase:n{#1}} \l_tmpa_str {\prg_return_true:} {\prg_return_false:}} +} + +% add #3 to <prop=#1>.#2 +\cs_new_nopar:Npn \wordle__add_to_prop_counter:Nnn #1#2#3 +{ + \prop_put_if_new:Nnn #1 {#2} {0} + \prop_pop:NnN #1 {#2} \l_tmp_a + \prop_put:Nnx #1 {#2} {\int_eval:n {#3+\l_tmp_a}} +} + +% make \l__wordle_answer_counts_prop<x> = #x's in wordle_seq +\cs_new_nopar:Npn \wordle__count_letters_in_answer:n #1 +{ + \wordle__add_to_prop_counter:Nnn \l__wordle_answer_counts_prop {#1} {1} +} + +% first run: subtract correct matches from letter counts +\cs_new_nopar:Npn \wordle__count_letters_in_word:n #1 +{ + \int_incr:N \l__wordle_letter_index_int + \if__wordle_letters_agree:nT {#1} + { \wordle__add_to_prop_counter:Nnn \l__wordle_word_counts_prop {#1} {-1} } +} + +% on the second run we print a coloured wordle word +\cs_new_nopar:Npn \wordle__write_letters_in_word:n #1 +{ + \int_incr:N \l__wordle_letter_index_int + \if__wordle_letters_agree:nTF {#1} + { \wordle__boxed_letter:nn {correct} {#1} } + { + % subtract 1 from the prop counter + \wordle__add_to_prop_counter:Nnn \l__wordle_word_counts_prop {#1} {-1} + % if the counter is non-negative this is a pseudo match + \if__wordle_letter_nonnegative:nTF {#1} + { \wordle__boxed_letter:nn {present} {#1} } + { \wordle__boxed_letter:nn {absent} {#1} } + } +} + +\cs_generate_variant:Nn \seq_set_split:Nnn {Nnx} +\cs_generate_variant:Nn \cs_set_nopar:Nn {NV} + +% typeset the word "#1", colouring letters using the wordle convention +\cs_new_nopar:Npn \wordle__mark_word:n #1 +{ + \str_if_eq:nnTF {#1} {*} + { + \cs_set_eq:NN \wordle__process_word:n \wordle__empty_word:n + } + { + \prop_set_eq:NN \l__wordle_word_counts_prop \l__wordle_answer_counts_prop + \tl_map_function:nN {#1} \wordle__count_letters_in_word:n + \int_zero:N \l__wordle_letter_index_int + \tl_map_function:nN {#1} \wordle__write_letters_in_word:n + + % if strict then check lengths + \bool_if:NT \l__wordle_strict_bool + { + \int_while_do:nNnn {\l__wordle_letter_index_int} < {\seq_count:N\l__wordle_answer_seq} + { + \int_incr:N \l__wordle_letter_index_int + \wordle__boxed_letter:nn {absent} {\c_space_tl} + } + } + + % increment the row index + \int_incr:N \l__wordle_row_index_int + } +} + +% typeset the word "#1" by putting boxes around each letter +\cs_new_nopar:Npn \wordle__empty_word:n #1 +{ + \tl_map_inline:nn {#1} + { + \int_incr:N \l__wordle_letter_index_int + \wordle__boxed_letter:nn {empty} {##1} + } + % if strict then check lengths + \bool_if:NT \l__wordle_strict_bool + { + \int_while_do:nNnn {\l__wordle_ltter_index_int} < {\seq_count:N\l__wordle_answer_seq} + { + \int_incr:N \l__wordle_letter_index_int + \wordle__boxed_letter:nn {empty} {\c_space_tl} + } + } + \int_incr:N \l__wordle_row_index_int +} + +\cs_set_eq:NN \wordle__process_word:n \wordle__mark_word:n + +\NewDocumentEnvironment{wordle}{ O{} m O{} b } +{ + % apply wordle environment options + \WordleSetup{#1} + \begin{tikzpicture} + + % apply any tikz settings -- we need to some expansion trickery to do this + \__wordle_tikzset:n {\l__wordle_tikz_tl} + \__wordle_tikzset:n {/Wordle/tile/.append~style={\l__wordle_depth_tl,\l__wordle_tile_style_tl}} + + % set grid dimension = box size + separation + \dim_set:Nn \l__wordle_grid_dim {\l__wordle_size_dim+\l__wordle_sep_dim} + + % split the answer into letters + \bool_if:NTF \l__wordle_case_sensitive_bool + { \seq_set_split:Nnn \l__wordle_answer_seq {} {#2} } + { \seq_set_split:Nnx \l__wordle_answer_seq {} {\str_uppercase:n {#2}} } + + % count the number of times letters appear in \l__wordle_answer_seq + \prop_clear:N \l__wordle_answer_counts_prop + \tl_map_function:nN {#2} \wordle__count_letters_in_answer:n + + % split the solution into words + \regex_split:nnN {\s} {#4} \l__wordle_solution_seq + + % process the words + \int_zero:N \l__wordle_row_index_int + \seq_map_inline:Nn \l__wordle_solution_seq + { + \int_zero:N \l__wordle_letter_index_int + \wordle__process_word:n {##1} + } + + % if required, add extra required blank rows + \int_while_do:nNnn {\l__wordle_row_index_int} < {\l__wordle_rows_int} + { + \int_zero:N \l__wordle_letter_index_int + \int_while_do:nNnn {\l__wordle_letter_index_int} < {\seq_count:N\l__wordle_answer_seq} + { + \int_incr:N \l__wordle_letter_index_int + \wordle__boxed_letter:nn {empty} {\c_space_tl} + } + \int_incr:N \l__wordle_row_index_int + } + + % finally, execute the optional TikZ commands + #3 + + \end{tikzpicture} +}{} + +% wrapper environment for Gridwordle +\NewDocumentEnvironment{GridWordle}{ O{} m O{} b } + { + \begin{wordle}[#1]{#2}[#3]#4]\end{wordle} + } + {} + +% wrapper environment for GrilleSutom +\NewDocumentEnvironment{GrilleSutom}{ O{} m O{} b } + { + \begin{wordle}[style=sutom,#1]{#2}[#3]#4\end{wordle} + } + {} + +\endinput + +% ---------------------------------------------------------------- +% CHANGE LOG +% +% Version 0.3 - \wordle@release +% - merged AM & CP packages, adding styles and streamlining options, french keys +% +% Version 0.2 - \wordle@release +% - added documentation and cleaned some of the options +% +% Version 0.1 - 2022-10-01 +% - initial version +% +% ---------------------------------------------------------------- +% +% Copyright (C) 2022-3 by Andrew Mathas <andrew.mathas@gmail.com> +% and Cédric Pierquet cpierquet@outlook.fr +% +% This work 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: +% +% http://www.latex-project.org/lppl.txt +% +% This work is "maintained" (as per LPPL maintenance status) by +% Andrew Mathas. +% +% This work consists of the files: +% wordle.sty +% wordle.tex |