summaryrefslogtreecommitdiff
path: root/graphics/pgf/contrib/pinoutikz
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-11-28 03:01:37 +0000
committerNorbert Preining <norbert@preining.info>2019-11-28 03:01:37 +0000
commit747dfc2fd42b7dbdc60bb83a91392d4960b1f48e (patch)
treefca18e41029be2cf7744f813ffc1844e2dc7594a /graphics/pgf/contrib/pinoutikz
parent5142daa13e19b32afa064863e039da3afaf06e83 (diff)
CTAN sync 201911280301
Diffstat (limited to 'graphics/pgf/contrib/pinoutikz')
-rw-r--r--graphics/pgf/contrib/pinoutikz/README.md39
-rw-r--r--graphics/pgf/contrib/pinoutikz/pinoutikz.sty225
-rw-r--r--graphics/pgf/contrib/pinoutikz/pinoutikz_doc_en.pdfbin0 -> 68332 bytes
-rw-r--r--graphics/pgf/contrib/pinoutikz/pinoutikz_doc_en.tex441
4 files changed, 705 insertions, 0 deletions
diff --git a/graphics/pgf/contrib/pinoutikz/README.md b/graphics/pgf/contrib/pinoutikz/README.md
new file mode 100644
index 0000000000..f042634706
--- /dev/null
+++ b/graphics/pgf/contrib/pinoutikz/README.md
@@ -0,0 +1,39 @@
+ _________________
+
+ pinoutikz package
+ 1.1.0
+ 2019/11/25
+ _________________
+
+This package provides macros for chip pinout diagrams typesetting.
+
+Main features are:
+ * pinout diagrams:
+ - PDIP packages
+ - TQFP packages
+ - PLCC packages
+ * formatting of pin labels:
+ - logical negation (show as a text with oveeline).
+
+This bundle contains 4 files:
+ * pinoutikz.sty (the package itself)
+ * pinoutikz_doc.tex and pinoutikz_doc.pdf (manual in english)
+ - this one substitutes for a quick test as well
+ * README.md (this file)
+
+##############################################################################
+ Robert Blazek
+ <robert.h.blazek@gmail.com>
+
+License:
+------------------------------------------------------------------------------
+This material is subject to the LATEX Project Public License 1.3c
+
+Change history:
+------------------------------------------------------------------------------
+Version 1.1.0, 2019/11/25 (against 1.0.1)
+* New packages added: TQFP, PLCC
+* Pin label syntax changed -> <pin position>/<pin label>
+
+Version 1.0.1 2019/11/23
+* version created
diff --git a/graphics/pgf/contrib/pinoutikz/pinoutikz.sty b/graphics/pgf/contrib/pinoutikz/pinoutikz.sty
new file mode 100644
index 0000000000..30656c6143
--- /dev/null
+++ b/graphics/pgf/contrib/pinoutikz/pinoutikz.sty
@@ -0,0 +1,225 @@
+% License: LATEX Project Public License 1.3c
+% Author: Robert Blazek
+% Date: 2019/11/25
+\NeedsTeXFormat{LaTeX2e}[1994/06/01]
+\ProvidesPackage{pinoutikz}[1.1.0 Pinout diagram definitions]
+
+\RequirePackage{ifthen}
+\RequirePackage{lmodern}
+\RequirePackage{xstring}
+\RequirePackage{upquote}
+\RequirePackage{amsmath,amssymb}
+\RequirePackage{amsfonts}
+\RequirePackage{forarray}
+\RequirePackage{arrayjob}
+\RequirePackage{pgf}
+\RequirePackage{tikz}
+
+%% 'sans serif' option
+\DeclareOption{sans}{
+ \renewcommand{\familydefault}{\sfdefault}
+}
+
+%% 'roman' option
+\DeclareOption{roman}{
+ \renewcommand{\familydefault}{\rmdefault}
+}
+
+%% Global indentation option
+\newif\if@neverindent\@neverindentfalse
+\DeclareOption{neverindent}{
+ \@neverindenttrue
+}
+
+\ExecuteOptions{sans}
+
+\ProcessOptions\relax
+
+\usetikzlibrary{shapes.misc, shapes.geometric}
+
+\def\pinoutikzname {pinouTikz}
+\def\pinoutikzversion {1.1.0}
+\def\pinoutikzdate {2019/11/25}
+
+%% Formatt a pin name
+\def\FormatPinLabel#1{
+ \pgfmathparse{0}\let\negstate\pgfmathresult
+ \pgfmathparse{0}\let\index\pgfmathresult
+ \ForEach{~}%
+ {%
+ \StrLen{\thislevelitem}[\itemlen]%
+ \ifthenelse{\itemlen>0}{%
+ \ifthenelse{\equal{\negstate}{1}}{$\overline{\thislevelitem}$}{\thislevelitem}%
+ \pgfmathparse{\index+1}\let\index\pgfmathresult
+ }{}%
+ \pgfmathparse{!\negstate}\let\negstate\pgfmathresult%
+ }%
+ {#1}
+}
+
+%% package rectangle
+\def\CASE(#1)#2#3#4 {%
+ \ifthenelse{\equal{#1}{TQFP}}{%
+ \node[draw=black, rectangle,minimum width=#3,minimum height=#4,line width=1.5pt, chamfered rectangle, chamfered rectangle corners={north west, north east, south east, south west}] at (#2) (case) {};
+ \draw (-.39 cm,#4-1.15cm) circle (1.5mm);
+ }{}%
+ \ifthenelse{\equal{#1}{PLCC}}{%
+ \node[draw=black, rectangle,minimum width=#3,minimum height=#4,line width=1.5pt, chamfered rectangle, chamfered rectangle corners={north west}] at (#2) (case) {};
+ %\node[draw=black, circle,minimum size=1.5mm] at (#3*.5 cm,#4-1.25cm) (mark) {};
+ }{}%
+}
+
+%% PIN diagram with label decoding
+%% @param#1: options
+%% @param#2: offset
+%% @param#3: pin name
+%% @param#4: pin number
+\def\PIN[#1](#2)#3#4{
+ % decode label
+ \begin{scope}[shift={(#2)}]
+ \def\pinlabel{#3}
+ \ifthenelse{\equal{#1}{right}}%
+ {%
+ \draw (0.12,0) node[label=right:{\footnotesize \pinlabel},label=left:{\small \pgfmathprintnumber{#4}} ]{};
+ \draw (0,-.15) rectangle(0.12,0.15);
+ }{}
+ \ifthenelse{\equal{#1}{left}}%
+ {%
+ \draw (-0.12,0) node[label=left:{\footnotesize \pinlabel},label=right:{\small \pgfmathprintnumber{#4}} ]{};
+ \draw[rotate=180] (0,-.15) rectangle(0.12,0.15);
+ }{}
+ \ifthenelse{\equal{#1}{top}}%
+ {%
+ \draw(0,0.12) node[rotate=90,label=right:\rotatebox{90}{\footnotesize \pinlabel},label=left:\rotatebox{90}{\small \pgfmathprintnumber{#4}} ]{};
+ \draw[rotate=90](0,-.15) rectangle(0.12,0.15);
+ }{}
+ \ifthenelse{\equal{#1}{bottom}}%
+ {%
+ \draw(0,-0.12) node[rotate=90,label=left:\rotatebox{90}{\footnotesize \pinlabel},label=right:\rotatebox{90}{\small \pgfmathprintnumber{#4}} ]{};
+ \draw[rotate=-90](0,-.15) rectangle(0.12,0.15);
+ }{}
+ \end{scope}
+}
+
+%% PDIP package diagram
+%% @param#1: offset
+%% @param#2: number of pins (divisible by 2)
+%% @param#3: comma separated definitions list for every pin - every pin definition must be enclosed in quotation marks ("")
+\def\PDIP(#1)#2{%
+ \begin{tikzpicture}
+ \begin{scope}[shift={(0,0)}]
+ \sffamily
+ \textsf{%
+ \def\pins{{#2}}
+ \pgfmathparse{#1/2-1}\let\cntpinsl\pgfmathresult
+ \pgfmathparse{#1/2}\let\cntstr\pgfmathresult
+ \pgfmathparse{#1-1}\let\cntpinsr\pgfmathresult
+ \pgfmathparse{\cntstr*.5}\let\height\pgfmathresult
+ \draw[line width=1.5pt] (0,-0.5) rectangle (1.88,\height);
+ \draw (0.80,\height) arc (180:360:2mm);
+ %iterate through pin definitions
+ \foreach \pinnum/\i in {#2}%
+ {%
+ \pgfmathparse{\pinnum-1}\let\pinidx\pgfmathresult
+ \pgfmathparse{(\pinnum>0 && \pinnum<(\cntstr+1)) ? 0 : 1}\let\pinrange\pgfmathresult
+ \ifthenelse{\equal{\pinrange}{0} }
+ {%
+ \pgfmathparse{(\cntpinsl-\pinidx)*0.5}\let\ypin\pgfmathresult
+ \PIN[left](0,\ypin){\i}{\pinnum}
+ }%else
+ {%
+ \pgfmathparse{(\pinidx-\cntstr)*0.5}\let\ypin\pgfmathresult
+ \PIN[right](1.88,\ypin){\i}{\pinnum}
+ }
+% \fi
+ }
+ }
+ \end{scope}
+ \end{tikzpicture}
+}
+
+% #1 - pin count
+% #2 - pin array
+% #3 - case type
+% #4 - pin offset
+\def\GENFOUREDGE(#1)#2#3#4{%
+ \sffamily
+ \textsf{%
+ \def\pins{{#2}}
+ \pgfmathparse{#1/4-1}\let\cntpinsl\pgfmathresult
+ \pgfmathparse{#1/4}\let\cntstr\pgfmathresult
+ \pgfmathparse{#1-1}\let\cntpinsr\pgfmathresult
+ \pgfmathparse{\cntstr*.4+.4}\let\height\pgfmathresult
+ \pgfmathparse{\height}\let\width\pgfmathresult
+ %\draw[line width=1.5pt] (-0.75,-0.75) rectangle (\width,\height);
+% \node[draw=black, rectangle,minimum width=\width cm + 0.75 cm,minimum height=\height cm + 0.75 cm,line width=1.5pt, chamfered rectangle, chamfered rectangle corners={north west}] at (\width*.5-0.75*.5,\width*.5-0.75*.5) (case) {};
+ \CASE(#3){\width*.5-0.75*.5,\width*.5-0.75*.5}{\width cm + 0.75 cm}{\height cm + 0.75 cm}
+ %iterate through pin definitions
+ \foreach \pinnum/\i in {#2}%
+ {%
+ \pgfmathparse{\pinnum-1}\let\pinidx\pgfmathresult
+ \pgfmathparse{Mod((int(\pinidx+#1)-#4),#1)}\let\pinidx\pgfmathresult
+ \pgfmathparse{int(\pinidx/\cntstr)}\let\pinrange\pgfmathresult
+ \pgfmathparse{Mod(\pinidx,\cntstr)}\let\rngidx\pgfmathresult
+ \ifthenelse{\equal{\pinrange}{0} }%
+ {%
+ \pgfmathparse{(\cntpinsl-\rngidx)*0.40}\let\ypin\pgfmathresult
+ \PIN[left](-0.75,\ypin){\i}{\pinnum}
+ }{}
+ \ifthenelse{\equal{\pinrange}{1} }%
+ {%
+ \pgfmathparse{\rngidx*0.40}\let\ypin\pgfmathresult
+ \PIN[bottom](\ypin,-0.75){\i}{\pinnum}
+ }{}
+ \ifthenelse{\equal{\pinrange}{2} }%
+ {%
+ \pgfmathparse{\rngidx*0.40}\let\ypin\pgfmathresult
+ \PIN[right](\width,\ypin){\i}{\pinnum}
+ }{}
+ \ifthenelse{\equal{\pinrange}{3} }%
+ {%
+ \pgfmathparse{(\cntpinsl-\rngidx)*0.40}\let\ypin\pgfmathresult
+ \PIN[top](\ypin,\height){\i}{\pinnum}
+ }{}% \fi
+ }
+ }
+}
+
+%% PLCC package diagram
+%% @param#1: offset
+%% @param#2: number of pins (divisible by 2)
+%% @param#3: comma separated definitions list for every pin - every pin definition must be enclosed in quotation marks ("")
+\def\PLCC(#1)#2{%
+ \begin{tikzpicture}
+ \begin{scope}[shift={(0,0)}]
+ \GENFOUREDGE(#1){#2}{PLCC}{round(#1*.125)}
+ \end{scope}
+ \end{tikzpicture}
+}
+
+%% TQFP package diagram
+%% @param#1: offset
+%% @param#2: number of pins (divisible by 2)
+%% @param#3: comma separated definitions list for every pin - every pin definition must be enclosed in quotation marks ("")
+\def\TQFP(#1)#2{%
+ \begin{tikzpicture}
+ \begin{scope}[shift={(0,0)}]
+ \GENFOUREDGE(#1){#2}{TQFP}{0}
+ \end{scope}
+ \end{tikzpicture}
+}
+
+%%
+
+\newlength{\pardefault}
+\setlength{\pardefault}{\parindent}
+\newcommand{\neverindent}{ \setlength{\parindent}{0pt} }
+\newcommand{\autoindent}{ \setlength{\parindent}{\pardefault} }
+
+\if@neverindent
+\neverindent
+\fi
+
+% ...
+
+\endinput \ No newline at end of file
diff --git a/graphics/pgf/contrib/pinoutikz/pinoutikz_doc_en.pdf b/graphics/pgf/contrib/pinoutikz/pinoutikz_doc_en.pdf
new file mode 100644
index 0000000000..82680ea786
--- /dev/null
+++ b/graphics/pgf/contrib/pinoutikz/pinoutikz_doc_en.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/pinoutikz/pinoutikz_doc_en.tex b/graphics/pgf/contrib/pinoutikz/pinoutikz_doc_en.tex
new file mode 100644
index 0000000000..b001360929
--- /dev/null
+++ b/graphics/pgf/contrib/pinoutikz/pinoutikz_doc_en.tex
@@ -0,0 +1,441 @@
+\documentclass[english,a4paper,10pt]{article}
+\usepackage{fontspec}
+\usepackage[bookmarks=true,bookmarksopen=true,colorlinks=true,hyperfootnotes=false,filecolor=black,linkcolor=blue,urlcolor=blue,pdfauthor={Robert Blazek},pdftitle={pinouTikz},pdfsubject={package for strings of tokens},pdfkeywords={pinouTikz,latex,chip,pinout},pdfcreator={LaTeX}]{hyperref}
+\usepackage[margin=1.9cm]{geometry}
+\usepackage{libertine}
+\usepackage[scale=0.85]{noto-mono}
+\usepackage[bottom]{footmisc}
+\usepackage{amsmath,amssymb,amsfonts,color,eurosym,xspace,babel,listings}
+\usepackage{pinoutikz}
+\makeatletter
+\definecolor{@xs@bckgcolor}{rgb}{0.9,1,1}
+\definecolor{@xs@keywordspinouTikz}{rgb}{0,0,0.9}
+\definecolor{@xs@keywordslatex}{rgb}{1,0,0}
+\definecolor{@xs@arguments}{rgb}{0,0,0}
+\definecolor{@xs@comments}{rgb}{0.5,0.5,0.5}
+\definecolor{violet}{rgb}{0.66,0,0.66}
+\lstset{%
+ language=[AlLaTeX]TeX,%
+ morekeywords={numexpr,detokenize},%
+ float=hbp,%
+ basicstyle=\small\ttfamily,%
+ identifierstyle=\color{@xs@arguments},%
+ keywordstyle=\color{@xs@keywordslatex},%
+ commentstyle=\itshape\color{@xs@comments},%
+ columns=fixed,%
+ tabsize=4,%
+ frame=single,%
+ extendedchars=true,%
+ showspaces=false,%
+ showstringspaces=false,%
+ numbers=left,%
+ numberstyle=\tiny\ttfamily,%
+ breaklines=true,%
+ breakindent=3em,%
+ backgroundcolor=\color{@xs@bckgcolor},%
+ breakautoindent=true,%
+ captionpos=t,%
+ xleftmargin=1em,%
+ xrightmargin=1em,%
+ lineskip=0pt,%
+ numbersep=1em,%
+ classoffset=1,%
+ morekeywords={% macros and commands of pinouTikz
+ PDIP,%
+ PLCC,%
+ SOP},%
+ keywordstyle=\color{@xs@keywordspinouTikz},%
+ classoffset=0}
+\makeatother
+
+\newcommand\guill[1]{"#1"}
+\newcommand\argu[1]{$\langle$\textit{#1}$\rangle$}
+\newcommand\ARGU[1]{\texttt{\{}\argu{#1}\texttt{\}}}
+\newcommand\arguC[1]{\texttt{[}\argu{#1}\texttt{]}}
+\newcommand\arguCC[2]{\texttt{[}\argu{#1}{,}\argu{#2}\texttt{]}}
+\newcommand\arguD[1]{\texttt{(}\argu{#1}\texttt{)}}
+\newcommand\texte[1]{\texttt{text}${}_{#1}$}
+\newcommand\etoile{$\langle$\texttt{[*]}$\rangle$}
+\newenvironment{Conditions}[1][1cm]%
+{\begin{list}%
+ {$\vartriangleright$}%
+ {\setlength{\leftmargin}{#1}
+ \setlength{\itemsep}{0pt}
+ \setlength{\parsep}{0pt}
+ \setlength{\topsep}{2ptplus3ptminus2pt}
+ }}%
+{\end{list}}
+\renewcommand\th{${}^\text{th}$\xspace}
+\newcommand\US{syntax unit\xspace}
+\newcommand\USs{syntax units\xspace}
+\newcommand\pinouTikz{\textsf{pinouTikz}\xspace}
+\newcommand\styleexemple{\small\baselineskip1.03\baselineskip\vskip\baselineskip\relax}
+\newcommand\styleexercice{\footnotesize}
+\newcommand\verbinline{\lstinline[basicstyle=\normalsize\ttfamily]}
+\newcommand\colorise{\color{violet}}
+\begin{document}
+\setlength{\parindent}{0pt}
+\begin{titlepage}
+ \null\par\vfill
+ \begin{center}
+ \begin{minipage}{0.75\linewidth}
+ \begin{center}
+ \Huge\bfseries \pinoutikzname\par\vspace{5pt}
+ \small v\pinoutikzversion\par\vspace{25pt}
+ \normalsize User's manual
+ \end{center}
+ \end{minipage}
+ \end{center}
+ \vspace{1cm}
+ \begin{center}
+ Robert {\sc Blazek}\par\small
+ \href{mailto:robert.h.blazek@gmail.com}{\nolinkurl{robert.h.blazek@gmail.com}}\par\vspace{5pt}
+ %\xstringenglishdate
+ \end{center}
+ \vfill\hrulefill
+ \begin{center}
+ \begin{minipage}{0.85\linewidth}
+ \noindent
+ \hfill\textbf{\textit{Abstract}}\hfill{}\medskip\par
+ This package which requires $\varepsilon$-\TeX{}, provides macros for creating pinout diagrams of chips.
+
+ \end{minipage}
+ \end{center}
+ \hrulefill\vfill{}
+\end{titlepage}
+
+\tableofcontents
+
+\section{Introduction}
+\subsection{Description}
+This package defines macros for generating symbolic pinout diagrams for different package classes, such as DIP, PLCC, etc.
+
+\subsection{Motivation}
+Whoever has ever had to do with FPGA or MCUs (whether for living and leisure), it's just natural he or she might have been in a need to document some pins. So was my case and since I failed in finding any package in \LaTeX{} to suit my needs, I opted for creating one myself.
+
+I hope others will find it as useful as it was to me and my colleagues.
+
+This is my first latex package documentation ever - and since I hate reinventing the wheel - this manual has been based upon that of \textbf{xstrings} - with the courtesy of the author, of course.
+
+\section{The macros}
+For a better understanding, let's see first the macros with the simpler arguments possible. No special catcode, no exotic token, no control sequence either: only alphanumeric chars will be contained in the arguments.\medskip
+
+In the following chapters, all the macros will be presented this way:
+\begin{itemize}
+ \item a short description of the operation;
+ \item the operation under special conditions. For each conditions considered, the operation described has priority on that (those) below;
+ \item finally, several examples are given. I tried to find them most easily comprehensible and most representative of the situations met in normal use.
+\end{itemize}\smallskip
+
+\textbf{Important}: in the following, a \argu{number} can be an integer written with numeric chars, a counter, or the result of an arithmetic operation made with the command \verbinline|\numexpr|.\smallskip
+
+All the macros of \pinouTikz are displayed in {\makeatletter\color{@xs@keywordspinouTikz}red}.
+
+\subsection{The pinout diagrams}
+\subsubsection{\ttfamily\textbackslash PDIP}
+\verbinline|\PDIP|\arguD{pincount}\ARGU{pinarray}
+\smallskip
+
+Draws a PDIP package, with generic number of pins.
+
+\begin{itemize}
+ \item \argu{pincount} the number of pins of a DIP package and should be an even number.
+ \item \ARGU{pinarray} is a comma-separated list of pins - each pin definition is as follows: \argu{pinnumber}/\ARGU{pinlabel}.
+\end{itemize}
+
+%% 4-pin example
+%\begin{minipage}[t]{0.65\linewidth}
+\begin{lstlisting}
+\begin{figure}
+ \centering
+ \PDIP(4){%
+ 1/{E},2/B,3/NC,4/C}
+ \caption{NPN-Transistor, 4-pin PDIP package} \label{fig:X_DIP4}
+\end{figure}
+\end{lstlisting}%
+
+%% 4-pin example
+\begin{figure}[ht!]
+ \centering
+ \PDIP(4){%
+ 1/{E},
+ 2/B,
+ 3/NC,
+ 4/C
+ }%
+ \caption{NPN-Transistor, 4-pin PDIP package} \label{fig:X_DIP4}
+\end{figure}
+
+%\end{minipage}\hfill
+%% 8-pin example
+%\begin{minipage}[t]{0.65\linewidth}
+\begin{lstlisting}
+\begin{figure}
+ \centering
+ \PDIP(8){%
+ 1/CLK,
+ 2/A,
+ 3/B,
+ 4/GND,
+ 5/Y,
+ 6/{\FormatPinLabel{~Y~}/RESET},
+ 7/NC,
+ 8/$V_{cc}$%
+ }
+ \caption{TTL logic chip, 8-pin PDIP package} \label{fig:X_DIP8}
+\end{figure}
+\end{lstlisting}%
+
+%% 8-pin example
+\begin{figure}[ht!]
+ \centering
+ \PDIP(8){%
+ 1/CLK,
+ 2/A,
+ 3/B,
+ 4/GND,
+ 5/Y,
+ 6/{\FormatPinLabel{~Y~}/RESET},
+ 7/NC,
+ 8/$V_{cc}$%
+ }
+ \caption{TTL logic chip, 8-pin PDIP package} \label{fig:X_DIP8}
+\end{figure}
+%\end{minipage}\hfill
+
+%% 14-pin example
+\begin{figure}[ht!]
+ \centering
+ \PDIP(14){%
+ 1/A1,
+ 2/B1,
+ 3/\FormatPinLabel{\#1 AND/~OR~/GPIO1},
+ 4/Y1,
+ 5/C1,
+ 6/\FormatPinLabel{\#2 AND/~OR~/GPIO2},
+ 7/GND,
+ 8/PCLK,
+ 9/PDAT,
+ 10/A2,
+ 11/B2,
+ 12/\FormatPinLabel{\#2 INV/~SME~/GPIO3},
+ 13/C2,
+ 14/$V_{cc}$}
+ \caption{Generic programmable TTL logic chip, 14-pin PDIP package} \label{fig:X_DIP14}
+\end{figure}
+
+%% 14-pin example
+\begin{minipage}[t]{0.65\linewidth}
+\begin{lstlisting}
+\begin{figure}[ht!]
+ \centering
+ \PDIP(14){%
+ 1/A1,
+ 2/B1,
+ 3/\FormatPinLabel{\#1 AND/~OR~/GPIO1},
+ 4/Y1,
+ 5/C1,
+ 6/\FormatPinLabel{\#2 AND/~OR~/GPIO2},
+ 7/GND,
+ 8/PCLK,
+ 9/PDAT,
+ 10/A2,
+ 11/B2,
+ 12/\FormatPinLabel{\#2 INV/~SME~/GPIO3},
+ 13/C2,
+ 14/$V_{cc}$}
+ \caption{Generic programmable TTL logic chip, 14-pin PDIP package} \label{fig:X_DIP14}
+\end{figure}
+\end{lstlisting}%
+\end{minipage}\hfill
+
+\subsubsection{\ttfamily\textbackslash TQFP}
+\verbinline|\TQFP|\arguD{pinnumber}\ARGU{pinarray}
+\smallskip
+
+\begin{itemize}
+ \item \argu{pincount} the number of pins of a DIP package and should be an even number.
+ \item \ARGU{pinarray} is a comma-separated list of pins - each pin definition is as follows: \argu{pinnumber}/\ARGU{pinlabel}.
+\end{itemize}
+
+%% 32-pin TQFP example
+\begin{minipage}[t]{0.65\linewidth}
+\begin{lstlisting}
+\begin{figure}[ht!]
+ \centering
+ \TQFP(32){%
+ 1/{PD.0/RTX1},
+ 2/{PA.0/STX1},
+ 3/PA.1,
+ 4/PA.2,
+ 5/PA.3,
+ 6/PA.4,
+ 7/PA.5,
+ 8/GND,
+ 9/PA.6,
+ 10/PA.7,
+ 11/{PB.0/RTX1},
+ 12/{PB.1/STX1},
+ 13/PB.2,
+ 14/PB.3,
+ 15/PB.4,
+ 16/PB.5,
+ 17/PB.6,
+ 18/PB.7,
+ 19/\FormatPinLabel{PC.0/~ALE~/PLPBC0},
+ 20/PC.1,
+ 21/PC.2,
+ 22/PC.3,
+ 23/PC.4,
+ 24/PC.5,
+ 25/PC.6,
+ 26/PC.7,
+ 27/XTAL1/PD.3,
+ 28/XTAL2/PD.4,
+ 29/RST,
+ 30/PD.1,
+ 31/PD.2,
+ 32/$V_{cc}$}
+ \caption{A generic MCU chip, 32-pin TQFP package} \label{fig:X_TQFP32}
+\end{figure}
+\end{lstlisting}%
+\end{minipage}\hfill
+
+%% 32-pin TQFP example
+\begin{figure}[ht!]
+ \centering
+ \TQFP(32){%
+ 1/{PD.0/RTX1},
+ 2/{PA.0/STX1},
+ 3/PA.1,
+ 4/PA.2,
+ 5/PA.3,
+ 6/PA.4,
+ 7/PA.5,
+ 8/GND,
+ 9/PA.6,
+ 10/PA.7,
+ 11/{PB.0/RTX1},
+ 12/{PB.1/STX1},
+ 13/PB.2,
+ 14/PB.3,
+ 15/PB.4,
+ 16/PB.5,
+ 17/PB.6,
+ 18/PB.7,
+ 19/\FormatPinLabel{PC.0/~ALE~/PLPBC0},
+ 20/PC.1,
+ 21/PC.2,
+ 22/PC.3,
+ 23/PC.4,
+ 24/PC.5,
+ 25/PC.6,
+ 26/PC.7,
+ 27/XTAL1/PD.3,
+ 28/XTAL2/PD.4,
+ 29/RST,
+ 30/PD.1,
+ 31/PD.2,
+ 32/$V_{cc}$}
+ \caption{A generic MCU chip, 32-pin TQFP package} \label{fig:X_TQFP32}
+\end{figure}
+
+\subsubsection{\ttfamily\textbackslash PLCC}
+\verbinline|\PLCC|\arguD{pinnumber}\ARGU{pinarray}
+\smallskip
+
+\begin{itemize}
+ \item \argu{pincount} the number of pins of a DIP package and should be an even number.
+ \item \ARGU{pinarray} is a comma-separated list of pins - each pin definition is as follows: \argu{pinnumber}/\ARGU{pinlabel}.
+\end{itemize}
+
+%% 28-pin PLCC example
+\begin{minipage}[t]{0.65\linewidth}
+\begin{lstlisting}
+\begin{figure}[ht!]
+ \centering
+ \PLCC(28){%
+ 1/{PD.0/RTX1},
+ 2/{PA.0/STX1},
+ 3/PA.1,
+ 4/PA.2,
+ 5/PA.3,
+ 6/PA.4,
+ 7/PA.5,
+ 8/GND,
+ 9/PA.6,
+ 10/PA.7,
+ 11/{PB.0/RTX1},
+ 12/{PB.1/STX1},
+ 13/PB.2,
+ 14/PB.3,
+ 15/PB.4,
+ 16/PB.5,
+ 17/PB.6,
+ 18/PB.7,
+ 19/\FormatPinLabel{PC.0/~ALE~/PLPBC0},
+ 20/PC.1,
+ 21/PC.2,
+ 22/PC.3,
+ 23/{XTAL1/PD.3},
+ 24/{XTAL2/PD.4},
+ 25/RST,
+ 26/PD.1,
+ 27/PD.2,
+ 28/$V_{cc}$}
+ \caption{A generic MCU chip, 28-pin PLCC package} \label{fig:X_PLCC28}
+\end{figure}
+\end{lstlisting}%
+\end{minipage}\hfill
+
+%% 28-pin PLCC example
+\begin{figure}[ht!]
+ \centering
+ \PLCC(28){%
+ 1/{PD.0/RTX1},
+ 2/{PA.0/STX1},
+ 3/PA.1,
+ 4/PA.2,
+ 5/PA.3,
+ 6/PA.4,
+ 7/PA.5,
+ 8/GND,
+ 9/PA.6,
+ 10/PA.7,
+ 11/{PB.0/RTX1},
+ 12/{PB.1/STX1},
+ 13/PB.2,
+ 14/PB.3,
+ 15/PB.4,
+ 16/PB.5,
+ 17/PB.6,
+ 18/PB.7,
+ 19/\FormatPinLabel{PC.0/~ALE~/PLPBC0},
+ 20/PC.1,
+ 21/PC.2,
+ 22/PC.3,
+ 23/{XTAL1/PD.3},
+ 24/{XTAL2/PD.4},
+ 25/RST,
+ 26/PD.1,
+ 27/PD.2,
+ 28/$V_{cc}$}
+ \caption{A generic MCU chip, 28-pin PLCC package} \label{fig:X_PLCC28}
+\end{figure}
+
+%% Examples for PDIP packages
+\begin{minipage}[t]{0.35\linewidth}
+ \styleexemple
+\end{minipage}%
+
+
+%\bigskip\bigskip
+\begin{center}
+$\star$\par
+$\star$\quad$\star$
+\end{center}
+\par\nobreak\bigskip\bigskip
+That's all, I hope you will find this package useful!\par\nobreak
+Please, send me an \href{mailto:robert.h.blazek@gmail.com}{email} if you find a bug or if you have any idea of improvement\ldots\par\nobreak\medskip
+Robert Blazek
+\end{document} \ No newline at end of file