texlive[56750] Master: graphpaper (24oct20)

commits+karl at tug.org commits+karl at tug.org
Sat Oct 24 22:28:26 CEST 2020


Revision: 56750
          http://tug.org/svn/texlive?view=revision&revision=56750
Author:   karl
Date:     2020-10-24 22:28:26 +0200 (Sat, 24 Oct 2020)
Log Message:
-----------
graphpaper (24oct20)

Modified Paths:
--------------
    trunk/Master/tlpkg/bin/tlpkg-ctan-check
    trunk/Master/tlpkg/tlpsrc/collection-latexextra.tlpsrc

Added Paths:
-----------
    trunk/Master/texmf-dist/doc/latex/graphpaper/
    trunk/Master/texmf-dist/doc/latex/graphpaper/README
    trunk/Master/texmf-dist/doc/latex/graphpaper/graphpaper.pdf
    trunk/Master/texmf-dist/source/latex/graphpaper/
    trunk/Master/texmf-dist/source/latex/graphpaper/graphpaper.dtx
    trunk/Master/texmf-dist/tex/latex/graphpaper/
    trunk/Master/texmf-dist/tex/latex/graphpaper/graphpaper.cls
    trunk/Master/tlpkg/tlpsrc/graphpaper.tlpsrc

Added: trunk/Master/texmf-dist/doc/latex/graphpaper/README
===================================================================
--- trunk/Master/texmf-dist/doc/latex/graphpaper/README	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/graphpaper/README	2020-10-24 20:28:26 UTC (rev 56750)
@@ -0,0 +1,69 @@
+*********************************************************************
+*                         GraphPaper class                          *
+*********************************************************************
+
+      This is the README file of the "GraphPaper" LaTeX class.
+
+
+
+** License **********************************************************
+
+      Copyright (c) 2020 by Claudio Beccari e Francesco Biccari.
+
+      This work (specified below) may be distributed and/or
+      modified under the conditions of the 
+      LaTeX Project Public License,
+      either version 1.3c of this license or 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 Francesco Biccari.
+
+
+
+** Class information ************************************************
+
+      Graphpaper is a new LaTeX document class which allows to print
+	  several types of graph papers: bilinear (millimeter paper),
+	  semilogarithmic, bilogarithmic, polar, log-polar, Smith charts.
+
+      The documentation is provided in the file graphpaper.pdf.
+      
+      The version number of this class is reported at the top of the
+      class file graphpaper.cls and in the pdf manual graphpaper.pdf.
+
+
+
+** Installation instruction *****************************************
+
+      GraphPaper can be installed in 3 different ways:
+	  
+	  1. The simplest way is by the package manager
+      of your TeX distribution (TeX Live, MiKTeX or MacTeX).
+      
+      2. Instead, if you want to install GraphPaper manually, you have to
+      download the GraphPaper.zip archive from CTAN.
+	  
+      The archive contains: 
+
+        1. graphpaper.dtx (main file)
+        2. README (this file)
+
+	  You can simply copy graphpaper.dtx into your local work directory
+	  and compile it with command "pdflatex.exe graphpaper.dtx",
+	  the documentation pdf file and the class file graphpaper.cls
+	  will be generated.
+	  
+      3. The last possibility is to copy the GraphPaper files
+	  (cls and pdf generated as discussed in the previous point and
+	  README file) into your texmf tree (or your localtexmf tree) at
+	  these locations:
+
+      <texmf>/tex/latex/graphpaper/graphpaper.cls
+      <texmf>/doc/latex/graphpaper/graphpaper.pdf
+      <texmf>/doc/latex/graphpaper/README
+
+      Then, you need to update the file database.


Property changes on: trunk/Master/texmf-dist/doc/latex/graphpaper/README
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/graphpaper/graphpaper.pdf
===================================================================
(Binary files differ)

Index: trunk/Master/texmf-dist/doc/latex/graphpaper/graphpaper.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/latex/graphpaper/graphpaper.pdf	2020-10-24 20:27:41 UTC (rev 56749)
+++ trunk/Master/texmf-dist/doc/latex/graphpaper/graphpaper.pdf	2020-10-24 20:28:26 UTC (rev 56750)

Property changes on: trunk/Master/texmf-dist/doc/latex/graphpaper/graphpaper.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/graphpaper/graphpaper.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/graphpaper/graphpaper.dtx	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/graphpaper/graphpaper.dtx	2020-10-24 20:28:26 UTC (rev 56750)
@@ -0,0 +1,1048 @@
+%\iffalse
+% !TEX encoding = UTF-8 Unicode
+% !TEX TS-program = pdflatex
+%<*internal>
+\begingroup
+%^^A Load the docstrip package (DO NOT USE \input{...})
+\input docstrip.tex
+\keepsilent
+%^^A\usedir{tex/latex/graphpaper}
+%^^A insert this text at the beginning of the generated file
+\preamble
+ ________________________________________
+ The graphpaper class for generating several types of graph paper
+ Copyright (C) 2020 C. Beccari & F. Biccari
+ All rights reserved
+ 
+ License information appended
+ 
+\endpreamble
+%^^A insert this text at the end of the generated file
+\postamble
+Copyright (C) 2020 Claudio Beccari & Francesco Biccari
+
+Distributable under the LaTeX Project Public License,
+version 1.3c or higher (your choice). The latest version of
+this license is at: http://www.latex-project.org/lppl.txt
+
+This work is "author-maintained".
+
+This work consists of this file graphpaper.dtx,
+and the derived files graphpaper.cls and graphpaper.pdf.
+
+\endpostamble
+%^^A
+%^^A DocStrip can silently overwrite an already existing cls file 
+\askforoverwritefalse
+%^^A
+%^^A Generates the cls file from the dtx file, stripping out all
+%^^A the documentation. The option "class" tells to DocStrip to 
+%^^A extract only the code marked with the "class" tag.
+\generate{\file{graphpaper.cls}{\from{graphpaper.dtx}{class}}}
+%
+\def\tmpa{plain}
+\ifx\tmpa\fmtname\endgroup\expandafter\bye\fi
+\endgroup
+%</internal>
+%\fi
+%^^A %
+%^^A ---------------------------------------------------------------------- 
+%^^A Here starts the second part
+%^^A ProvidesFile must be (more or less) the first command for a class dtx.
+%^^A It populates the variables \filename, \filedate, and \fileversion
+%^^A
+% \iffalse
+%<*driver>
+\ProvidesFile{graphpaper.dtx}
+%</driver>
+%<class>\NeedsTeXFormat{LaTeX2e}[2018-01-01]
+%<class>\ProvidesClass{graphpaper}%
+%<*class>
+   [2020-10-10 1.0 A LaTeX class to generate several types of graph papers]
+%</class> 
+%<*driver>
+\documentclass[11pt,a4paper]{ltxdoc}
+\usepackage[utf8]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage{lmodern,textcomp}
+\usepackage[a4paper,lines=50]{geometry}
+\usepackage{multicol}
+\hfuzz 10pt
+\let\originalmeta\meta
+\renewcommand\meta[1]{{\normalfont\originalmeta{#1}}}
+\renewcommand\marg[1]{\texttt{\{\meta{#1}\}}}
+\newcommand\Marg[1]{\texttt{\{#1\}}}
+\newcommand\opz[1]{\texttt{[\meta{#1}]}}
+\newcommand\Opz[1]{\texttt{[#1]}}
+\newcommand\amb[1]{\texttt{\slshape#1}}\let\env\amb
+\renewcommand\cs[1]{{\normalfont\ttfamily\char92#1}}
+\newcommand\Benv[1]{\texttt{\char92begin\{#1\}}}
+\newcommand\Eenv[1]{\texttt{\char92end\{#1\}}}
+\newcommand\eTeX{$\varepsilon$-\TeX}
+\providecommand\prog{}
+\renewcommand\prog[1]{\textsf{#1}}
+\newcommand\pack[1]{\texttt{\itshape#1}}
+\newcommand\class[1]{\texttt{#1}}
+%
+\newenvironment{ttsintassi}{\begin{lrbox}{0}
+\minipage{\dimexpr\linewidth-2\fboxrule-2\fboxsep}\ttfamily\obeylines}%
+{\endminipage\end{lrbox}\center\fbox{\box0}\endcenter}
+\let\ttsyntax\ttsintassi \let\endttsyntax\endttsintassi
+%
+\usepackage{color}
+\definecolor{sfondoblu}{rgb}{0.94,0.97,1}
+\usepackage{listings}
+\lstset{language=[LaTeX]TeX,
+	basicstyle=\footnotesize\ttfamily,
+	keywordstyle=\color{blue}\bfseries,
+	commentstyle=\color{gray},
+	backgroundcolor=\color{sfondoblu},
+	frameround=tttt,
+	frame=tlrb,
+	escapechar=|,
+	morekeywords={bilinear, semilogx, semilogy, loglog, polar, logpolar, smith, setgridcolor, setmajorlinethickness, setmediumlinethickness, setminorlinethickness, setminimumdistance, setxside, setyside, customcode},
+	columns=flexible
+}
+\begin{document}
+\GetFileInfo{graphpaper.dtx}
+\title{Documentation of the \class{graphpaper} \LaTeX\ class}
+\author{Claudio Beccari \and Francesco Biccari\thanks{Corresponding author: biccari at gmail.com}}
+\date{Version number \fileversion; last revised on \filedate.}
+\maketitle
+\setcounter{tocdepth}{2}
+\renewcommand{\columnseprule}{0.4pt}
+\setlength{\columnsep}{1.5cm}
+
+\addtocontents{toc}{\protect\begin{multicols}{2}}
+{\small
+\tableofcontents}
+
+\DocInput{graphpaper.dtx}
+\addtocontents{toc}{\protect\end{multicols}}
+\end{document}
+%</driver>
+% \fi
+%^^A \CheckSum{100}
+%\begin{abstract}
+% This document describes how to use the \LaTeX\ document class \class{graphpaper}.
+% It allows to print several types of graph papers: bilinear,
+% semilogarithmic, bilogarithmic, polar, Smith charts.
+%\end{abstract}
+%
+%\section{Legal terms}
+% This file is part of the |graphpaper| bundle.
+% 
+% 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 at:
+%   http://www.latex-project.org/lppl.txt
+%
+% This work has the LPPL maintenance status ``maintained''.
+% 
+% This work consists of this file graphpaper.dtx,
+% and the derived files graphpaper.cls and graphpaper.pdf.
+%
+% The list of derived (unpacked) files belonging to the distribution 
+% and covered by the LPPL is contained in the README file.
+% 
+%\section{Installation}
+% The simplest way to install \class{graphpaper} is by the package manager of your \TeX\
+% distribution (\TeX\ Live or MiK\TeX). For manual installation see the README file.
+%
+%
+% \newpage
+% \section{How to use graphpaper}
+% \label{sec:howto}
+%
+% \class{Graphpaper} is a \LaTeX\ class and it is loaded as usual:
+%
+% \iffalse
+%<*example>
+% \fi
+\begin{lstlisting}
+\documentclass|\opz{options}|{graphpaper}
+\end{lstlisting}
+% \iffalse
+%</example>
+% \fi
+%
+% It has three class options to specify the paper format:
+% \texttt{a4paper}, \texttt{a3paper}, \texttt{letterpaper}.
+% The paper orientation cannot be changed and it is always set
+% to landscape.
+% 
+% \class{Graphpaper} provides the following commands (to be used 
+% inside the body of the document) in order to compose graph papers. 
+% At the end of the execution of these commands, a new page
+% is always started.
+% 
+% \iffalse
+%<*example>
+% \fi
+\begin{lstlisting}
+\bilinear
+
+\semilogx|\marg{decades along x}|
+
+\semilogy|\marg{decades along y}|
+
+\loglog|\opz{0/1}||\marg{decades along x}||\marg{decades along y}|
+
+\polar
+
+\logpolar|\marg{decades along radius}|
+
+\smith
+\end{lstlisting}
+% \iffalse
+%</example>
+% \fi
+% The commands \cs{bilinear}, \cs{semilogx}, and \cs{semilogy} are self
+% explanatory. 
+% The optional parameter in the \cs{loglog} command chooses wether the
+% decade length along the abscissa and ordinate axes must have the same
+% dimension. It can assume the value 0 (free dimensions) or 1 (same
+% dimensions), 0 being the default.
+% The commadns \cs{polar}, \cs{logpolar}, \cs{smith} are used to plot
+% polar, logpolar, and Smith chart graph papers. The mandatory argument
+% of \cs{logpolar} specifies the number of decades.
+%
+% There are several commands to change the appearance of the graph papers.
+% They must be inserted before the graph paper command which we want they
+% affect.
+% 
+% The following ones are specific to bilinear, semilog and loglog papers
+% only:
+% \iffalse
+%<*example>
+% \fi
+\begin{lstlisting}
+\setxside|\marg{length}|
+
+\setyside|\marg{length}|
+
+\setminimumdistance|\marg{length}|
+\end{lstlisting}
+% \iffalse
+%</example>
+% \fi
+% \cs{setxside} and \cs{setyside} allow to specify the dimensions of the
+% rectangle of the grid. The default values are (260\,mm, 180\,mm) for
+% A4 paper, (250\,mm, 190\,mm) for letter paper, and (380\,mm, 280\,mm)
+% for A3 paper.
+% 
+% \cs{setminimumdistance} specifies the minimal optical distance 
+% between two lines. Default is 1\,mm. In this way, the number of
+% subdivision is automatically composed.
+%
+% The following commands are instead general settings for all graph
+% papers:
+% \iffalse
+%<*example>
+% \fi
+\begin{lstlisting}
+\setgridcolor|\marg{color}|
+
+\setmajorlinethickness|\marg{length}|
+
+\setmediumlinethickness|\marg{length}|
+
+\setminorlinethickness|\marg{length}|
+
+\customcode|\opz{0/1}\marg{picture environment commands}|
+\end{lstlisting}
+% \iffalse
+%</example>
+% \fi
+%
+% \cs{setgridcolor} sets the color of the grid. The argument must be a
+% color defined or predefined by the color or |xcolor| package. The
+% default color is the typical red-orange color used in many graph papers,
+% Pantone 2011 U corresponding  to RGB (250,153,89).
+% 
+% \cs{setmajorlinethickness}, \cs{setmediumlinethickness},
+% \cs{setminorlinethickness} can be used to change the thickness of the
+% lines. The default values  are 1\,pt, 0.6\,pt, 0.25\,pt, respectively.
+%
+% \cs{customcode} accepts all the commands accepted by the picture
+% environment.  This snippet of code is inserted inside the picture
+% environment used to draw the subsequent graph paper.
+% The origin of the coordinate system in the case of rectangular graph
+% papers is the lower left vertex. The \cs{unitlength} is set to 1\,mm. 
+% For circular plots (both polar and Smith) the origin is in the center
+% of the circle and the \cs{unitlength} is set to 1/140 of the paper height
+% currently in use.
+%
+% The \cs{customcode} command can be used, for example, to add a logo
+% or to draw on the graph paper.
+% Its optional argument is by default set to 0. If it is set to 1, the
+% content of the \cs{customcode} is erased after its usage in a
+% graphpaper.
+% 
+%  
+%\StopEventually{}
+%
+%\iffalse
+%<*class>
+%\fi
+%\clearpage
+%\section{The implementation}
+% This class file has been already identified by the commands extracted
+% by the |DocStrip| package, during  the |.dtx| file compilation.
+% Therefore the commands \cs{NeedsTeXFormat} and \cs{ProvidesClass} are
+% already present in the |.cls| file.
+%
+% \subsection{Loaded packages, class options, and initial settings}
+% The |xkeyvalue| package is used in order to define the class options:
+%    \begin{macrocode}
+\RequirePackage{xkeyval}
+%    \end{macrocode}
+% Three class options are implemented and they allows only to change the 
+% paper format (A4, A3, letter). The orientation of the paper is fixed
+% to landscape.
+%
+%    \begin{macrocode}
+\def\GP at paper{1}
+\define at key[GRP]{}{a4paper}[]{\PassOptionsToPackage{a4paper}{geometry}}
+\define at key[GRP]{}{letterpaper}[]{\PassOptionsToPackage{letterpaper}{geometry}%
+  \def\GP at paper{2}}
+\define at key[GRP]{}{a3paper}[]{\PassOptionsToPackage{a3paper}{geometry}%
+  \def\GP at paper{3}}
+\DeclareOptionX*{\ClassError{graphpaper}{Option '\CurrentOption'%
+  \MessageBreak is not valid}{Remove '\CurrentOption' %
+  from class options}}
+\ProcessOptionsX[GRP]<>
+%    \end{macrocode}
+%
+% The class is based on the \class{article} class. The default paper
+% is A4.
+%    \begin{macrocode}
+\LoadClass[a4paper,11pt]{article}
+%    \end{macrocode}
+%
+% Some packages are loaded. \pack{euclideangeometry} loads \pack{curve2e} 
+% which in turns loads \pack{pict2e}; all of them are \env{picture}
+% environment extensions.
+%    \begin{macrocode}
+\RequirePackage[landscape]{geometry}
+\RequirePackage{euclideangeometry,graphicx,xcolor}
+%    \end{macrocode}
+%
+% Default line color (Pantone 2011~U).
+%    \begin{macrocode}
+\definecolor{gridcolor}{RGB}{250,153,89}
+%    \end{macrocode}
+%
+% Default thickness of the lines used for main divisions and subdivisions.
+% The ISO-UNI standards prescribe a geometric progression with $\sqrt{2}$
+% ratio, but it is not respected here.
+% It must be keep in mind also that a safe minimum thickness for an offset
+% monochromatic printer is about 0.25\,pt, whereas a safe minimum
+% thickness for a laser printer is about 0.5\,pt.
+%    \begin{macrocode}
+\newlength\lwa
+\setlength{\lwa}{1pt}
+\newlength\lwb
+\setlength{\lwb}{0.6pt}
+\newlength\lwc
+\setlength{\lwc}{0.25pt}
+%    \end{macrocode}
+%
+% Minimum distance between two subdivision lines. A necessary parameter
+% for automatic choice of number of subdivisions. Default 1\,mm.
+%    \begin{macrocode}
+\newlength\mindistanceunit
+\setlength{\mindistanceunit}{1mm}
+%    \end{macrocode}
+%
+% Definition of the width and height of the main rectangle within which
+% the bilinear, semilog and loglog grid is composed.
+%    \begin{macrocode}
+\newlength\xsideunit
+\newlength\ysideunit
+\if\GP at paper1 
+  \setlength{\xsideunit}{260mm}
+  \setlength{\ysideunit}{180mm}
+\fi
+\if\GP at paper2 
+  \setlength{\xsideunit}{250mm}
+  \setlength{\ysideunit}{190mm}
+\fi
+\if\GP at paper3 
+  \setlength{\xsideunit}{380mm}
+  \setlength{\ysideunit}{280mm}
+\fi
+%    \end{macrocode}
+%
+%\subsection{Rectangular graph papers}
+%
+% As we will see below, the commands to compose the bilinear, semilog
+% and loglog graph papers are just proper calls of the low-level command
+% \cs{carta}. 
+%
+%\subsubsection{Service macros for rectangular graph papers}
+% 
+% First of all, four macros are defined. They are used by the
+% \cs{carta} service command only. 
+%
+% Two of them are simply two identical classical |whiledo| commands:
+% the first cycles on the counter \cs{J} while the second one on the
+% counter \cs{K}.
+% They are two because in this way two nested |whiledo| commands can be
+% implemented.
+% These \cs{WhileDo} commands have four parameters: 
+% 1. the incremental step of the counter between cycles (default 1); 
+% 2. the initial value of the counter; 
+% 3. the final value of the counter; 
+% 4. the code to execute at each cycle.
+%    \begin{macrocode}
+\newcount\J
+\newcount\K
+
+\newcommand\WhileDoOne[4][1]{%
+	\J=#2 \fpdowhile{\J=<#3 }{#4\advance\J by #1\relax}}
+
+\newcommand\WhileDoTwo[4][1]{%
+	\K=#2 \fpdowhile{\K=<#3 }{#4\advance\K by #1\relax}}
+%    \end{macrocode}
+%
+%
+% The other two commands are used to draw a periodic set of equidistant
+% lines in log scale.
+% These two commands are practically identical, the only difference is
+% that they act on different axes. 
+% These commands have six parameters: 
+% 1. number of lines to draw (distance between these lines is the fifth
+% parameter);
+% 2. value at which the first line must be drawn (x-value for vertical
+% lines, y-value for horizontal lines);
+% 3. thickness;
+% 4. tick length;
+% 5. distance between two lines (typically the length of a decade:
+% y-decade for horizontal lines, x-decade for vertical lines);
+% 6. line length (typically the length of the graph paper sides:
+% x-side for horizontal lines and y-side for vertical lines).
+%
+%    \begin{macrocode}
+\newcommand\hlines[6]{%
+\multiput(-#4,\fpeval{ln(#2) * #5 / ln(10)})(0,#5){#1}%
+{\linethickness{#3}\line(1,0){\fpeval{#6 + 2*#4}}}%
+}
+
+\newcommand\vlines[6]{%
+\multiput(\fpeval{ln(#2) * #5 / ln(10)},-#4)(#5,0){#1}%
+{\linethickness{#3}\line(0,1){\fpeval{#6 + 2*#4}}}%
+}
+%    \end{macrocode}
+%
+%\subsubsection{Command for rectangular graph papers}
+% 
+% Here starts the definition of the \cs{carta} command. Its syntax is
+%\begin{ttsyntax}
+%\cs{carta}\opz{0 or1}\marg{no. x decades}\marg{no. of y decades}
+%\end{ttsyntax}
+% If an axis has zero decades, the scale is linear.
+% For example, \cs{carta}\Marg{0}\Marg{0} composes a bilinear graph
+% paper, \cs{carta}\Marg{2}\Marg{0} composes a semilog graph paper with
+% linear y-axis and two decades along x-axis, and so on.
+% Its optional argument can be 0 or 1. If it is set to 0, and both the
+% numbers of decades are greater than zero (which means the resulting
+% graph paper is loglog), then the length of x-axis and y-axis decades
+% are set to be equal.
+%
+% Declaration of the command and its arguments.
+%    \begin{macrocode}
+\NewDocumentCommand{\carta}{O{0} m m}{%
+%    \end{macrocode}
+%
+% Typographical settings and definition of the main features of the 
+% graphpaper. \cs{xlength} and \cs{ylength} represent the lengths,
+% expressed in mm, of the rectangle dimensions. \cs{minimumdistance}
+% is the minimum distance at which two subdivision lines can be drawn.
+%    \begin{macrocode}
+\newpage
+\parindent=0pt
+\pagestyle{empty}%
+\color{gridcolor}%
+\setlength{\unitlength}{1mm}%
+\def\ticklength{2}
+\def\minorticklength{1.2}
+\def\minimumdistance{\fpeval{(\mindistanceunit/1mm)}}
+\def\xlength{\fpeval{round(round(\xsideunit/1cm) * 10)}} 
+\def\ylength{\fpeval{round(round(\ysideunit/1cm) * 10)}}
+%    \end{macrocode}
+%
+% \cs{xlinsq} and \cs{ylinsq} represent the number of big divisions 
+% (cm) on horizontal and vertical axes for linear scales, respectively. 
+%    \begin{macrocode}
+\def\xlinsq{\inteval{\xlength/10}}
+\def\ylinsq{\inteval{\ylength/10}}
+%    \end{macrocode}
+%
+% Implementation of the same decade length between x-axis and y-axis
+% for loglog graph paper. This is obtained properly changing the 
+% values of \cs{xlength} and \cs{ylength}, making them equal.
+%    \begin{macrocode}
+\edef\decx{#2}% decades along x
+\edef\decy{#3}% decades along y
+\unless\ifnum#2=0 \unless\ifnum#3=0 \ifnum#1=1%
+\fptest{\decx/\decy < \xlength/\ylength}%
+{\def\xlength{\fpeval{\ylength*\decx/\decy}}}
+{\def\ylength{\fpeval{\xlength*\decy/\decx}}}
+\fi\fi\fi
+%    \end{macrocode}
+%
+% Using the values of the paper width and height together with the
+% length of the graph paper rectangle sides, the margins are calculated
+% and passed to the geometry package in order to center the grid with
+% respect to the page.
+%    \begin{macrocode}
+\ifcsname ml\endcsname\relax\else\newlength\ml\fi
+\ifcsname mr\endcsname\relax\else\newlength\mr\fi
+\ifcsname mt\endcsname\relax\else\newlength\mt\fi
+\ifcsname mb\endcsname\relax\else\newlength\mb\fi
+\unless\ifcsname mr\endcsname\newlength\mr\fi
+\unless\ifcsname mt\endcsname\newlength\mt\fi
+\unless\ifcsname mb\endcsname\newlength\mb\fi
+\setlength{\ml}{\fpeval{(\paperwidth/1mm - \xlength)/2}mm}
+\setlength{\mr}{\fpeval{(\paperwidth/1mm - \xlength)/2}mm}
+\setlength{\mt}{\fpeval{(\paperheight/1mm - \ylength)/2}mm}
+\setlength{\mb}{\fpeval{(\paperheight/1mm - \ylength)/2}mm}
+\newgeometry{left=\ml,right=\mr,top=\mt,bottom=\mb}
+%    \end{macrocode}
+%
+% Here starts the drawing of the graph paper by the |picture| environment.
+%    \begin{macrocode}
+\begin{picture}(\xlength,\ylength)
+%    \end{macrocode}
+%
+% If the horizontal axis is linear, vertical lines are drawn by
+% simple \cs{multiput} commands. Otherwise, if the scale is logarithmic,
+% the vertical lines are drawn by the \cs{vlines} command defined above.
+%    \begin{macrocode}
+\ifnum#2=0\relax
+% vertical lines on linear abscissa. Main lines every 10 mm.
+% Second level lines every 5 mm, Third level lines every 1 mm,
+% according to the \minimumdistance value
+  \multiput(0,0)(10,0){\inteval{\xlinsq + 1}}{%
+    \linethickness{\lwa}\squarecap\line(0,1){\ylength}}
+  \ifnum\fpeval{\minimumdistance <= 5}=1
+  \multiput(5,0)(10,0){\xlinsq}{%
+    \linethickness{\lwb}\line(0,1){\ylength}}\fi
+  \ifnum\fpeval{\minimumdistance <= 1}=1
+  \multiput(0,0)(1,0){\xlength}{%
+    \linethickness{\lwc}\line(0,1){\ylength}}\fi
+\else
+  % vertical lines on log abscissa
+  \edef\decxx{\fpeval{\decx + 1}}%
+  \edef\xstep{\fpeval{\xlength / \decx}}
+  % main lines: one for each decade (10) plus one at the end
+  \vlines{\decxx}{1}{\lwa}{\ticklength}{\xstep}{\ylength}
+  % second-level lines: one every unit (1), for each decade
+  \WhileDoOne{2}{9}{\vlines{\decx}{\J}{\lwb}{%
+    \minorticklength}{\xstep}{\ylength}}
+  % third-level lines: for each decade (10) and for each unit (1):
+  % 20, 10, 5, 2 are progressively tested and adopted if the distance
+  % between two subsequent nearest lines is less to \minimumdistance  
+  \WhileDoTwo{1}{9}{%
+    \edef\xmindivfloat{%
+      \fpeval{(\K+1)*(1-10^-(\minimumdistance/\xstep))}}
+    % xmindiv corresponds to 1/20 of unit
+    \def\xmindiv{20}
+    % xmindivfloat corresponds to the distance of two
+    % subdivision with respect to the unit
+    \ifnum\fpeval{\xmindivfloat <= 0.5}=1 \def\xmindiv{10}\fi
+    \ifnum\fpeval{\xmindivfloat <= 0.2}=1 \def\xmindiv{4}\fi
+    \ifnum\fpeval{\xmindivfloat <= 0.1}=1 \def\xmindiv{2}\fi
+    \ifnum\fpeval{\xmindivfloat <= 0.05}=1 \def\xmindiv{1}\fi
+    \ifnum\fpeval{\xmindiv == 20}=1\relax
+    \else\WhileDoOne[\xmindiv]{\xmindiv}{19}{%
+      \vlines{\decx}{(\K+\J/20)}{\lwc}{0}{\xstep}{\ylength}}\fi}
+\fi
+%    \end{macrocode}
+%
+% If the vertical axis is linear, horizontal lines are drawn by
+% simple \cs{multiput} commands. Otherwise, if the scale is logarithmic,
+% the horizontal lines are drawn by the \cs{hlines} command defined above.
+%    \begin{macrocode}
+\ifnum#3=0\relax
+% horizontal lines on linear ordinates. Main lines every 10 mm.
+% Second level lines every 5 mm, Third level lines every 1 mm,
+% according to the \minimumdistance value
+  \multiput(0,0)(0,10){\inteval{\ylinsq + 1}}{%
+    \linethickness{\lwa}\squarecap\line(1,0){\xlength}}
+  \ifnum\fpeval{\minimumdistance <= 5}=1
+  \multiput(0,5)(0,10){\ylinsq}{%
+   \linethickness{\lwb}\line(1,0){\xlength}}\fi
+  \ifnum\fpeval{\minimumdistance <= 1}=1
+  \multiput(0,0)(0,1){\ylength}{%
+    \linethickness{\lwc}\line(1,0){\xlength}}\fi
+\else
+  % horizontal lines on log ordinates
+  \edef\decyy{\fpeval{\decy + 1}}%
+  \edef\ystep{\fpeval{\ylength / \decy}}
+  % main lines: one for each decade (10) plus one at the end
+  \hlines{\decyy}{1}{\lwa}{\ticklength}{\ystep}{\xlength}
+  % second-level lines: one every unit (1), for each decade
+  \WhileDoOne{2}{9}{\hlines{\decy}{\J}{\lwb}{%
+    \minorticklength}{\ystep}{\xlength}}
+  % third-level lines: for each decade (10) and for each unit (1):
+  % 20, 10, 5, 2 are progressively tested and adopted if the distance
+  % between two subsequent nearest lines is less to \minimumdistance   
+  \WhileDoTwo{1}{9}{\edef\ymindivfloat{%
+   \fpeval{(\K+1)*(1-10^-(\minimumdistance/\ystep))}}
+	% ymindiv corresponds to 1/20 of unit
+	\def\ymindiv{20}
+	% ymindivfloat corresponds to the distance of two subdivisions
+	% with respect to the unit
+	\ifnum\fpeval{\ymindivfloat <= 0.5}=1 \def\ymindiv{10}\fi
+	\ifnum\fpeval{\ymindivfloat <= 0.2}=1 \def\ymindiv{4}\fi
+	\ifnum\fpeval{\ymindivfloat <= 0.1}=1 \def\ymindiv{2}\fi
+	\ifnum\fpeval{\ymindivfloat <= 0.05}=1 \def\ymindiv{1}\fi
+	\ifnum\fpeval{\ymindiv == 20}=1\relax
+	\else\WhileDoOne[\ymindiv]{\ymindiv}{19}{%
+	  \hlines{\decy}{(\K+\J/20)}{\lwc}{0}{\ystep}{\xlength}}\fi}
+\fi
+%    \end{macrocode}
+%
+% Custom code provided by the user. After executing the code to compose
+% the rectangular graph paper and the user custom code, the latter is
+% reset if the \cs{GP at customcodereset} is true.
+%    \begin{macrocode}
+\GP at custom
+\end{picture}
+\ifGP at customcodereset\def\GP at custom{}\fi}
+%    \end{macrocode}
+%
+%
+%
+%\subsection{Circular graph papers}
+%
+% The \class{Graphpaper} class provides commands to draw three different
+% circular graph papers: linear polar chart, log polar chart, Smith chart. 
+%
+%\subsubsection{Service macros for Smith charts}
+% 
+% Here follows a list of service macros used by circular graph papers.
+%
+% Definition of the counter \cs{I}, used both in polar paper and Smith chart.
+%    \begin{macrocode}
+\newcount\I
+%    \end{macrocode}
+%
+% |Rbox| composes a tick and a label in a rotated box. It is used to
+% compose the ticks and labels along the external circle of circular
+% graph papers. It accepts three arguments: The first one is
+% optional and represents
+% the angle of rotation (default 0); the second one is optional too,
+% it is inserted by round parentheses, and it represents the position of the
+% box which can be given in cartesian $(x,y)$ or polar coordinates $(\theta:\rho)$
+% (default 0:0); the third one is mandatory and
+% contains the label.
+%    \begin{macrocode}
+\NewDocumentCommand\Rbox{O{0} D(){0:0} m}{%
+    \fptest{#1>=0}{\edef\RotLab{\fpeval{#1-90}}}{\edef\RotLab{\fpeval{#1+90}}}%
+    \put(#2){\color{black}\segment(0,0)(#1:1)\put(#1:1){%
+            \rotatebox{\RotLab}{\makebox(0,0)[c]{%
+                    \fptest{#1>=0}{\Pbox[b]}{\Pbox[t]}{\scriptstyle#3}[0]}}%
+        }%
+    }\ignorespaces}
+%    \end{macrocode}
+%
+% |\Xcircle| macro (used only for Smith charts) assumes that the scale
+% factor |\Scala| ($s$) has already been defined and it takes only one
+% mandatory parameter ($x$). It draws a circle with
+% center $(sx/(x+1),0)$ and radius $s/(x+1)$. ($x$ represents the real
+% part (resistance) of the normalised impedance.)
+%    \begin{macrocode}	
+\NewDocumentCommand\Xcircle{m}{%
+	\edef\Czero{0,0}\edef\Rzero{\Scala}%
+	\edef\Rdue{\fpeval{1/(#1+1)*\Scala}}%
+	\edef\Cdue{\fpeval{\Rzero-\Rdue},0}%
+	\Circlewithcenter\Cdue radius\Rdue\ignorespaces}
+%    \end{macrocode}
+%
+% |\Ycircle| macro (used only for Smith charts) assumes that the scale 
+% factor |\Scala| ($s$) has already been defined.
+% It assumes that the circle diameter is 100|\unitlength|s long and it
+% takes only one
+% mandatory parameter ($y$). It draws an arc of a circle with
+% center $(s,s/y)$, starting point at $(s,0)$ (and therefore radius 
+% $s/y$) and with an angle calculated in order to have the end point on
+% the external circle. ($y$ represents the imaginary part (reactance) 
+% of the normalised impedance.) 
+%    \begin{macrocode}
+\NewDocumentCommand\Ycircle{m s}{%
+	\edef\Czero{0,0}\edef\Rzero{\Scala}% external circle center and radius 
+	\edef\Rdue{\fpeval{\Scala/abs(#1)}}% Small circle radius
+	\edef\Cdue{\Rzero,\fpeval{\Scala/#1}}% Small circle center
+	\edef\Cuno{\Rzero,0}% First intersection point
+	\ModAndAngleOfVect\Cdue to\Mod and\Alfa % Small circle center polar coordinates  
+	\IntersectionOfLines(\Czero)(\Cdue)and(\Cuno)(\fpeval{\Alfa+90}:1)to\Inter
+	\SymmetricalPointOf\Cuno respect\Inter to\Idue
+	\ModAndAngleOfVect\Idue to\Mdue and\Adue
+	\SubVect\Cdue from\Idue to\IIdue
+	\ModAndAngleOfVect\IIdue to\Mod and\Alfa
+	\fptest{#1>0}{\edef\Alfa{\fpeval{270-\Alfa}}\Arc(\Cdue)(\Idue){\Alfa}}%
+	{\edef\Alfa{\fpeval{270+\Alfa}}\Arc(\Cdue)(\Cuno){\Alfa}}%
+	\IfBooleanT{#2}{\Rbox[\Adue](\Idue){\color{black}#1}}\relax
+	\ignorespaces}
+%    \end{macrocode}
+%
+% The following two macros are used to compose the resistance axis 
+% below the Smith chart.
+%
+% |CalcRxx| macro (used only for Smith charts) assumes that the scale 
+% factor |Scala| ($s$) has already been defined. 
+% First, it calculates the reflection coefficient 
+% $\Gamma = s \frac{x-1}{x+1}$ from resistance $x$.
+% A tick and a label are inserted for this value of $x$. 
+%    \begin{macrocode}
+\newcommand\CalcRxx[1]{%
+	\edef\Rxx{\fpeval{\Scala*(#1 - 1)/(#1 + 1)}}%
+	\segment(\Rxx,\LowResZero)(\Rxx,\LowResUno)\relax
+	\Pbox(\Rxx,\LowResUno)[t]{$\color{black}\scriptsize#1$}[0]\ignorespaces}
+%    \end{macrocode}
+%
+% |GradResist| macro (used only for Smith charts) 
+% draws the graduated axis for resistance and executes the |CalcRxx|
+% for several values of resistance in order to compose the ticks and
+% the labels.
+%    \begin{macrocode}
+\newcommand\GradResist[1]{%
+    \color{black}
+	\edef\LowResZero{-#1}\edef\LowResUno{\fpeval{\LowResZero-1}}%
+	\I=0\edef\Auxx{0}\relax
+	\fpdowhile{\I<=10}{\CalcRxx{\Auxx}%
+		\advance\I by1\edef\Auxx{\fpeval{\Auxx+0.1}}\ignorespaces}
+	\CalcRxx{1.5}\I=2\edef\Auxx{2}\relax
+	\fpdowhile{\I<=9}{\CalcRxx{\Auxx}%
+		\advance\I by1\edef\Auxx{\fpeval{\Auxx+1}}\ignorespaces}
+	\CalcRxx{15}\CalcRxx{30}%
+	\edef\Rxx{\Scala}%
+	{\segment(-\Rxx,\LowResZero)(\Rxx,\LowResZero)%
+		\segment(\Rxx,\LowResZero)(\Rxx,\LowResUno)%
+		\Pbox(\Rxx,\LowResUno)[t]{\infty}[0]}}
+%    \end{macrocode}
+%
+% |GradPolar| macro (used only for polar charts) 
+% draws the graduated axis for log polar charts.
+%    \begin{macrocode}
+\newcommand{\GradPolar}[1]{%
+    \color{black}
+    \edef\yline{\fpeval{-1.2 * \Scala}}
+    \linethickness{\lwa}
+    \segment(-\Scala,\yline)(\Scala,\yline)
+    \edef\ytickstart{\yline}
+    \edef\ytickstop{\fpeval{\yline-2}}
+    \edef\yytickstop{\fpeval{\yline-1}}
+    \segment(\Scala,\ytickstart)(\Scala,\ytickstop)
+    \segment(-\Scala,\ytickstart)(-\Scala,\ytickstop)
+    \fptest{#1=0}{%
+        \segment(0,\ytickstart)(0,\ytickstop)
+        \edef\plstep{\fpeval{\Scala/10}}
+        \linethickness{\lwb}
+        \multiput(\plstep,\yline)(\plstep,0){9}{\line(0,-1){1}}
+        \multiput(-\plstep,\yline)(-\plstep,0){9}{\line(0,-1){1}}%
+    }{%
+    \I=0
+    \fpwhiledo{\I<#1}{%
+        \linethickness{\lwa}
+        \edef\xtick{\fpeval{\I*\Scala/#1}}
+        \segment(\xtick,\ytickstart)(\xtick,\ytickstop)
+        \segment(-\xtick,\ytickstart)(-\xtick,\ytickstop)
+        \J=2
+        \fpwhiledo{\J<=9}{%
+            \linethickness{\lwb}
+            \edef\xtick{\fpeval{\Scala/#1 * (\I + ln(\J)/ln(10))}}
+            \segment(\xtick,\ytickstart)(\xtick,\yytickstop)
+            \segment(-\xtick,\ytickstart)(-\xtick,\yytickstop)
+            \advance\J by1\relax}
+        \advance\I by1\relax}}
+}
+%    \end{macrocode}
+%
+%
+%\subsubsection{Polar graph papers}
+%
+% The polar graph papers are composed by the command \cs{PolarChart}.
+% The syntax is
+%\begin{ttsyntax}
+% \cs{PolarChart}\opz{diameter}\marg{decades}
+%\end{ttsyntax}
+% where \meta{diameter} is the dimension (plus some extra space for
+% labels and margins) of the polar chart. Its default value 
+% corresponds to the \cs{paperheight} (the minimum dimension of the
+% paper).
+% The mandatory parameter \meta{decades} must be an integer number.
+% Its value corresponds to the number of decades of the radial
+% coordinate for the log polar graph paper.
+% If its value is zero, the chart is linear.
+% The maximum number of allowed decades is set by the macro \cs{NDecMax}:
+% its default value is~2.
+%
+% Declaration of the command and its arguments.
+%    \begin{macrocode}
+\NewDocumentCommand\PolarChart{O{\paperheight} m}{%
+%    \end{macrocode}
+%
+% Typographical settings and definition of the main features of the graphpaper.
+% \cs{xlength} and \cs{ylength} represent the lengths of the rectangle 
+% dimensions in which the polar graph is plot. 
+% The origin of the coordinate system is in the center of the page.
+%    \begin{macrocode}
+	\newpage
+	\parindent=0pt
+	\pagestyle{empty}%
+	\ifcsname pmargin\endcsname\relax\else\newlength\pmargin\fi
+	\setlength{\pmargin}{20pt}
+	\newgeometry{left=\pmargin,right=\pmargin,top=\pmargin,bottom=\pmargin}
+	\def\factor{140}
+	\unitlength=\fpeval{#1/\factor}pt
+	\def\xlength{\fpeval{(\textwidth-0.01pt)/\unitlength}} 
+	\def\ylength{\fpeval{(\textheight-0.01pt)/\unitlength}}
+	\begin{picture}(\xlength,\ylength)%
+	    (\fpeval{-\xlength/2},\fpeval{-\ylength/2})%
+	\color{gridcolor}%
+	\edef\Scala{50}% The scale factor
+%    \end{macrocode}
+%
+%
+% Circle stroking. In linear scale 10 radial units are present,
+% therefore, 10 circles are drawn with tick lines, 
+% medium lines circles every 0.5 unit and thin lines circles every
+% 0.1 unit.
+%    \begin{macrocode}
+	\fptest{#2=0}{% start circle linear radius sequence.
+		\I=1
+		\fpdowhile{\I=<100}{\edef\R{\fpeval{0.01*\Scala*\I}}%
+			{\fptest{\fpeval{\I-10(round(\I/10,0))}=0}{\linethickness{\lwa}%
+				}%
+				{\fptest{\fpeval{\I-5(round(\I/5,0))}=0}{\linethickness{\lwb}}%
+					{\linethickness{\lwc}}%
+				}\Circlewithcenter0,0radius\R
+			}\advance\I by1\relax}%
+	}% end circle linear radius sequence
+	{%
+	\edef\LnDieci{\fpeval{ln(10)}}%
+    \edef\ScalaDecade{\fpeval{\Scala/#2}}%
+	\fptest{#2<3}{%
+        \newcount\Dec \Dec=1\relax
+		\fpdowhile{\Dec=<#2}{%
+            \linethickness{\lwa}%
+            \edef\R{\fpeval{\Dec*\ScalaDecade}}%
+            \Circlewithcenter0,0radius\R% Thick circles
+			% First band from 1 to 4 (excluded)
+			\edef\LPLA{1}%
+			\fpdowhile{\LPLA<4}{
+				\edef\Logaritmo{\fpeval{\Dec-1+(ln(\LPLA))/\LnDieci}}%
+				\edef\R{\fpeval{\ScalaDecade*\Logaritmo}}%
+				\fptest{\R>0}{\fptest{\LPLA=round(\LPLA,0)}%
+					{\linethickness{\lwb}}{\linethickness{\lwc}}%
+					\Circlewithcenter0,0radius\R}{}%
+				\edef\LPLA{\fpeval{\LPLA+0.2}}}%
+			% Second band from 4 to 10 included
+			\edef\LPLA{4}%
+			\fpdowhile{\LPLA=<10}{%
+				\edef\Logaritmo{\fpeval{\Dec-1+(ln(\LPLA))/\LnDieci}}%
+				\edef\R{\fpeval{\ScalaDecade*\Logaritmo}}%
+				\fptest{\R>0}{\fptest{\LPLA=round(\LPLA,0)}%
+					{\linethickness{\lwb}}{\linethickness{\lwc}}%
+					\Circlewithcenter0,0radius\R}{}%
+				\edef\LPLA{\fpeval{\LPLA+0.5}}}%
+			\advance\Dec by1\relax}%
+		}{%
+			\ClassWarning{GraphPaper}{Logarithmic polar graph paper:\MessageBreak
+				too many decades: \number#2\space\MessageBreak
+				Reduce their number}%
+		}}% End logarithmic circle radius sequence
+	\ignorespaces
+	%
+%    \end{macrocode}
+%
+% Radial lines. \cs{I} represents the angle in degrees and it runs
+% from 0 to 359. Tick lines every 10$^\circ$; medium lines every 5$^\circ$
+% for units 2, 7, 8, 9, 10; thin lines every 2$^\circ$ for units 3, 4, 5, 6;
+% thin lines every 1$^\circ$ for units 7, 8, 9, 10.
+%    \begin{macrocode}
+	\I=0\edef\R{\Scala}%
+	\fpdowhile{\I<360}{\edef\A{\fpeval{\I}}%
+		\fptest{\fpeval{\I-10(round(\I/10,0))}=0}%
+		{\linethickness{\lwa}\segment(0,0)(\A:\R)
+			\Rbox[\A](\A:\R){\color{black}\A}}% multiple of 10
+		{\fptest{\fpeval{\I-5(round(\I/5,0))}=0}%
+			{\linethickness{\lwb}%
+				\segment(\A:5)(\A:10)
+				\segment(\A:30)(\A:\R)}% multiple of 5
+			{\linethickness{\lwc}%
+				\fptest{\fpeval{\I-2(round(\I/2,0))}=0}%
+				{\segment(\A:10)(\A:\R)}% multiple of 2
+				{\segment(\A:30)(\A:\R)}% multiple of 1
+			}%
+		}%
+		\advance\I by 1\relax
+	}\ignorespaces
+%    \end{macrocode}
+%
+% Graduated axis.
+%    \begin{macrocode}
+    \GradPolar{#2}
+%    \end{macrocode}
+%
+% Custom code provided by the user. After executing the code to compose
+% the rectangular graph paper and the user custom code, the latter is
+% reset if the \cs{GP at customcodereset} is true.
+%    \begin{macrocode}
+	\GP at custom
+	\end{picture}
+\ifGP at customcodereset\def\GP at custom{}\fi}
+%    \end{macrocode}
+%
+%
+%\subsubsection{Smith chart graph paper}
+%
+% The Smith chart graph paper is composed by the command \cs{SmithChart}:
+%\begin{ttsyntax}
+% \cs{SmithChart}\oarg{diameter}
+%\end{ttsyntax}
+% where
+% \meta{diameter} is the dimension (plus some extra space for labels and
+% margins)  of the Smith chart. Its default value corresponds to the
+% \cs{paperheight} (the minimum dimension of the paper).
+%
+%    \begin{macrocode}
+\NewDocumentCommand\SmithChart{O{\paperheight}}{%
+    \newpage
+    \parindent=0pt
+    \pagestyle{empty}%
+    \ifcsname pmargin\endcsname\relax\else\newlength\pmargin\fi
+    \setlength{\pmargin}{20pt}
+    \newgeometry{left=\pmargin,right=\pmargin,top=\pmargin,bottom=\pmargin}
+    \def\factor{140}
+    \unitlength=\fpeval{#1/\factor}pt\relax
+    \def\xlength{\fpeval{(\textwidth-0.01pt)/\unitlength}} 
+    \def\ylength{\fpeval{(\textheight-0.01pt)/\unitlength}}
+    \begin{picture}(\xlength,\ylength)%
+                   (\fpeval{-\xlength/2},\fpeval{-\ylength/2})%
+	\color{gridcolor}%
+	\edef\Scala{50}% scale factor based on the main circle but valid
+	               % for everything inside the graph paper.
+	{\color{black}\Pbox(0,0){}[4]}% Black dot in the origin
+	% images of the vertical cartesian lines
+	\I=0\relax
+	\fpdowhile{\I=<6}{\edef\Aux{\fpeval{\I/20}}{%
+			\fptest{\I=0}{\color{black}}{\color{gridcolor}}\thicklines\Xcircle{\Aux}}%
+		\advance\I by1\edef\Aux{\fpeval{\I/20}}\Xcircle{\Aux}%
+		\advance\I by1\ignorespaces}%fino a 0.4
+	\fpdowhile{\I=<16}{\edef\Aux{\fpeval{\I/20}}\relax
+		{\thicklines\Xcircle{\Aux}}\advance\I by2\edef\Aux{\fpeval{\I/20}}\relax
+		\Xcircle{\Aux}\advance\I by2\ignorespaces}% fino a 1
+	\fpdowhile{\I=<36}{\edef\Aux{\fpeval{\I/20}}\relax
+		{\thicklines\Xcircle{\Aux}}\advance\I by4\edef\Aux{\fpeval{\I/20}}\relax
+		\Xcircle{\Aux}\advance\I by4\ignorespaces}% fino a 2
+	\fpdowhile{\I=<96}{\edef\Aux{\fpeval{\I/20}}\relax
+		{\thicklines\Xcircle{\Aux}}\advance\I by8\edef\Aux{\fpeval{\I/20}}\relax
+		\Xcircle{\Aux}\advance\I by8\ignorespaces}%fino a 5
+	\fpdowhile{\I=<296}{\edef\Aux{\fpeval{\I/20}}\relax
+		{\thicklines\Xcircle{\Aux}}\advance\I by16\edef\Aux{\fpeval{\I/20}}\relax
+		\Xcircle{\Aux}\advance\I by16\ignorespaces}% up to 15
+% Images of the horizontal cartesian semi-lines
+	\Ycircle{1}%
+	{\thicklines\segment(-\Rzero,0)(\Rzero,0)}% diameter
+	\Rbox[180](-\Rzero,0){0}\Rbox[0](\Rzero,0){\infty}
+	\Ycircle{0.05}\Ycircle{-0.05}\I=2% \I=2 is to avoid a division by 0
+	\fpdowhile{\I=<18}{\edef\Aux{\fpeval{\I/20}}\relax
+		{\thicklines\Ycircle{\Aux}*\Ycircle{-\Aux}*}%
+		\advance\I by1\edef\Aux{\fpeval{\I/20}}\relax
+		\Ycircle{\Aux}\Ycircle{-\Aux}\advance\I by 1\ignorespaces}% restarts from 1
+	\fpdowhile{\I<40}{\edef\Aux{\fpeval{\I/20}}\relax
+		{\thicklines\Ycircle{\Aux}*\Ycircle{-\Aux}*}%
+		\advance\I by 2\edef\Aux{\fpeval{\I/20}}\relax
+		\Ycircle{\Aux}\Ycircle{-\Aux}\advance\I by 2\ignorespaces}% restarts from 2
+	\fpdowhile{\I<80}{\edef\Aux{\fpeval{\I/20}}\relax
+		{\thicklines\Ycircle{\Aux}*\Ycircle{-\Aux}*}%
+		\advance\I by 4\edef\Aux{\fpeval{\I/20}}\relax
+		\Ycircle{\Aux}\Ycircle{-\Aux}\advance\I by 4\ignorespaces}% restarts from 4
+	\fpdowhile{\I=<140}{\edef\Aux{\fpeval{\I/20}}\relax
+		{\thicklines\Ycircle{\Aux}*\Ycircle{-\Aux}*}%
+		\advance\I by 10\edef\Aux{\fpeval{\I/20}}\relax
+		\Ycircle{\Aux}\Ycircle{-\Aux}\advance\I by 10\ignorespaces}% stops at 7.5
+	{\thicklines\Ycircle{8}*\Ycircle{-8}*}%
+	% non linear graduation for the abscissas 
+	\GradResist{62}%
+	% Polar graduation in normalised wave length percentages 
+	\edef\Rout{\fpeval{1.09*\Rzero}}%
+	\edef\RoutCifre{\fpeval{\Rout+2}}%
+	\edef\RoutTak{\fpeval{\Rout+1}}%
+	{\color{black}%
+		\Circlewithcenter 0,0radius\Rout
+		\I=0\fpdowhile{\I<10}%
+		{\edef\LAng{\fpeval{180-\I*36}}\edef\Cifre{\fpeval{\I*5}}%
+			\put(\LAng:\RoutCifre){%
+				\rotatebox{\fpeval{\LAng-90}}{\makebox(0,0)[b]{\scriptsize\Cifre}}}%
+			\advance\I by 1\ignorespaces}
+		\I=0\fpdowhile{\I<50}{%
+			\edef\LAng{\fpeval{180-\I*7.2}}\segment(\LAng:\Rout)(\LAng:\RoutTak)%
+			\advance\I by1\ignorespaces}
+	%
+	% Outside circle encloses everything except the abscissa graduation.
+	% Everything lays inside a square 
+		\Circlewithcenter0,0radius{\fpeval{\Scala+9}}}%
+	% Now the user supplied code is executed
+	\GP at custom
+	\end{picture}
+\ifGP at customcodereset\def\GP at custom{}\fi}%
+%    \end{macrocode}
+%
+%
+%\subsection{User interface}
+%
+% Here follows the user commands to draw the graph papers, as described in
+% section~\ref{sec:howto}:
+%    \begin{macrocode}
+\NewDocumentCommand{\bilinear}{}{\carta{0}{0}}
+\NewDocumentCommand{\semilogx}{m}{\carta{#1}{0}}
+\NewDocumentCommand{\semilogy}{m}{\carta{0}{#1}}
+\NewDocumentCommand{\loglog}{O{0}mm}{\carta[#1]{#2}{#3}}
+\NewDocumentCommand{\polar}{}{\PolarChart{0}}
+\NewDocumentCommand{\logpolar}{m}{\PolarChart{#1}}
+\NewDocumentCommand{\smith}{}{\SmithChart}
+%    \end{macrocode}
+%
+% The user commands to customise the appearance of the graph
+% papers is defined. Their syntax was previously described in
+% sectio~\ref{sec:howto}:
+%    \begin{macrocode}
+\NewDocumentCommand{\setgridcolor}{m}{\colorlet{gridcolor}{#1}}
+\NewDocumentCommand{\setmajorlinethickness}{m}{\setlength{\lwa}{#1}}
+\NewDocumentCommand{\setmediumlinethickness}{m}{\setlength{\lwa}{#1}}
+\NewDocumentCommand{\setminorlinethickness}{m}{\setlength{\lwa}{#1}}
+\NewDocumentCommand{\setminimumdistance}{m}{\setlength{\mindistanceunit}{#1}}
+\NewDocumentCommand{\setxside}{m}{%
+	\ifnum\fpeval{#1 > \paperwidth}=1 \ClassError{graphpaper}{X side too wide!} \fi
+	\setlength{\xsideunit}{#1}}
+\NewDocumentCommand{\setyside}{m}{%
+	\ifnum\fpeval{#1 > \paperheight}=1 \ClassError{graphpaper}{Y side too wide!} \fi
+	\setlength{\ysideunit}{#1}}
+\def\GP at custom{}
+\newif\ifGP at customcodereset \GP at customcoderesettrue
+\NewDocumentCommand{\customcode}{O{1} m}{%
+	\ifnum#1=\z@ \GP at customcoderesetfalse \fi%
+	\def\GP at custom{#2}}
+%    \end{macrocode}
+%
+%
+%\subsection{Class code end}
+%
+%    \begin{macrocode}
+%
+\endinput
+%    \end{macrocode}
+%
+%\iffalse
+%</class>
+%\fi
+%
+% \Finale
+%^^A
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/source/latex/graphpaper/graphpaper.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/graphpaper/graphpaper.cls
===================================================================
--- trunk/Master/texmf-dist/tex/latex/graphpaper/graphpaper.cls	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/graphpaper/graphpaper.cls	2020-10-24 20:28:26 UTC (rev 56750)
@@ -0,0 +1,440 @@
+%%
+%% This is file `graphpaper.cls',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% graphpaper.dtx  (with options: `class')
+%%  ________________________________________
+%%  The graphpaper class for generating several types of graph paper
+%%  Copyright (C) 2020 C. Beccari & F. Biccari
+%%  All rights reserved
+%% 
+%%  License information appended
+%% 
+\NeedsTeXFormat{LaTeX2e}[2018-01-01]
+\ProvidesClass{graphpaper}%
+   [2020-10-10 1.0 A LaTeX class to generate several types of graph papers]
+\RequirePackage{xkeyval}
+\def\GP at paper{1}
+\define at key[GRP]{}{a4paper}[]{\PassOptionsToPackage{a4paper}{geometry}}
+\define at key[GRP]{}{letterpaper}[]{\PassOptionsToPackage{letterpaper}{geometry}%
+  \def\GP at paper{2}}
+\define at key[GRP]{}{a3paper}[]{\PassOptionsToPackage{a3paper}{geometry}%
+  \def\GP at paper{3}}
+\DeclareOptionX*{\ClassError{graphpaper}{Option '\CurrentOption'%
+  \MessageBreak is not valid}{Remove '\CurrentOption' %
+  from class options}}
+\ProcessOptionsX[GRP]<>
+\LoadClass[a4paper,11pt]{article}
+\RequirePackage[landscape]{geometry}
+\RequirePackage{euclideangeometry,graphicx,xcolor}
+\definecolor{gridcolor}{RGB}{250,153,89}
+\newlength\lwa
+\setlength{\lwa}{1pt}
+\newlength\lwb
+\setlength{\lwb}{0.6pt}
+\newlength\lwc
+\setlength{\lwc}{0.25pt}
+\newlength\mindistanceunit
+\setlength{\mindistanceunit}{1mm}
+\newlength\xsideunit
+\newlength\ysideunit
+\if\GP at paper1
+  \setlength{\xsideunit}{260mm}
+  \setlength{\ysideunit}{180mm}
+\fi
+\if\GP at paper2
+  \setlength{\xsideunit}{250mm}
+  \setlength{\ysideunit}{190mm}
+\fi
+\if\GP at paper3
+  \setlength{\xsideunit}{380mm}
+  \setlength{\ysideunit}{280mm}
+\fi
+\newcount\J
+\newcount\K
+
+\newcommand\WhileDoOne[4][1]{%
+\J=#2 \fpdowhile{\J=<#3 }{#4\advance\J by #1\relax}}
+
+\newcommand\WhileDoTwo[4][1]{%
+\K=#2 \fpdowhile{\K=<#3 }{#4\advance\K by #1\relax}}
+\newcommand\hlines[6]{%
+\multiput(-#4,\fpeval{ln(#2) * #5 / ln(10)})(0,#5){#1}%
+{\linethickness{#3}\line(1,0){\fpeval{#6 + 2*#4}}}%
+}
+
+\newcommand\vlines[6]{%
+\multiput(\fpeval{ln(#2) * #5 / ln(10)},-#4)(#5,0){#1}%
+{\linethickness{#3}\line(0,1){\fpeval{#6 + 2*#4}}}%
+}
+\NewDocumentCommand{\carta}{O{0} m m}{%
+\newpage
+\parindent=0pt
+\pagestyle{empty}%
+\color{gridcolor}%
+\setlength{\unitlength}{1mm}%
+\def\ticklength{2}
+\def\minorticklength{1.2}
+\def\minimumdistance{\fpeval{(\mindistanceunit/1mm)}}
+\def\xlength{\fpeval{round(round(\xsideunit/1cm) * 10)}}
+\def\ylength{\fpeval{round(round(\ysideunit/1cm) * 10)}}
+\def\xlinsq{\inteval{\xlength/10}}
+\def\ylinsq{\inteval{\ylength/10}}
+\edef\decx{#2}% decades along x
+\edef\decy{#3}% decades along y
+\unless\ifnum#2=0 \unless\ifnum#3=0 \ifnum#1=1%
+\fptest{\decx/\decy < \xlength/\ylength}%
+{\def\xlength{\fpeval{\ylength*\decx/\decy}}}
+{\def\ylength{\fpeval{\xlength*\decy/\decx}}}
+\fi\fi\fi
+\ifcsname ml\endcsname\relax\else\newlength\ml\fi
+\ifcsname mr\endcsname\relax\else\newlength\mr\fi
+\ifcsname mt\endcsname\relax\else\newlength\mt\fi
+\ifcsname mb\endcsname\relax\else\newlength\mb\fi
+\unless\ifcsname mr\endcsname\newlength\mr\fi
+\unless\ifcsname mt\endcsname\newlength\mt\fi
+\unless\ifcsname mb\endcsname\newlength\mb\fi
+\setlength{\ml}{\fpeval{(\paperwidth/1mm - \xlength)/2}mm}
+\setlength{\mr}{\fpeval{(\paperwidth/1mm - \xlength)/2}mm}
+\setlength{\mt}{\fpeval{(\paperheight/1mm - \ylength)/2}mm}
+\setlength{\mb}{\fpeval{(\paperheight/1mm - \ylength)/2}mm}
+\newgeometry{left=\ml,right=\mr,top=\mt,bottom=\mb}
+\begin{picture}(\xlength,\ylength)
+\ifnum#2=0\relax
+  \multiput(0,0)(10,0){\inteval{\xlinsq + 1}}{%
+    \linethickness{\lwa}\squarecap\line(0,1){\ylength}}
+  \ifnum\fpeval{\minimumdistance <= 5}=1
+  \multiput(5,0)(10,0){\xlinsq}{%
+    \linethickness{\lwb}\line(0,1){\ylength}}\fi
+  \ifnum\fpeval{\minimumdistance <= 1}=1
+  \multiput(0,0)(1,0){\xlength}{%
+    \linethickness{\lwc}\line(0,1){\ylength}}\fi
+\else
+  % vertical lines on log abscissa
+  \edef\decxx{\fpeval{\decx + 1}}%
+  \edef\xstep{\fpeval{\xlength / \decx}}
+  % main lines: one for each decade (10) plus one at the end
+  \vlines{\decxx}{1}{\lwa}{\ticklength}{\xstep}{\ylength}
+  % second-level lines: one every unit (1), for each decade
+  \WhileDoOne{2}{9}{\vlines{\decx}{\J}{\lwb}{%
+    \minorticklength}{\xstep}{\ylength}}
+  % third-level lines: for each decade (10) and for each unit (1):
+  % 20, 10, 5, 2 are progressively tested and adopted if the distance
+  % between two subsequent nearest lines is less to \minimumdistance
+  \WhileDoTwo{1}{9}{%
+    \edef\xmindivfloat{%
+      \fpeval{(\K+1)*(1-10^-(\minimumdistance/\xstep))}}
+    % xmindiv corresponds to 1/20 of unit
+    \def\xmindiv{20}
+    % xmindivfloat corresponds to the distance of two
+    % subdivision with respect to the unit
+    \ifnum\fpeval{\xmindivfloat <= 0.5}=1 \def\xmindiv{10}\fi
+    \ifnum\fpeval{\xmindivfloat <= 0.2}=1 \def\xmindiv{4}\fi
+    \ifnum\fpeval{\xmindivfloat <= 0.1}=1 \def\xmindiv{2}\fi
+    \ifnum\fpeval{\xmindivfloat <= 0.05}=1 \def\xmindiv{1}\fi
+    \ifnum\fpeval{\xmindiv == 20}=1\relax
+    \else\WhileDoOne[\xmindiv]{\xmindiv}{19}{%
+      \vlines{\decx}{(\K+\J/20)}{\lwc}{0}{\xstep}{\ylength}}\fi}
+\fi
+\ifnum#3=0\relax
+  \multiput(0,0)(0,10){\inteval{\ylinsq + 1}}{%
+    \linethickness{\lwa}\squarecap\line(1,0){\xlength}}
+  \ifnum\fpeval{\minimumdistance <= 5}=1
+  \multiput(0,5)(0,10){\ylinsq}{%
+   \linethickness{\lwb}\line(1,0){\xlength}}\fi
+  \ifnum\fpeval{\minimumdistance <= 1}=1
+  \multiput(0,0)(0,1){\ylength}{%
+    \linethickness{\lwc}\line(1,0){\xlength}}\fi
+\else
+  % horizontal lines on log ordinates
+  \edef\decyy{\fpeval{\decy + 1}}%
+  \edef\ystep{\fpeval{\ylength / \decy}}
+  % main lines: one for each decade (10) plus one at the end
+  \hlines{\decyy}{1}{\lwa}{\ticklength}{\ystep}{\xlength}
+  % second-level lines: one every unit (1), for each decade
+  \WhileDoOne{2}{9}{\hlines{\decy}{\J}{\lwb}{%
+    \minorticklength}{\ystep}{\xlength}}
+  % third-level lines: for each decade (10) and for each unit (1):
+  % 20, 10, 5, 2 are progressively tested and adopted if the distance
+  % between two subsequent nearest lines is less to \minimumdistance
+  \WhileDoTwo{1}{9}{\edef\ymindivfloat{%
+   \fpeval{(\K+1)*(1-10^-(\minimumdistance/\ystep))}}
+\def\ymindiv{20}
+\ifnum\fpeval{\ymindivfloat <= 0.5}=1 \def\ymindiv{10}\fi
+\ifnum\fpeval{\ymindivfloat <= 0.2}=1 \def\ymindiv{4}\fi
+\ifnum\fpeval{\ymindivfloat <= 0.1}=1 \def\ymindiv{2}\fi
+\ifnum\fpeval{\ymindivfloat <= 0.05}=1 \def\ymindiv{1}\fi
+\ifnum\fpeval{\ymindiv == 20}=1\relax
+\else\WhileDoOne[\ymindiv]{\ymindiv}{19}{%
+  \hlines{\decy}{(\K+\J/20)}{\lwc}{0}{\ystep}{\xlength}}\fi}
+\fi
+\GP at custom
+\end{picture}
+\ifGP at customcodereset\def\GP at custom{}\fi}
+\newcount\I
+\NewDocumentCommand\Rbox{O{0} D(){0:0} m}{%
+    \fptest{#1>=0}{\edef\RotLab{\fpeval{#1-90}}}{\edef\RotLab{\fpeval{#1+90}}}%
+    \put(#2){\color{black}\segment(0,0)(#1:1)\put(#1:1){%
+            \rotatebox{\RotLab}{\makebox(0,0)[c]{%
+                    \fptest{#1>=0}{\Pbox[b]}{\Pbox[t]}{\scriptstyle#3}[0]}}%
+        }%
+    }\ignorespaces}
+\NewDocumentCommand\Xcircle{m}{%
+\edef\Czero{0,0}\edef\Rzero{\Scala}%
+\edef\Rdue{\fpeval{1/(#1+1)*\Scala}}%
+\edef\Cdue{\fpeval{\Rzero-\Rdue},0}%
+\Circlewithcenter\Cdue radius\Rdue\ignorespaces}
+\NewDocumentCommand\Ycircle{m s}{%
+\edef\Czero{0,0}\edef\Rzero{\Scala}% external circle center and radius
+\edef\Rdue{\fpeval{\Scala/abs(#1)}}% Small circle radius
+\edef\Cdue{\Rzero,\fpeval{\Scala/#1}}% Small circle center
+\edef\Cuno{\Rzero,0}% First intersection point
+\ModAndAngleOfVect\Cdue to\Mod and\Alfa % Small circle center polar coordinates
+\IntersectionOfLines(\Czero)(\Cdue)and(\Cuno)(\fpeval{\Alfa+90}:1)to\Inter
+\SymmetricalPointOf\Cuno respect\Inter to\Idue
+\ModAndAngleOfVect\Idue to\Mdue and\Adue
+\SubVect\Cdue from\Idue to\IIdue
+\ModAndAngleOfVect\IIdue to\Mod and\Alfa
+\fptest{#1>0}{\edef\Alfa{\fpeval{270-\Alfa}}\Arc(\Cdue)(\Idue){\Alfa}}%
+{\edef\Alfa{\fpeval{270+\Alfa}}\Arc(\Cdue)(\Cuno){\Alfa}}%
+\IfBooleanT{#2}{\Rbox[\Adue](\Idue){\color{black}#1}}\relax
+\ignorespaces}
+\newcommand\CalcRxx[1]{%
+\edef\Rxx{\fpeval{\Scala*(#1 - 1)/(#1 + 1)}}%
+\segment(\Rxx,\LowResZero)(\Rxx,\LowResUno)\relax
+\Pbox(\Rxx,\LowResUno)[t]{$\color{black}\scriptsize#1$}[0]\ignorespaces}
+\newcommand\GradResist[1]{%
+    \color{black}
+\edef\LowResZero{-#1}\edef\LowResUno{\fpeval{\LowResZero-1}}%
+\I=0\edef\Auxx{0}\relax
+\fpdowhile{\I<=10}{\CalcRxx{\Auxx}%
+\advance\I by1\edef\Auxx{\fpeval{\Auxx+0.1}}\ignorespaces}
+\CalcRxx{1.5}\I=2\edef\Auxx{2}\relax
+\fpdowhile{\I<=9}{\CalcRxx{\Auxx}%
+\advance\I by1\edef\Auxx{\fpeval{\Auxx+1}}\ignorespaces}
+\CalcRxx{15}\CalcRxx{30}%
+\edef\Rxx{\Scala}%
+{\segment(-\Rxx,\LowResZero)(\Rxx,\LowResZero)%
+\segment(\Rxx,\LowResZero)(\Rxx,\LowResUno)%
+\Pbox(\Rxx,\LowResUno)[t]{\infty}[0]}}
+\newcommand{\GradPolar}[1]{%
+    \color{black}
+    \edef\yline{\fpeval{-1.2 * \Scala}}
+    \linethickness{\lwa}
+    \segment(-\Scala,\yline)(\Scala,\yline)
+    \edef\ytickstart{\yline}
+    \edef\ytickstop{\fpeval{\yline-2}}
+    \edef\yytickstop{\fpeval{\yline-1}}
+    \segment(\Scala,\ytickstart)(\Scala,\ytickstop)
+    \segment(-\Scala,\ytickstart)(-\Scala,\ytickstop)
+    \fptest{#1=0}{%
+        \segment(0,\ytickstart)(0,\ytickstop)
+        \edef\plstep{\fpeval{\Scala/10}}
+        \linethickness{\lwb}
+        \multiput(\plstep,\yline)(\plstep,0){9}{\line(0,-1){1}}
+        \multiput(-\plstep,\yline)(-\plstep,0){9}{\line(0,-1){1}}%
+    }{%
+    \I=0
+    \fpwhiledo{\I<#1}{%
+        \linethickness{\lwa}
+        \edef\xtick{\fpeval{\I*\Scala/#1}}
+        \segment(\xtick,\ytickstart)(\xtick,\ytickstop)
+        \segment(-\xtick,\ytickstart)(-\xtick,\ytickstop)
+        \J=2
+        \fpwhiledo{\J<=9}{%
+            \linethickness{\lwb}
+            \edef\xtick{\fpeval{\Scala/#1 * (\I + ln(\J)/ln(10))}}
+            \segment(\xtick,\ytickstart)(\xtick,\yytickstop)
+            \segment(-\xtick,\ytickstart)(-\xtick,\yytickstop)
+            \advance\J by1\relax}
+        \advance\I by1\relax}}
+}
+\NewDocumentCommand\PolarChart{O{\paperheight} m}{%
+\newpage
+\parindent=0pt
+\pagestyle{empty}%
+\ifcsname pmargin\endcsname\relax\else\newlength\pmargin\fi
+\setlength{\pmargin}{20pt}
+\newgeometry{left=\pmargin,right=\pmargin,top=\pmargin,bottom=\pmargin}
+\def\factor{140}
+\unitlength=\fpeval{#1/\factor}pt
+\def\xlength{\fpeval{(\textwidth-0.01pt)/\unitlength}}
+\def\ylength{\fpeval{(\textheight-0.01pt)/\unitlength}}
+\begin{picture}(\xlength,\ylength)%
+    (\fpeval{-\xlength/2},\fpeval{-\ylength/2})%
+\color{gridcolor}%
+\edef\Scala{50}% The scale factor
+\fptest{#2=0}{% start circle linear radius sequence.
+\I=1
+\fpdowhile{\I=<100}{\edef\R{\fpeval{0.01*\Scala*\I}}%
+{\fptest{\fpeval{\I-10(round(\I/10,0))}=0}{\linethickness{\lwa}%
+}%
+{\fptest{\fpeval{\I-5(round(\I/5,0))}=0}{\linethickness{\lwb}}%
+{\linethickness{\lwc}}%
+}\Circlewithcenter0,0radius\R
+}\advance\I by1\relax}%
+}% end circle linear radius sequence
+{%
+\edef\LnDieci{\fpeval{ln(10)}}%
+    \edef\ScalaDecade{\fpeval{\Scala/#2}}%
+\fptest{#2<3}{%
+        \newcount\Dec \Dec=1\relax
+\fpdowhile{\Dec=<#2}{%
+            \linethickness{\lwa}%
+            \edef\R{\fpeval{\Dec*\ScalaDecade}}%
+            \Circlewithcenter0,0radius\R% Thick circles
+\edef\LPLA{1}%
+\fpdowhile{\LPLA<4}{
+\edef\Logaritmo{\fpeval{\Dec-1+(ln(\LPLA))/\LnDieci}}%
+\edef\R{\fpeval{\ScalaDecade*\Logaritmo}}%
+\fptest{\R>0}{\fptest{\LPLA=round(\LPLA,0)}%
+{\linethickness{\lwb}}{\linethickness{\lwc}}%
+\Circlewithcenter0,0radius\R}{}%
+\edef\LPLA{\fpeval{\LPLA+0.2}}}%
+\edef\LPLA{4}%
+\fpdowhile{\LPLA=<10}{%
+\edef\Logaritmo{\fpeval{\Dec-1+(ln(\LPLA))/\LnDieci}}%
+\edef\R{\fpeval{\ScalaDecade*\Logaritmo}}%
+\fptest{\R>0}{\fptest{\LPLA=round(\LPLA,0)}%
+{\linethickness{\lwb}}{\linethickness{\lwc}}%
+\Circlewithcenter0,0radius\R}{}%
+\edef\LPLA{\fpeval{\LPLA+0.5}}}%
+\advance\Dec by1\relax}%
+}{%
+\ClassWarning{GraphPaper}{Logarithmic polar graph paper:\MessageBreak
+too many decades: \number#2\space\MessageBreak
+Reduce their number}%
+}}% End logarithmic circle radius sequence
+\ignorespaces
+\I=0\edef\R{\Scala}%
+\fpdowhile{\I<360}{\edef\A{\fpeval{\I}}%
+\fptest{\fpeval{\I-10(round(\I/10,0))}=0}%
+{\linethickness{\lwa}\segment(0,0)(\A:\R)
+\Rbox[\A](\A:\R){\color{black}\A}}% multiple of 10
+{\fptest{\fpeval{\I-5(round(\I/5,0))}=0}%
+{\linethickness{\lwb}%
+\segment(\A:5)(\A:10)
+\segment(\A:30)(\A:\R)}% multiple of 5
+{\linethickness{\lwc}%
+\fptest{\fpeval{\I-2(round(\I/2,0))}=0}%
+{\segment(\A:10)(\A:\R)}% multiple of 2
+{\segment(\A:30)(\A:\R)}% multiple of 1
+}%
+}%
+\advance\I by 1\relax
+}\ignorespaces
+    \GradPolar{#2}
+\GP at custom
+\end{picture}
+\ifGP at customcodereset\def\GP at custom{}\fi}
+\NewDocumentCommand\SmithChart{O{\paperheight}}{%
+    \newpage
+    \parindent=0pt
+    \pagestyle{empty}%
+    \ifcsname pmargin\endcsname\relax\else\newlength\pmargin\fi
+    \setlength{\pmargin}{20pt}
+    \newgeometry{left=\pmargin,right=\pmargin,top=\pmargin,bottom=\pmargin}
+    \def\factor{140}
+    \unitlength=\fpeval{#1/\factor}pt\relax
+    \def\xlength{\fpeval{(\textwidth-0.01pt)/\unitlength}}
+    \def\ylength{\fpeval{(\textheight-0.01pt)/\unitlength}}
+    \begin{picture}(\xlength,\ylength)%
+                   (\fpeval{-\xlength/2},\fpeval{-\ylength/2})%
+\color{gridcolor}%
+\edef\Scala{50}% scale factor based on the main circle but valid
+               % for everything inside the graph paper.
+{\color{black}\Pbox(0,0){}[4]}% Black dot in the origin
+\I=0\relax
+\fpdowhile{\I=<6}{\edef\Aux{\fpeval{\I/20}}{%
+\fptest{\I=0}{\color{black}}{\color{gridcolor}}\thicklines\Xcircle{\Aux}}%
+\advance\I by1\edef\Aux{\fpeval{\I/20}}\Xcircle{\Aux}%
+\advance\I by1\ignorespaces}%fino a 0.4
+\fpdowhile{\I=<16}{\edef\Aux{\fpeval{\I/20}}\relax
+{\thicklines\Xcircle{\Aux}}\advance\I by2\edef\Aux{\fpeval{\I/20}}\relax
+\Xcircle{\Aux}\advance\I by2\ignorespaces}% fino a 1
+\fpdowhile{\I=<36}{\edef\Aux{\fpeval{\I/20}}\relax
+{\thicklines\Xcircle{\Aux}}\advance\I by4\edef\Aux{\fpeval{\I/20}}\relax
+\Xcircle{\Aux}\advance\I by4\ignorespaces}% fino a 2
+\fpdowhile{\I=<96}{\edef\Aux{\fpeval{\I/20}}\relax
+{\thicklines\Xcircle{\Aux}}\advance\I by8\edef\Aux{\fpeval{\I/20}}\relax
+\Xcircle{\Aux}\advance\I by8\ignorespaces}%fino a 5
+\fpdowhile{\I=<296}{\edef\Aux{\fpeval{\I/20}}\relax
+{\thicklines\Xcircle{\Aux}}\advance\I by16\edef\Aux{\fpeval{\I/20}}\relax
+\Xcircle{\Aux}\advance\I by16\ignorespaces}% up to 15
+\Ycircle{1}%
+{\thicklines\segment(-\Rzero,0)(\Rzero,0)}% diameter
+\Rbox[180](-\Rzero,0){0}\Rbox[0](\Rzero,0){\infty}
+\Ycircle{0.05}\Ycircle{-0.05}\I=2% \I=2 is to avoid a division by 0
+\fpdowhile{\I=<18}{\edef\Aux{\fpeval{\I/20}}\relax
+{\thicklines\Ycircle{\Aux}*\Ycircle{-\Aux}*}%
+\advance\I by1\edef\Aux{\fpeval{\I/20}}\relax
+\Ycircle{\Aux}\Ycircle{-\Aux}\advance\I by 1\ignorespaces}% restarts from 1
+\fpdowhile{\I<40}{\edef\Aux{\fpeval{\I/20}}\relax
+{\thicklines\Ycircle{\Aux}*\Ycircle{-\Aux}*}%
+\advance\I by 2\edef\Aux{\fpeval{\I/20}}\relax
+\Ycircle{\Aux}\Ycircle{-\Aux}\advance\I by 2\ignorespaces}% restarts from 2
+\fpdowhile{\I<80}{\edef\Aux{\fpeval{\I/20}}\relax
+{\thicklines\Ycircle{\Aux}*\Ycircle{-\Aux}*}%
+\advance\I by 4\edef\Aux{\fpeval{\I/20}}\relax
+\Ycircle{\Aux}\Ycircle{-\Aux}\advance\I by 4\ignorespaces}% restarts from 4
+\fpdowhile{\I=<140}{\edef\Aux{\fpeval{\I/20}}\relax
+{\thicklines\Ycircle{\Aux}*\Ycircle{-\Aux}*}%
+\advance\I by 10\edef\Aux{\fpeval{\I/20}}\relax
+\Ycircle{\Aux}\Ycircle{-\Aux}\advance\I by 10\ignorespaces}% stops at 7.5
+{\thicklines\Ycircle{8}*\Ycircle{-8}*}%
+\GradResist{62}%
+\edef\Rout{\fpeval{1.09*\Rzero}}%
+\edef\RoutCifre{\fpeval{\Rout+2}}%
+\edef\RoutTak{\fpeval{\Rout+1}}%
+{\color{black}%
+\Circlewithcenter 0,0radius\Rout
+\I=0\fpdowhile{\I<10}%
+{\edef\LAng{\fpeval{180-\I*36}}\edef\Cifre{\fpeval{\I*5}}%
+\put(\LAng:\RoutCifre){%
+\rotatebox{\fpeval{\LAng-90}}{\makebox(0,0)[b]{\scriptsize\Cifre}}}%
+\advance\I by 1\ignorespaces}
+\I=0\fpdowhile{\I<50}{%
+\edef\LAng{\fpeval{180-\I*7.2}}\segment(\LAng:\Rout)(\LAng:\RoutTak)%
+\advance\I by1\ignorespaces}
+\Circlewithcenter0,0radius{\fpeval{\Scala+9}}}%
+\GP at custom
+\end{picture}
+\ifGP at customcodereset\def\GP at custom{}\fi}%
+\NewDocumentCommand{\bilinear}{}{\carta{0}{0}}
+\NewDocumentCommand{\semilogx}{m}{\carta{#1}{0}}
+\NewDocumentCommand{\semilogy}{m}{\carta{0}{#1}}
+\NewDocumentCommand{\loglog}{O{0}mm}{\carta[#1]{#2}{#3}}
+\NewDocumentCommand{\polar}{}{\PolarChart{0}}
+\NewDocumentCommand{\logpolar}{m}{\PolarChart{#1}}
+\NewDocumentCommand{\smith}{}{\SmithChart}
+\NewDocumentCommand{\setgridcolor}{m}{\colorlet{gridcolor}{#1}}
+\NewDocumentCommand{\setmajorlinethickness}{m}{\setlength{\lwa}{#1}}
+\NewDocumentCommand{\setmediumlinethickness}{m}{\setlength{\lwa}{#1}}
+\NewDocumentCommand{\setminorlinethickness}{m}{\setlength{\lwa}{#1}}
+\NewDocumentCommand{\setminimumdistance}{m}{\setlength{\mindistanceunit}{#1}}
+\NewDocumentCommand{\setxside}{m}{%
+\ifnum\fpeval{#1 > \paperwidth}=1 \ClassError{graphpaper}{X side too wide!} \fi
+\setlength{\xsideunit}{#1}}
+\NewDocumentCommand{\setyside}{m}{%
+\ifnum\fpeval{#1 > \paperheight}=1 \ClassError{graphpaper}{Y side too wide!} \fi
+\setlength{\ysideunit}{#1}}
+\def\GP at custom{}
+\newif\ifGP at customcodereset \GP at customcoderesettrue
+\NewDocumentCommand{\customcode}{O{1} m}{%
+\ifnum#1=\z@ \GP at customcoderesetfalse \fi%
+\def\GP at custom{#2}}
+%% Copyright (C) 2020 Claudio Beccari & Francesco Biccari
+%% 
+%% Distributable under the LaTeX Project Public License,
+%% version 1.3c or higher (your choice). The latest version of
+%% this license is at: http://www.latex-project.org/lppl.txt
+%% 
+%% This work is "author-maintained".
+%% 
+%% This work consists of this file graphpaper.dtx,
+%% and the derived files graphpaper.cls and graphpaper.pdf.
+%% 
+%%
+%% End of file `graphpaper.cls'.


Property changes on: trunk/Master/texmf-dist/tex/latex/graphpaper/graphpaper.cls
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/tlpkg/bin/tlpkg-ctan-check
===================================================================
--- trunk/Master/tlpkg/bin/tlpkg-ctan-check	2020-10-24 20:27:41 UTC (rev 56749)
+++ trunk/Master/tlpkg/bin/tlpkg-ctan-check	2020-10-24 20:28:26 UTC (rev 56750)
@@ -356,7 +356,7 @@
     graph35 graphbox graphics
     graphics-cfg graphics-def graphics-pln
     graphicx-psmin graphicxbox graphicxpsd
-    graphviz grayhints greek-fontenc greek-inputenc
+    graphpaper graphviz grayhints greek-fontenc greek-inputenc
     greekdates greektex greektonoi greenpoint gregoriotex
     grfext grffile grfpaste
     grid grid-system gridset gridslides grotesq grundgesetze

Modified: trunk/Master/tlpkg/tlpsrc/collection-latexextra.tlpsrc
===================================================================
--- trunk/Master/tlpkg/tlpsrc/collection-latexextra.tlpsrc	2020-10-24 20:27:41 UTC (rev 56749)
+++ trunk/Master/tlpkg/tlpsrc/collection-latexextra.tlpsrc	2020-10-24 20:28:26 UTC (rev 56750)
@@ -560,6 +560,7 @@
 depend graphbox
 depend graphicx-psmin
 depend graphicxbox
+depend graphpaper
 depend grayhints
 depend grfpaste
 depend grid

Added: trunk/Master/tlpkg/tlpsrc/graphpaper.tlpsrc
===================================================================


More information about the tex-live-commits mailing list.