\documentclass[11pt,a4paper,usenames,dvipsnames]{article} \usepackage{../tikz-osci} \usepackage[left=2cm,right=2cm,top=2cm,bottom=2cm]{geometry} \usepackage[most]{tcolorbox} \usepackage{hyperref} \title{TikZ Oscilloscope Package} \author{Thibault Giauffret} \def\version{0.4.0} % Use sans serif font \renewcommand{\familydefault}{\sfdefault} % Remove paragraph indentation \setlength{\parindent}{0pt} % Listings \newtcblisting{listing}{ listing only, hbox, listing options={ basicstyle=\small\ttfamily, breaklines=true, columns=fullflexible }, } \begin{document} \begin{tcolorbox} \begin{center} \vspace{0.3cm} {\huge \textbf{TikZ Oscilloscope Package}}\\[0.3cm] {\Large Thibault Giauffret}\\[0.3cm] \textit{Version \version\ of \today}\\[0.3cm] \vspace{0.3cm} \end{center} \end{tcolorbox} \section{Introduction} \begin{minipage}{0.5\linewidth} \begin{center} \osci[% scale=0.7, sample rate=500, func one=1.78*sin(2*180/0.020*x), horizontal cursor one=-1.78, horizontal cursor two=1.78, ] \end{center} \end{minipage} \begin{minipage}{0.5\linewidth} \begin{center} \osci[% scale=0.7, second channel=1, screen offset one=2, screen offset two=-2, time div=10, voltage div one=4, voltage div two=1, sample rate=400, xy mode=0, func one=(sin(2*180*x/0.02)>0?6:-6), func two=1*sin(2*180/0.020*x)+0.2*sin(2*180/0.040*x), indicators=0, color one=FAC356, color two=C18FFA, color text one = 000000, color text two = 000000, graph back color=3C4A66, info back color=333333, info text color=FFFFFF, main axis color=DDDDDD, grid color=CCCCCC, ] \end{center} \end{minipage} \vspace*{0.5cm} This package is a modest alternative to the \texttt{pst-osci} package (not maintained anymore). It allows you to draw oscilloscope "screen shots" with \LaTeX{}, TikZ and pgfplots. \subsection*{Contact} Some features are not implemented yet, but the package is already usable for basic representations. I'm doing this for fun and still learning how to make \LaTeX{} packages. Therefore, I'm open to any suggestion or contribution : \begin{center} \texttt{ contact at ensciences dot fr } \end{center} \subsection*{Issues tracker} An issues tracker is available at : \begin{center} \url{https://framagit.org/ThibGiauffret/latex_packages/-/issues}. \end{center} Feel free to report any bug you find or send suggestions.\\ \textbf{Important note :} Please indicate the concerned package name in the title of the issue. For example, if you want to report an issue about this package, please use the following title : \texttt{[tikz-osci] My issue report title}. \section{Usage} The package is loaded with the command \verb|\usepackage{tikz-osci}|. It defines a single command, \verb|\osci|, which takes a list of options as argument. The options allow you to configure and customize the oscilloscope screen view : \begin{tcolorbox}[enhanced,breakable,colback=white,colframe=black,width=\textwidth,left=0mm,right=0mm,top=0mm,bottom=0mm,boxsep=0mm] \begin{tabular}{p{0.2\textwidth}|p{0.47\textwidth}|p{0.255\textwidth}} \texttt{scale} & Scale of the oscilloscope (with \texttt{scalebox}). & Default: \texttt{1} \\\hline \texttt{rounded corners} & Radius of the oscilloscope corners (in pt). & Default: \texttt{10} \\\hline \texttt{second channel} & 1 if the second channel is enabled, 0 otherwise. & Default: \texttt{0} \\\hline \texttt{screen offset one} & Vertical screen offset of the first channel. & Default: \texttt{0} \\\hline \texttt{screen offset two} & Vertical screen offset of the second channel. & Default: \texttt{0} \\\hline \texttt{time div} & Time division (in ms). & Default: \texttt{20} \\\hline \texttt{voltage div one} & Voltage division of the first channel (in V). & Default: \texttt{1} \\\hline \texttt{voltage div two} & Voltage division of the second channel (in V). & Default: \texttt{1} \\\hline \texttt{sample rate} & Sample rate. & Default: \texttt{200} \\\hline \texttt{xy mode} & 1 if the oscilloscope is in XY mode (Lissajous curve), 0 otherwise. & Default : 0 \\\hline \texttt{math mode} & 1 for addition, 2 for subtraction, 3 for multiplication, 4 for division, 0 otherwise. xy mode option must be set to 0. & Default: \texttt{0} \\\hline \texttt{math mode hide source} & 0 to display channels CH1 and CH2 with the third channel, 1 to hide them. & Default : \texttt{0} \\\hline \texttt{func one} & Expression of the first channel (pgf maths format). Trigonometric functions are defined in degrees. & Default: \texttt{2*sin(2*180/0.020*x)} \\\hline \texttt{func two} & Expression of the second channel (pgf maths format). Trigonometric functions are defined in degrees. & Default: \texttt{1*sin(2*180/0.020*x) + 0.2*sin(2*180/0.040*x)} \\\hline \texttt{indicators} & 1 if the channel indicators are enabled, 0 otherwise. & Default: \texttt{1} \\\hline \texttt{horizontal cursor one} & Horizontal position of the first cursor (between -4 and 4). \texttt{false} to disable. & Default: \texttt{false} \\\hline \texttt{horizontal cursor two} & Horizontal position of the second cursor (between -4 and 4). \texttt{false} to disable. & Default: \texttt{false} \\\hline \texttt{vertical cursor one} & Vertical position of the first cursor (between -4 and 4). \texttt{false} to disable. & Default: \texttt{false} \\\hline \texttt{vertical cursor two} & Vertical position of the second cursor (between -4 and 4). \texttt{false} to disable. & Default: \texttt{false} \\\hline \texttt{cursor precision} & Number of digits after the decimal point for the cursor values. & Default: \texttt{1} \\\hline \texttt{color one} & Color of the first channel (in hexadecimal). & Default: \texttt{D62626} \\\hline \texttt{color text one} & Text color of the first channel (in hexadecimal). & Default: \texttt{FFFFFF} \\\hline \texttt{color two} & Color of the second channel (in hexadecimal). & Default: \texttt{1053AF} \\\hline \texttt{color text two} & Text color of the second channel (in hexadecimal). & Default: \texttt{FFFFFF} \\\hline \texttt{color three} & Color of the XY mode and the math mode (in hexadecimal). & Default: \texttt{2E8B73} \\\hline \texttt{color text three} & Text color of the XY mode and the math mode (in hexadecimal). & Default: \texttt{FFFFFF} \\\hline \texttt{graph back color} & Background color of the graph (in hexadecimal). & Default: \texttt{FFFFFF} \\\hline \texttt{info back color} & Background color of the information box (in hexadecimal). & Default: \texttt{D6D6D6} \\\hline \texttt{info text color} & Text color of the information box (in hexadecimal). & Default: \texttt{000000} \\\hline \texttt{main axis color} & Color of the main axis (in hexadecimal). & Default: \texttt{000000} \\\hline \texttt{grid color} & Color of the grid (in hexadecimal). & Default: \texttt{CCCCCC} \end{tabular} \end{tcolorbox} \begin{tcolorbox}[enhanced,breakable,colback=white,colframe=black,width=\textwidth,left=0mm,right=0mm,top=0mm,bottom=0mm,boxsep=0mm] \begin{tabular}{p{0.2\textwidth}|p{0.47\textwidth}|p{0.255\textwidth}} \texttt{horizontal cursor color} & Color of the horizontal cursor (in hexadecimal). & Default: \texttt{FFA500} \\\hline \texttt{vertical cursor color} & Color of the vertical cursor (in hexadecimal). & Default: \texttt{800080}\\\hline \texttt{smooth one} & 1 to smooth the first channel, 0 otherwise. & Default: \texttt{0}\\\hline \texttt{smooth two} & 1 to smooth the second channel, 0 otherwise. & Default: \texttt{0}\\\hline \texttt{smooth three} & 1 to smooth the third channel, 0 otherwise. & Default: \texttt{0} \end{tabular} \end{tcolorbox} A quick documentation in french is available here : \begin{center} \url{https://www.ensciences.fr/read.php?article=1220} \end{center} \section{Examples} For more examples, see the \texttt{tikz-osci-example.tex} file. \begin{tcblisting}{enhanced,colback=white,colframe=black,width=\textwidth, title=\bfseries Two channels plot with custom background color, sidebyside} \osci[% scale=0.7, second channel=1, screen offset one=2, screen offset two=-2, time div=20, voltage div one=4, voltage div two=1, sample rate=200, xy mode=0, func one=2*sin(2*180/0.020*x), func two=1*sin(2*180/0.020*x) + 0.2*sin(2*180/0.040*x), color one=D62626, color two=1053AF, graph back color=669966, info back color=D6D6D6, grid color=CCCCCC ] \end{tcblisting} \begin{tcblisting}{enhanced,colback=white,colframe=black,width=\textwidth, title=\bfseries Lissajous curve (XY mode) and no rounded corner, sidebyside} \osci[% scale=0.7, rounded corners=0, second channel=1, time div=300, voltage div one=1, voltage div two=0.5, sample rate=500, xy mode=1, func one=sin(7*x), func two=sin(2*x), indicators=1, graph back color=FFFFFF, info back color=D6D6D6, info text color=000000, main axis color=000000, grid color=CCCCCC, ] \end{tcblisting} \begin{tcblisting}{enhanced,colback=white,colframe=black,width=\textwidth, title=\bfseries Math mode (multiply) with hidden sources and dark mode, sidebyside} \osci[% scale=0.7, second channel=1, time div=10, voltage div one=2, voltage div two=2, sample rate=500, xy mode=0, math mode=3, math mode hide source=1, func one=2*sin(2*180/0.040*x), func two=3*sin(2*180/0.005*x), indicators=0, color three=F0DE25, color text three=000000, graph back color=777799, info back color=333333, info text color=FFFFFF, main axis color=DDDDDD, grid color=CCCCCC, ] \end{tcblisting} \begin{tcblisting}{enhanced,colback=white,colframe=black,width=\textwidth, title=\bfseries Common periodic signals,sidebyside} % Square wave function \pgfmathdeclarefunction{square}{4}{% \pgfmathparse{(sin(2*180*x/#2+#4) + #3>0?#1:-#1)}% } % Triangle wave function \pgfmathdeclarefunction{triangle}{4}{% \pgfmathparse{#1*asin(sin(2*180/#2*x + #4))/90}% } \osci[% scale=0.7, second channel=1, sample rate=1000, time div=100, func one={triangle(2,0.2,0,0)}, func two={square(2,0.2,0,0)}, smooth one = 1, smooth two = 0, ] \end{tcblisting} \begin{tcblisting}{enhanced,colback=white,colframe=black,width=\textwidth, title=\bfseries Vertical and horizontal cursors (values displayed with two digits),sidebyside} \osci[% scale=0.7, second channel=0, time div=100, voltage div one=1, sample rate=200, func one={sin(2*180*x)}, vertical cursor one=-2.5, vertical cursor two=2.5, horizontal cursor one=1, horizontal cursor two=-1, cursor precision=2 ] \end{tcblisting} \section{License} This package is distributed under the terms of the \textbf{LaTeX Project Public License} (LPPL), version 1.3c or later. The latest version of this license is available at \url{http://www.latex-project.org/lppl.txt}. \section{Credits} This package requires the following packages : \begin{itemize} \item \texttt{xcolor} maintained by the \textit{LaTeX3 Project} (license LPPL 1.3c) ; \item tikz maintained by the \textit{TikZ and PGF Project} (license LPPL 1.3c) ; \item pgfkeys maintained by the \textit{Till Tantau} (license LPPL) ; \item pgfplots maintained by the \textit{Christian Feuersänger} (license LPPL). \end{itemize} \section{Changelog} \begin{itemize} \item \textbf{0.4.0} (2023/10/24) : \subitem Added cursor and smooth options. \subitem Added square and triangle plot examples. \subitem Fixed the pgf keys declaration. \item \textbf{0.3.0} (2023/10/08) : \subitem Implemented XY mode and math (add, subtract, multiply, divide) functionalities. \item \textbf{0.2.0} (2023/10/07) : \subitem Added \texttt{color text one}, \texttt{color text two} and \texttt{color text xy} options. \subitem Added \texttt{indicators} option. \subitem Added \texttt{rounded corners} option. \subitem Fixed the main axis color not being applied. \subitem Reworded the documentation and the example file. \item \textbf{0.1.1} (2023/10/06) : \subitem Renamed \texttt{sub axis color} to \texttt{grid color}. \subitem Renamed \texttt{expr one} and \texttt{expr two} to \texttt{func one} and \texttt{func two}. \subitem Updated package files names. \item \textbf{0.1.0} (2023/10/06) : Initial release. XY mode not implemented yet. \end{itemize} \end{document}