texlive[61661] Master/texmf-dist: bodeplot (19jan22)
commits+karl at tug.org
commits+karl at tug.org
Wed Jan 19 22:21:22 CET 2022
Revision: 61661
http://tug.org/svn/texlive?view=revision&revision=61661
Author: karl
Date: 2022-01-19 22:21:22 +0100 (Wed, 19 Jan 2022)
Log Message:
-----------
bodeplot (19jan22)
Modified Paths:
--------------
trunk/Master/texmf-dist/doc/latex/bodeplot/bodeplot.pdf
trunk/Master/texmf-dist/source/latex/bodeplot/bodeplot.dtx
trunk/Master/texmf-dist/tex/latex/bodeplot/bodeplot.sty
Modified: trunk/Master/texmf-dist/doc/latex/bodeplot/bodeplot.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/source/latex/bodeplot/bodeplot.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/bodeplot/bodeplot.dtx 2022-01-19 16:55:53 UTC (rev 61660)
+++ trunk/Master/texmf-dist/source/latex/bodeplot/bodeplot.dtx 2022-01-19 21:21:22 UTC (rev 61661)
@@ -29,7 +29,30 @@
\documentclass{ltxdoc}
\usepackage{bodeplot,cprotect}
\usepackage[colorlinks]{hyperref}
-\usetikzlibrary{decorations.markings,arrows.meta}
+\usepackage{iftex}
+ \iftutex % LuaTeX, XeTeX
+ \usepackage{fontspec}
+ \setmonofont{DejaVuSansMono}[Scale=MatchUppercase]
+ \else % old engines
+ \usepackage[T1]{fontenc}
+ \usepackage{lmodern}
+ \usepackage[scaled]{DejaVuSansMono}
+ \fi
+\usepackage{showexpl}
+ \lstset{%
+ language=[LaTeX]Tex,
+ basicstyle=\ttfamily\tiny,
+ commentstyle=\itshape\ttfamily\tiny,
+ showspaces=false,
+ showstringspaces=false,
+ breaklines=true,
+ backgroundcolor=\color{white!90!black},
+ breakautoindent=true,
+ captionpos=t
+ }
+\usepackage{geometry}
+ \geometry{lmargin=2in,rmargin=1in,tmargin=1in,bmargin=1in}
+\usetikzlibrary{decorations.markings,arrows.meta,spy,backgrounds}
\EnableCrossrefs
\CodelineIndex
\RecordChanges
@@ -46,6 +69,8 @@
% \changes{v1.0}{2021/10/25}{Initial release}
% \changes{v1.0.4}{2021/11/05}{Fixed unintended optional argument macro expansion}
% \changes{v1.0.6}{2021/11/18}{Fixed issue \#3}
+% \changes{v1.0.7}{2021/12/02}{Removed unnecessary semicolons}
+% \changes{v1.0.7}{2022/01/18}{Updated documentation}
%
% \GetFileInfo{bodeplot.sty}
%
@@ -52,16 +77,324 @@
% \DoNotIndex{\newcommand,\xdef,\gdef,\def,\edef,\addplot,\approx,\arabic,\opt,\typ,\obj,\else,\if at pgfarg,\fi,\begin,\end,\feature,\footnotesize,\draw,\detokenize,\DeclareOption,\foreach,\ifdim,\ifodd,\Im,\Re,\let,\newif,\nextgroupplot,\noexpand,\expandafter,\unexpanded,\PackageError,\PackageWarning,\relax,\RequirePackage,\tikzset,\pgfmathsetmacro,\pgfmathtruncatemacro,\ProcessOptions}
%
% \title{The \textsf{bodeplot} package\thanks{This document
-% corresponds to \textsf{bodeplot}~v1.0.6,
-% dated November 18, 2021.}}
+% corresponds to \textsf{bodeplot}~v1.0.7,
+% dated January 18, 2021.}}
% \author{Rushikesh Kamalapurkar \\ \texttt{rlkamalapurkar at gmail.com}}
%
% \maketitle
% \tableofcontents
+% \clearpage
% \section{Introduction}
%
-% Generate Bode, Nyquist, and Nichols plots for transfer functions in the canonical (TF) form \begin{equation}G(s) = e^{-Ts}\frac{b_ms^m+\cdots+b_1s+b_0}{a_ns^n+\cdots+a_1s+a_0}\label{eq:TF}\end{equation} and the zero-pole-gain (ZPK) form \begin{equation}G(s) = Ke^{-Ts}\frac{(s-z_1)(s-z_2)\cdots(s-z_m)}{(s-p_1)(s-p_2)\cdots(s-p_n)}.\label{eq:ZPK}\end{equation} In the equations above, $b_m,\cdots,b_0$ and $a_n,\cdots,a_0$ are real coefficients, $T\geq 0$ is the loop delay, $z_1,\cdots,z_m$ and $p_1,\cdots,p_n$ are complex zeros and poles of the transfer function, respectively, and $K\in \Re$ is the loop gain. For transfer functions in the ZPK format in (\ref{eq:ZPK}) with zero delay, this package also supports linear and asymptotic approximation of Bode plots. \textbf{Limitation:} in TF form, the phase angles are always between 0 and 360$^\circ$, As such, the Bode phase plots and the Nyquist and Nichols plots will have phase wrapping discontinuities. I do not know how this can be rectified, pull requests are welcome!
+% Generate Bode, Nyquist, and Nichols plots for transfer functions in the canonical (TF) form \begin{equation}G(s) = e^{-Ts}\frac{b_ms^m+\cdots+b_1s+b_0}{a_ns^n+\cdots+a_1s+a_0}\label{eq:TF}\end{equation} and the zero-pole-gain (ZPK) form \begin{equation}G(s) = Ke^{-Ts}\frac{(s-z_1)(s-z_2)\cdots(s-z_m)}{(s-p_1)(s-p_2)\cdots(s-p_n)}.\label{eq:ZPK}\end{equation} In the equations above, $b_m,\cdots,b_0$ and $a_n,\cdots,a_0$ are real coefficients, $T\geq 0$ is the loop delay, $z_1,\cdots,z_m$ and $p_1,\cdots,p_n$ are complex zeros and poles of the transfer function, respectively, and $K\in \Re$ is the loop gain. For transfer functions in the ZPK format in (\ref{eq:ZPK}) \emph{with zero delay}, this package also supports linear and asymptotic approximation of Bode plots.
+
+% \textbf{Limitation:} in TF form, the phase angles are always between 0 and 360$^\circ$, As such, the Bode phase plots and the Nyquist and Nichols plots will have phase wrapping discontinuities. I do not know how this can be rectified, pull requests are welcome!
%
+% \section{TL;DR}
+% All Bode plots in this section are for the transfer function (with and without a transport delay)
+% \begin{equation}
+% G(s) = 10\frac{s(s+0.1+0.5\mathrm{i})(s+0.1-0.5\mathrm{i})}{(s+0.5+10\mathrm{i})(s+0.5-10\mathrm{i})} = \frac{s(10s^2+2s+2.6)}{(s^2+s+100.25)}.
+% \end{equation}
+% \iffalse
+%<*ignore>
+% \fi
+
+\hrulefill
+
+{\centering Bode plot in ZPK format
+\begin{LTXexample}[pos=l,hsep=20pt,width=0.5\textwidth]
+\BodeZPK{%
+ z/{0,{-0.1,-0.5},{-0.1,0.5}},
+ p/{{-0.5,-10},{-0.5,10}},
+ k/10
+}
+{0.01}
+{100}
+\end{LTXexample}
+
+\hrulefill
+\clearpage
+\hrulefill
+
+Bode plot in TF format with arrow decoration, transport delay, and color customization
+\begin{LTXexample}[pos=r,width=0.5\textwidth]
+\BodeTF[%
+ plot/mag/{blue,thick},
+ plot/ph/{green,thick},
+ tikz/{>=latex},
+ commands/mag/{
+ \draw[->](axis cs:1,40) -- (axis cs:10,60);
+ \node at (axis cs: 0.8,30) {\tiny Resonant Peak};
+ }%
+]
+{num/{10,2,2.6,0},den/{1,1,100.25},d/0.01}
+{0.01}
+{100}
+\end{LTXexample}
+
+\hrulefill
+
+Linear approximation with customization
+\begin{LTXexample}[pos=l,hsep=20pt,width=0.5\textwidth]
+\BodeZPK[%
+ plot/mag/{red,thick},
+ plot/ph/{blue,thick},
+ axes/mag/{ytick distance=40},
+ axes/ph/{ytick distance=90},
+ approx/linear%
+]{%
+ z/{0,{-0.1,-0.5},{-0.1,0.5}},
+ p/{{-0.5,-10},{-0.5,10}},
+ k/10
+}
+{0.01}
+{100}
+\end{LTXexample}
+
+\hrulefill
+\clearpage
+\hrulefill
+
+Plot with delay and customization
+\begin{LTXexample}[pos=r,hsep=20pt,width=0.5\textwidth]
+\BodeZPK[
+ plot/mag/{blue,thick},
+ plot/ph/{green,thick},
+ axes/mag/ytick distance=40,
+ axes/ph/ytick distance=90
+]{%
+ z/{0,{-0.1,-0.5},{-0.1,0.5}},
+ p/{{-0.5,-10},{-0.5,10}},
+ k/10,
+ d/0.01
+}
+{0.01}
+{100}
+\end{LTXexample}
+
+\hrulefill
+
+Individual gain and phase plots with more customization
+
+\begin{minipage}[t]{0.45\textwidth}
+\begin{LTXexample}[pos=t,width=\columnwidth]
+\begin{BodePlot}[%
+ axes/{ylabel={Gain (dB)},
+ ytick distance=40,
+ height=2cm,
+ width=4cm}
+]
+{0.01}
+{100}
+ \addBodeZPKPlots[%
+ true/{black,thick},
+ linear/{red,dashed,thick},
+ asymptotic/{blue,dotted,thick}%
+ ]
+ {magnitude}
+ {%
+ z/{0,{-0.1,-0.5},{-0.1,0.5}},
+ p/{{-0.5,-10},{-0.5,10}},
+ k/10
+ }
+\end{BodePlot}
+\end{LTXexample}
+\end{minipage}\hfill
+\begin{minipage}[t]{0.45\textwidth}
+\begin{LTXexample}[pos=t,width=\columnwidth]
+\begin{BodePlot}[%
+ ylabel={Phase ($^{\circ}$)},
+ height=2cm,
+ width=4cm,
+ ytick distance=90
+]
+{0.01}
+{100}
+ \addBodeZPKPlots[%
+ true/{black,thick},
+ linear/{red,dashed,thick},
+ asymptotic/{blue,dotted,thick}%
+ ]
+ {phase}
+ {%
+ z/{0,{-0.1,-0.5},{-0.1,0.5}},
+ p/{{-0.5,-10},{-0.5,10}},
+ k/10
+ }
+\end{BodePlot}
+\end{LTXexample}
+\end{minipage}
+
+\hrulefill
+\clearpage
+\hrulefill
+
+Nichols chart
+\begin{LTXexample}[pos=l,hsep=20pt,width=0.5\textwidth]
+\NicholsZPK[samples=1000]
+{%
+ z/{0,{-0.1,-0.5},{-0.1,0.5}},
+ p/{{-0.5,-10},{-0.5,10}},
+ k/10
+}
+{0.001}
+{100}
+\end{LTXexample}
+
+\hrulefill
+
+Nichols chart in TF format
+\begin{LTXexample}[pos=r,hsep=20pt,width=0.5\textwidth]
+\NicholsTF[samples=1000]
+{num/{10,2,2.6,0},den/{1,1,100.25}}
+{0.001}
+{100}
+\end{LTXexample}
+
+\hrulefill
+
+Multiple Nichols charts with customization
+\begin{LTXexample}[pos=l,hsep=20pt,width=0.5\textwidth]
+\begin{NicholsChart}[%
+ ytick distance=20,
+ xtick distance=30
+]
+{0.001}
+{100}
+ \addNicholsZPKChart [red,samples=1000] {%
+ z/{0,{-0.1,-0.5},{-0.1,0.5}},
+ p/{{-0.5,-10},{-0.5,10}},
+ k/10
+ };
+ \addNicholsZPKChart [blue,samples=1000] {%
+ z/{0,{-0.1,-0.5},{-0.1,0.5}},
+ p/{{-0.5,-10},{-0.5,10}},
+ k/5
+ };
+\end{NicholsChart}
+\end{LTXexample}
+
+\hrulefill
+\clearpage
+\hrulefill
+
+Nyquist plot
+\begin{LTXexample}[pos=r,hsep=20pt,width=0.5\textwidth]
+\NyquistZPK[plot/{red,thick,samples=1000}]
+{%
+ z/{0,{-0.1,-0.5},{-0.1,0.5}},
+ p/{{-0.5,-10},{-0.5,10}},
+ k/10
+}
+{-30}
+{30}
+\end{LTXexample}
+
+\hrulefill
+
+Nyquist plot in TF format with arrows
+\begin{LTXexample}[pos=l,width=0.5\textwidth]
+\NyquistTF[%
+ plot/{%
+ samples=1000,
+ postaction=decorate,
+ decoration={%
+ markings,
+ mark=between positions 0.1 and 0.9 step 5em with {%
+ \arrow{Stealth [length=2mm, blue]}
+ }
+ }
+ }%
+]
+{num/{10,2,2.6,0},den/{1,1,100.25}}
+{-30}
+{30}
+\end{LTXexample}
+
+\hrulefill
+
+Multiple Nyquist plots with customization
+\begin{LTXexample}[pos=r,hsep=20pt,width=0.5\textwidth]
+\begin{NyquistPlot}{-30}{30}
+ \addNyquistZPKPlot [red,samples=1000] {%
+ z/{0,{-0.1,-0.5},{-0.1,0.5}},
+ p/{{-0.5,-10},{-0.5,10}},
+ k/10
+ };
+ \addNyquistZPKPlot [blue,samples=1000] {%
+ z/{0,{-0.1,-0.5},{-0.1,0.5}},
+ p/{{-0.5,-10},{-0.5,10}},
+ k/5
+ };
+\end{NyquistPlot}
+\end{LTXexample}
+
+\hrulefill
+\clearpage
+\hrulefill
+
+Nyquist plots with additional commands, using two different macros
+
+\begin{minipage}[t]{0.48\textwidth}
+\begin{LTXexample}[pos=t,width=\columnwidth]
+\begin{NyquistPlot}[%
+ tikz/{%
+ spy using outlines={%
+ circle,
+ magnification=3,
+ connect spies,
+ size=2cm
+ }%
+ }%
+]
+{-30}{30}
+ \addNyquistZPKPlot [blue,samples=1000] {%
+ z/{0,{-0.1,-0.5},{-0.1,0.5}},
+ p/{{-0.5,-10},{-0.5,10}},
+ k/0.5
+ };
+ \coordinate (spyon) at (axis cs:0,0);
+ \coordinate (spyat) at (axis cs:-22,5);
+ \spy [green] on (spyon) in
+ node [fill=white] at (spyat);
+\end{NyquistPlot}
+\end{LTXexample}
+\end{minipage}\hfill
+\begin{minipage}[t]{0.48\textwidth}
+\begin{LTXexample}[pos=t,width=\columnwidth]
+\NyquistZPK[%
+ plot/{blue,samples=1000},
+ tikz/{%
+ spy using outlines={%
+ circle,
+ magnification=3,
+ connect spies,
+ size=2cm
+ }%
+ },
+ commands/{%
+ \coordinate (spyon) at (axis cs:0,0);
+ \coordinate (spyat) at (axis cs:-22,5);
+ \spy [green] on (spyon) in
+ node [fill=white] at (spyat);
+ }%
+]%
+{
+ z/{0,{-0.1,-0.5},{-0.1,0.5}},
+ p/{{-0.5,-10},{-0.5,10}},
+ k/0.5
+}
+{-30}
+{30}
+\end{LTXexample}
+\end{minipage}}
+
+\hrulefill
+
+% \iffalse
+%</ignore>
+% \fi
+%
% \section{Usage}
% \subsection{Bode plots}
% \DescribeMacro{\BodeZPK}
@@ -69,7 +402,7 @@
% \hspace*{2em}\marg{z/\marg{zeros},p/\marg{poles},k/\marg{gain},d/\marg{delay}}\\
% \hspace*{2em}\marg{min-freq}\marg{max-freq}
%
-% \noindent Plots the Bode plot of a transfer function given in ZPK format using the |groupplot| environment. The three mandatory arguments include: (1) a list of tuples, comprised of the zeros, the poles, the gain, and the transport delay of the transfer function, (2) the lower end of the frequency range for the $x-$ axis, and (3) the higher end of the frequency range for the $x-$axis. The zeros and the poles are complex numbers, entered as a comma-separated list of comma-separated lists, of the form |{{real part 1,imaginary part 1},| |{real part 2,imaginary part 2},...}|. If the imaginary part is not provided, it is assumed to be zero.
+% \noindent Plots the Bode plot of a transfer function given in ZPK format using the |groupplot| environment. The three mandatory arguments include: (1) a list of tuples, comprised of the zeros, the poles, the gain, and the transport delay of the transfer function, (2) the lower end of the frequency range for the $x-$axis, and (3) the higher end of the frequency range for the $x-$axis. The zeros and the poles are complex numbers, entered as a comma-separated list of comma-separated lists, of the form |{{real part 1,imaginary part 1},| |{real part 2,imaginary part 2},...}|. If the imaginary part is not provided, it is assumed to be zero.
%
% The optional argument is comprised of a comma separated list of tuples, either |obj/typ/{opt}|, or |obj/{opt}|, or just |{opt}|. Each tuple passes options to different |pgfplots| macros that generate the group, the axes, and the plots according to:
% \begin{itemize}
@@ -77,7 +410,7 @@
% \begin{itemize}
% \item |plot/typ/{opt}|: modify plot properties by adding options |{opt}| to the |\addplot| macro for the magnitude plot if |typ| is |mag| and the phase plot if |typ| is |ph|.
% \item |axes/typ/{opt}|: modify axis properties by adding options |{opt}| to the |\nextgroupplot| macro for the magnitude plot if |typ| is |mag| and the phase plot if |typ| is |ph|.
-% \item |commands/typ/{opt}|: add any valid TikZ commands (including the the parametric function generator macros in this package, such as |\addBodeZPKPlots|, |\addBodeTFPlot|, and |\addBodeComponentPlot|) to the magnitude axes plot if |typ| is |mag| and the phase plot if |typ| is |ph|. The commands passed to |opt| need to be valid TikZ commands, separated by semicolons as usual. For example, a TikZ command is used in the description of the |\BodeTF| macro below to mark the gain crossover frequency on the Bode Magnitude plot.
+% \item |commands/typ/{opt}|: add any valid TikZ commands (including the the parametric function generator macros in this package, such as |\addBodeZPKPlots|, |\addBodeTFPlot|, and |\addBodeComponentPlot|) to the magnitude plot if |typ| is |mag| and the phase plot if |typ| is |ph|. The commands passed to |opt| need to be valid TikZ commands, separated by semicolons as usual. For example, a TikZ command is used in the description of the |\BodeTF| macro below to mark the gain crossover frequency on the Bode Magnitude plot.
% \end{itemize}
% \item Tuples of the form |obj/{opt}|:
% \begin{itemize}
@@ -88,9 +421,9 @@
% \item |approx/linear|: plots linear approximation.
% \item |approx/asymptotic|: plots asymptotic approximation.
% \end{itemize}
-% \item Tuples of the form |{opts}| add all of the supplied options to |\addplot| macros for both the magnitude and the phase plots.
+% \item Tuples of the form |{opt}| add all of the supplied options to |\addplot| macros for both the magnitude and the phase plots.
% \end{itemize}
-% The options |{opt}| can be any |key=value| options that are supported by the |pgfplots| macros they are added to. \textit{Linear or asymptotic approximation of transfer functions that include a transport delay is not supported.}
+% The options |{opt}| can be any |key=value| options that are supported by the |pgfplots| macros they are added to.
% For example, given a transfer function \begin{equation}G(s) = 10\frac{s(s+0.1+0.5\mathrm{i})(s+0.1-0.5\mathrm{i})}{(s+0.5+10\mathrm{i})(s+0.5-10\mathrm{i})},\label{eq:ZPKExample}\end{equation} its Bode plot over the frequency range $[0.01,100]$ can be generated using\\
% |\BodeZPK [blue,thick]|\\
@@ -133,7 +466,7 @@
% For example, given the same transfer function as (\ref{eq:ZPKExample}) in TF form and with a small transport delay, \begin{equation}G(s) = e^{-0.01s}\frac{s(10s^2+2s+2.6)}{(s^2+s+100.25)},\label{eq:TFExample}\end{equation} its Bode plot over the frequency range $[0.01,100]$ can be generated using\\
% |\BodeTF[commands/mag/{\node at (axis cs: 2.1,0) |\\
% | [circle,fill,inner sep=0.05cm,label=below:{$\omega_{gc}$}]{};}]|\\
-% | {num/{10,2,2.6,0},den/{1,0.2,100},d/0.01}|\\
+% | {num/{10,2,2.6,0},den/{1,1,100.25},d/0.01}|\\
% | {0.01}{100}|\\
% which generates the plot in Figure \ref{simpleBodeTF}. Note the $0$ added to the numerator coefficients to account for the fact that the numerator does not have a constant term in it. Note the semicolon after the TikZ command passed to the |\commands| option.
%
@@ -177,7 +510,7 @@
% linear/{red,dashed,thick},
% asymptotic/{blue,dotted,thick}]
% {magnitude}
-% {z/{0,{-0.1,-0.5},{-0.1,0.5}},p/{{-0.1,-10},{-0.1,10}},k/10}
+% {z/{0,{-0.1,-0.5},{-0.1,0.5}},p/{{-0.5,-10},{-0.5,10}},k/10}
%\end{BodePlot}
%
%\begin{BodePlot}[ylabel={Phase ($^{\circ}$)},
@@ -187,7 +520,7 @@
% linear/{red,dashed,thick},
% asymptotic/{blue,dotted,thick}]
% {phase}
-% {z/{0,{-0.1,-0.5},{-0.1,0.5}},p/{{-0.1,-10},{-0.1,10}},k/10}
+% {z/{0,{-0.1,-0.5},{-0.1,0.5}},p/{{-0.5,-10},{-0.5,10}},k/10}
%\end{BodePlot}
%\end{verbatim}
% \begin{figure}
@@ -200,7 +533,7 @@
% linear/{red,dashed,thick},
% asymptotic/{blue,dotted,thick}]
% {magnitude}
-% {z/{0,{-0.1,-0.5},{-0.1,0.5}},p/{{-0.1,-10},{-0.1,10}},k/10}
+% {z/{0,{-0.1,-0.5},{-0.1,0.5}},p/{{-0.5,-10},{-0.5,10}},k/10}
% \end{BodePlot}
% \begin{BodePlot}[ylabel={Phase ($^{\circ}$)},
% height=2cm, width=4cm, ytick distance=90] {0.01} {100}
@@ -210,7 +543,7 @@
% linear/{red,dashed,thick},
% asymptotic/{blue,dotted,thick}]
% {phase}
-% {z/{0,{-0.1,-0.5},{-0.1,0.5}},p/{{-0.1,-10},{-0.1,10}},k/10}
+% {z/{0,{-0.1,-0.5},{-0.1,0.5}},p/{{-0.5,-10},{-0.5,10}},k/10}
% \end{BodePlot}
% \end{center}
% \caption{\label{multiBodeZPK}Superimposed approximate and true Bode plots using the \texttt{BodePlot} environment and the \texttt{\textbackslash addBodeZPKPlots} macro.}
@@ -444,7 +777,7 @@
% \noindent Similar to |\addNicholsZPKChart|, with a transfer function input in the TF form.
%
% \StopEventually{\PrintIndex}
-%
+% \clearpage
% \section{Implementation}
% \subsection{Initialization}
% \begin{macro}{\pdfstrcmp}
@@ -814,12 +1147,12 @@
ylabel={Gain (dB)},xmajorticks=false,\optmag at axes]
\edef\temp at cmd{\noexpand\addplot[variable=t,thick,\optmag at plot]}%
\temp at cmd {\func at mag};
- \optmag at commands;
+ \optmag at commands
\expandafter\nextgroupplot\expandafter[ytick distance=45,
ylabel={Phase ($^{\circ}$)},xlabel={Frequency (rad/s)},\optph at axes]
\edef\temp at cmd{\noexpand\addplot[variable=t,thick,\optph at plot]}%
\temp at cmd {\func at ph};
- \optph at commands;
+ \optph at commands
\else
% \end{macrocode}
% In |gnuplot| mode, we increment the |gnuplot at id| counter before every plot to make sure that new and reusable |.gnuplot| and |.table| files are generated for every plot.
@@ -829,13 +1162,13 @@
ylabel={Gain (dB)},xmajorticks=false,\optmag at axes]
\edef\temp at cmd{\noexpand\addplot[variable=t,thick,\optmag at plot]}%
\temp at cmd gnuplot[gnuplot at degrees,gnuplot at prefix] {\func at mag};
- \optmag at commands;
+ \optmag at commands
\stepcounter{gnuplot at id}
\expandafter\nextgroupplot\expandafter[ytick distance=45,
ylabel={Phase ($^{\circ}$)},xlabel={Frequency (rad/s)},\optph at axes]
\edef\temp at cmd{\noexpand\addplot[variable=t,thick,\optph at plot]}%
\temp at cmd gnuplot[gnuplot at degrees,gnuplot at prefix] {\func at ph};
- \optph at commands;
+ \optph at commands
\fi
\end{groupplot}
\end{tikzpicture}
@@ -868,12 +1201,12 @@
ylabel={Gain (dB)},xmajorticks=false,\optmag at axes]
\edef\temp at cmd{\noexpand\addplot[variable=t,thick,\optmag at plot]}%
\temp at cmd {\func at mag};
- \optmag at commands;
+ \optmag at commands
\expandafter\nextgroupplot\expandafter[ytick distance=45,
ylabel={Phase ($^{\circ}$)},xlabel={Frequency (rad/s)},\optph at axes]
\edef\temp at cmd{\noexpand\addplot[variable=t,thick,\optph at plot]}%
\temp at cmd {\func at ph};
- \optph at commands;
+ \optph at commands
\else
\stepcounter{gnuplot at id}%
\expandafter\nextgroupplot\expandafter[ytick distance=20,
@@ -880,13 +1213,13 @@
ylabel={Gain (dB)},xmajorticks=false,\optmag at axes]
\edef\temp at cmd{\noexpand\addplot[variable=t,thick,\optmag at plot]}%
\temp at cmd gnuplot[gnuplot at degrees,gnuplot at prefix] {\func at mag};
- \optmag at commands;
+ \optmag at commands
\stepcounter{gnuplot at id}%
\expandafter\nextgroupplot\expandafter[ytick distance=45,
ylabel={Phase ($^{\circ}$)},xlabel={Frequency (rad/s)},\optph at axes]
\edef\temp at cmd{\noexpand\addplot[variable=t,thick,\optph at plot]}%
\temp at cmd gnuplot[gnuplot at degrees,gnuplot at prefix] {\func at ph};
- \optph at commands;
+ \optph at commands
\fi
\end{groupplot}
\end{tikzpicture}
@@ -1240,13 +1573,13 @@
\if at pgfarg
\temp at cmd ( {\n at pow{10}{((\func at mag)/20)}*cos(\func at ph)},
{\n at pow{10}{((\func at mag)/20)}*sin(\func at ph)} );
- \opt at commands;
+ \opt at commands
\else
\stepcounter{gnuplot at id}%
\temp at cmd gnuplot[parametric,gnuplot at degrees,gnuplot at prefix] {%
\n at pow{10}{((\func at mag)/20)}*cos(\func at ph),
\n at pow{10}{((\func at mag)/20)}*sin(\func at ph)};
- \opt at commands;
+ \opt at commands
\fi
\end{axis}
\end{tikzpicture}
@@ -1278,13 +1611,13 @@
\if at pgfarg
\temp at cmd ( {\n at pow{10}{((\func at mag)/20)}*cos(\func at ph)},
{\n at pow{10}{((\func at mag)/20)}*sin(\func at ph)} );
- \opt at commands;
+ \opt at commands
\else
\stepcounter{gnuplot at id}%
\temp at cmd gnuplot[parametric,gnuplot at degrees,gnuplot at prefix]{%
\n at pow{10}{((\func at mag)/20)}*cos(\func at ph),
\n at pow{10}{((\func at mag)/20)}*sin(\func at ph)};
- \opt at commands;
+ \opt at commands
\fi
\end{axis}
\end{tikzpicture}
@@ -1415,12 +1748,12 @@
\edef\temp at cmd{\noexpand\addplot[variable=t,thick,\opt at plot]}%
\if at pgfarg
\temp at cmd ( {\func at ph} , {\func at mag} );
- \opt at commands;
+ \opt at commands
\else
\stepcounter{gnuplot at id}%
\temp at cmd gnuplot[parametric, gnuplot at degrees, gnuplot at prefix]
{ \func at ph , \func at mag };
- \opt at commands;
+ \opt at commands
\fi
\end{axis}
\end{tikzpicture}
@@ -1445,12 +1778,12 @@
\edef\temp at cmd{\noexpand\addplot[variable=t,thick,\opt at plot]}%
\if at pgfarg
\temp at cmd ( {\func at ph} , {\func at mag} );
- \opt at commands;
+ \opt at commands
\else
\stepcounter{gnuplot at id}%
\temp at cmd gnuplot[parametric, gnuplot at degrees, gnuplot at prefix]
{ \func at ph , \func at mag };
- \opt at commands;
+ \opt at commands
\fi
\end{axis}
\end{tikzpicture}
Modified: trunk/Master/texmf-dist/tex/latex/bodeplot/bodeplot.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/bodeplot/bodeplot.sty 2022-01-19 16:55:53 UTC (rev 61660)
+++ trunk/Master/texmf-dist/tex/latex/bodeplot/bodeplot.sty 2022-01-19 21:21:22 UTC (rev 61661)
@@ -23,6 +23,7 @@
\pgfplotsset{compat=1.18}
\usepgfplotslibrary{groupplots}
+
\RequirePackage{ifluatex}%
\ifluatex
\let\pdfstrcmp\pdf at strcmp
@@ -190,12 +191,12 @@
ylabel={Gain (dB)},xmajorticks=false,\optmag at axes]
\edef\temp at cmd{\noexpand\addplot[variable=t,thick,\optmag at plot]}%
\temp at cmd {\func at mag};
- \optmag at commands;
+ \optmag at commands
\expandafter\nextgroupplot\expandafter[ytick distance=45,
ylabel={Phase ($^{\circ}$)},xlabel={Frequency (rad/s)},\optph at axes]
\edef\temp at cmd{\noexpand\addplot[variable=t,thick,\optph at plot]}%
\temp at cmd {\func at ph};
- \optph at commands;
+ \optph at commands
\else
\stepcounter{gnuplot at id}
\expandafter\nextgroupplot\expandafter[ytick distance=20,
@@ -202,13 +203,13 @@
ylabel={Gain (dB)},xmajorticks=false,\optmag at axes]
\edef\temp at cmd{\noexpand\addplot[variable=t,thick,\optmag at plot]}%
\temp at cmd gnuplot[gnuplot at degrees,gnuplot at prefix] {\func at mag};
- \optmag at commands;
+ \optmag at commands
\stepcounter{gnuplot at id}
\expandafter\nextgroupplot\expandafter[ytick distance=45,
ylabel={Phase ($^{\circ}$)},xlabel={Frequency (rad/s)},\optph at axes]
\edef\temp at cmd{\noexpand\addplot[variable=t,thick,\optph at plot]}%
\temp at cmd gnuplot[gnuplot at degrees,gnuplot at prefix] {\func at ph};
- \optph at commands;
+ \optph at commands
\fi
\end{groupplot}
\end{tikzpicture}
@@ -236,12 +237,12 @@
ylabel={Gain (dB)},xmajorticks=false,\optmag at axes]
\edef\temp at cmd{\noexpand\addplot[variable=t,thick,\optmag at plot]}%
\temp at cmd {\func at mag};
- \optmag at commands;
+ \optmag at commands
\expandafter\nextgroupplot\expandafter[ytick distance=45,
ylabel={Phase ($^{\circ}$)},xlabel={Frequency (rad/s)},\optph at axes]
\edef\temp at cmd{\noexpand\addplot[variable=t,thick,\optph at plot]}%
\temp at cmd {\func at ph};
- \optph at commands;
+ \optph at commands
\else
\stepcounter{gnuplot at id}%
\expandafter\nextgroupplot\expandafter[ytick distance=20,
@@ -248,13 +249,13 @@
ylabel={Gain (dB)},xmajorticks=false,\optmag at axes]
\edef\temp at cmd{\noexpand\addplot[variable=t,thick,\optmag at plot]}%
\temp at cmd gnuplot[gnuplot at degrees,gnuplot at prefix] {\func at mag};
- \optmag at commands;
+ \optmag at commands
\stepcounter{gnuplot at id}%
\expandafter\nextgroupplot\expandafter[ytick distance=45,
ylabel={Phase ($^{\circ}$)},xlabel={Frequency (rad/s)},\optph at axes]
\edef\temp at cmd{\noexpand\addplot[variable=t,thick,\optph at plot]}%
\temp at cmd gnuplot[gnuplot at degrees,gnuplot at prefix] {\func at ph};
- \optph at commands;
+ \optph at commands
\fi
\end{groupplot}
\end{tikzpicture}
@@ -555,13 +556,13 @@
\if at pgfarg
\temp at cmd ( {\n at pow{10}{((\func at mag)/20)}*cos(\func at ph)},
{\n at pow{10}{((\func at mag)/20)}*sin(\func at ph)} );
- \opt at commands;
+ \opt at commands
\else
\stepcounter{gnuplot at id}%
\temp at cmd gnuplot[parametric,gnuplot at degrees,gnuplot at prefix] {%
\n at pow{10}{((\func at mag)/20)}*cos(\func at ph),
\n at pow{10}{((\func at mag)/20)}*sin(\func at ph)};
- \opt at commands;
+ \opt at commands
\fi
\end{axis}
\end{tikzpicture}
@@ -588,13 +589,13 @@
\if at pgfarg
\temp at cmd ( {\n at pow{10}{((\func at mag)/20)}*cos(\func at ph)},
{\n at pow{10}{((\func at mag)/20)}*sin(\func at ph)} );
- \opt at commands;
+ \opt at commands
\else
\stepcounter{gnuplot at id}%
\temp at cmd gnuplot[parametric,gnuplot at degrees,gnuplot at prefix]{%
\n at pow{10}{((\func at mag)/20)}*cos(\func at ph),
\n at pow{10}{((\func at mag)/20)}*sin(\func at ph)};
- \opt at commands;
+ \opt at commands
\fi
\end{axis}
\end{tikzpicture}
@@ -691,12 +692,12 @@
\edef\temp at cmd{\noexpand\addplot[variable=t,thick,\opt at plot]}%
\if at pgfarg
\temp at cmd ( {\func at ph} , {\func at mag} );
- \opt at commands;
+ \opt at commands
\else
\stepcounter{gnuplot at id}%
\temp at cmd gnuplot[parametric, gnuplot at degrees, gnuplot at prefix]
{ \func at ph , \func at mag };
- \opt at commands;
+ \opt at commands
\fi
\end{axis}
\end{tikzpicture}
@@ -721,12 +722,12 @@
\edef\temp at cmd{\noexpand\addplot[variable=t,thick,\opt at plot]}%
\if at pgfarg
\temp at cmd ( {\func at ph} , {\func at mag} );
- \opt at commands;
+ \opt at commands
\else
\stepcounter{gnuplot at id}%
\temp at cmd gnuplot[parametric, gnuplot at degrees, gnuplot at prefix]
{ \func at ph , \func at mag };
- \opt at commands;
+ \opt at commands
\fi
\end{axis}
\end{tikzpicture}
More information about the tex-live-commits
mailing list.