diff options
Diffstat (limited to 'Master/texmf-dist/source/latex')
-rw-r--r-- | Master/texmf-dist/source/latex/nndraw/nndraw.dtx | 258 | ||||
-rw-r--r-- | Master/texmf-dist/source/latex/nndraw/nndraw.ins | 58 |
2 files changed, 316 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/nndraw/nndraw.dtx b/Master/texmf-dist/source/latex/nndraw/nndraw.dtx new file mode 100644 index 00000000000..fe1a0901490 --- /dev/null +++ b/Master/texmf-dist/source/latex/nndraw/nndraw.dtx @@ -0,0 +1,258 @@ +% \iffalse meta-comment +% +% Copyright (C) 2021 by Carlos Cardoso Dias <carlosdias.dev@gmail.com> +% --------------------------------------------------------------------------- +% This work may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2005/12/01 or later. +% +% This work has the LPPL maintenance status `maintained'. +% +% The Current Maintainer of this work is Carlos Cardoso Dias. +% +% This work consists of the files nndraw.dtx and nndraw.ins +% and the derived filebase nndraw.sty. +% +% \fi +% +% \iffalse +%<*driver> +\ProvidesFile{nndraw.dtx} +%</driver> +%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01] +%<package>\ProvidesPackage{nndraw} +%<*package> + [2021/06/22 1.0 nndraw is a LaTeX package which provides utilities to draw neural networks.] +%</package> +% +%<*driver> +\documentclass{ltxdoc} +\usepackage{nndraw}[2021/06/22] +\EnableCrossrefs +\CodelineIndex +\RecordChanges +\begin{document} + \DocInput{nndraw.dtx} + \PrintChanges + \PrintIndex +\end{document} +%</driver> +% \fi +% +% \CheckSum{129} +% +% \CharacterTable +% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z +% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z +% Digits \0\1\2\3\4\5\6\7\8\9 +% Exclamation \! Double quote \" Hash (number) \# +% Dollar \$ Percent \% Ampersand \& +% Acute accent \' Left paren \( Right paren \) +% Asterisk \* Plus \+ Comma \, +% Minus \- Point \. Solidus \/ +% Colon \: Semicolon \; Less than \< +% Equals \= Greater than \> Question mark \? +% Commercial at \@ Left bracket \[ Backslash \\ +% Right bracket \] Circumflex \^ Underscore \_ +% Grave accent \` Left brace \{ Vertical bar \| +% Right brace \} Tilde \~} +% +% +% \changes{1.0}{2021/06/22}{Converted to DTX file} +% +% \DoNotIndex{\newcommand,\newenvironment} +% +% \providecommand*{\url}{\texttt} +% \GetFileInfo{nndraw.dtx} +% \title{The \textsf{nndraw} package} +% \author{Carlos Cardoso Dias \\ \url{carlosdias.dev@gmail.com}} +% \date{\fileversion~from \filedate} +% +% \maketitle +% +% \section{Introduction} +% +\textbf{nndraw} is a \LaTeX package which provides utilities to draw neural networks in an efficient way. +Currently this package provides utilities to draw fully connected feedforward neural networks with an arbitrary +number of layers described inside the `fullyconnectednn` environment using the command `nnlayer`. +% +% \section{Usage} +% +An example of usage is shown below, in this example, a fully connected feedforward +deep neural network is provided with two inputs in the first layer, one hidden layer +with four neurons and one output layer with one output. This example shows how easy it is +to customize the presence/absence of biases in any layer as well as its position. + +\begin{verbatim} +\begin{fullyconnectednn}[biasy = -4.5, + titley = 1, + inout = false] + \nnlayer[title = Input layer]{2} + \nnlayer[title = Hidden layer]{4} + \nnlayer[title = Ouput layer, hasbias = false]{1} +\end{fullyconnectednn} +\end{verbatim} + +\noindent Which is drawn as + +\begin{fullyconnectednn}[biasy = -4.5, + titley = 1, + inout = false] + \nnlayer[title = Input layer]{2} + \nnlayer[title = Hidden layer]{4} + \nnlayer[title = Ouput layer, hasbias = false]{1} +\end{fullyconnectednn} +% +% +% \StopEventually{} +% +% \section{Implementation} +% +% \iffalse +%<*package> +% \fi +% +% \begin{macrocode} +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{nndraw}[2021/06/20 Neural Networks Draw LaTeX package] +\RequirePackage{tikz} +\pgfdeclarelayer{back} +\pgfsetlayers{back,main} +% \end{macrocode} +% +% \begin{macro}{\nnlayerNoText} +% \begin{macrocode} +\newcommand\nnlayerNoText[1]{} +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} +\newif\ifnnlayerHasBias +\pgfkeys{ + /nnlayer/.is family, /nnlayer, + default/.style = {title = , text = \nnlayerNoText, hasbias = true, bias = , color = , biascolor = }, + title/.estore in = \nnlayerTitle, + text/.store in = \nnlayerText, + hasbias/.is if = nnlayerHasBias, + bias/.estore in = \nnlayerBias, + color/.estore in = \nnlayerColor, + biascolor/.estore in = \nnlayerBiasColor, +} +\newcounter{numlayers} +\newcounter{nninputlayer} +\newcounter{lastnnsize} +\tikzstyle{neuron}=[circle, minimum size=6mm, fill=gray!70] +\tikzstyle{neuron_connection}=[->, shorten >=1pt, gray!70] +% \end{macrocode} +% +% \begin{macro}{\nnlayer} +% \begin{macrocode} +\newcommand\nnlayer[2][]{ + \pgfkeys{/nnlayer, default, #1} + \node[text width = \fullyconnectednnTextWidth, align = center] at (\fullyconnectednnLayersep * + \thenumlayers,\fullyconnectednnTitleY) {\nnlayerTitle}; + \if\thenninputlayer0 + \setcounter{nninputlayer}{#2} + \fi + \foreach \i in {1,...,#2} + { + \node[neuron, yshift=(#2 - \thenninputlayer)*5 mm, fill=\nnlayerColor] (\thenumlayers-\i) at (\thenumlayers * \fullyconnectednnLayersep,-\i) {\nnlayerText{\i}}; + } + \if\thelastnnsize0 + \else + \ifnnlayerHasBias + \node[neuron, yshift=5mm, fill=\nnlayerBiasColor] (bias-\thenumlayers) at (\thenumlayers * \fullyconnectednnLayersep -\fullyconnectednnLayersep + \fullyconnectednnBiasX, \fullyconnectednnBiasY) {\nnlayerBias}; + \fi + \begin{pgfonlayer}{back} +% \end{macrocode} +% node connections +% \begin{macrocode} + \foreach \i in {1,...,\thelastnnsize} + { + \foreach \j in {1,...,#2} + { + \draw[neuron_connection] (\the\numexpr\thenumlayers-1\relax-\i) -- (\thenumlayers-\j); + } + } +% \end{macrocode} +% bias connections +% \begin{macrocode} + \ifnnlayerHasBias + \foreach \j in {1,...,#2} + { + \draw[neuron_connection] (bias-\thenumlayers) -- (\thenumlayers-\j); + } + \fi + \end{pgfonlayer} + \fi + \setcounter{lastnnsize}{#2} + \stepcounter{numlayers} +} +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} +\newif\iffullyconnectednnInout +\pgfkeys{ + /fullyconnectednn/.is family, /fullyconnectednn, + default/.style = {input = \nnlayerNoText, output = \nnlayerNoText, layersep = 3, biasx = 0.75, biasy = -8.75, titley = 0.75, inout = true, text width = 2cm}, + input/.store in = \fullyconnectednnInput, + output/.store in = \fullyconnectednnOutput, + layersep/.estore in = \fullyconnectednnLayersep, + biasx/.estore in = \fullyconnectednnBiasX, + biasy/.estore in = \fullyconnectednnBiasY, + titley/.estore in = \fullyconnectednnTitleY, + inout/.is if = fullyconnectednnInout, + text width/.estore in = \fullyconnectednnTextWidth, +} +% \end{macrocode} +% +% \begin{environment}{fullyconnectednn} +% \begin{macrocode} +\newenvironment{fullyconnectednn}[1][] + { + \pgfkeys{/fullyconnectednn, default, #1} + \begin{center} + \begin{tikzpicture} + \setcounter{numlayers}{0} + \setcounter{nninputlayer}{0} + \setcounter{lastnnsize}{0} + } + { + \iffullyconnectednnInout + \begin{pgfonlayer}{back} +% \end{macrocode} +% Inputs +% \begin{macrocode} + \foreach \i in {1,...,\thenninputlayer} + { + \draw[<-, shorten <=1pt] (0-\i) -- ++(-1,0) node[left]{\fullyconnectednnInput{\i}}; + } + +% \end{macrocode} +% Outputs +% \begin{macrocode} + \foreach \i in {1,...,\thelastnnsize} + { + \draw[->, shorten <=1pt] (\the\numexpr\thenumlayers-1\relax-\i) -- ++(1,0) node[right]{\fullyconnectednnOutput{\i}}; + } + \end{pgfonlayer} + \fi + \end{tikzpicture} + \end{center} + } +% \end{macrocode} +% \end{environment} +% + +% +% \iffalse +%</package> +% \fi +% +% \Finale +\endinput diff --git a/Master/texmf-dist/source/latex/nndraw/nndraw.ins b/Master/texmf-dist/source/latex/nndraw/nndraw.ins new file mode 100644 index 00000000000..eeaed657d3f --- /dev/null +++ b/Master/texmf-dist/source/latex/nndraw/nndraw.ins @@ -0,0 +1,58 @@ +%% Copyright (C) 2021 by Carlos Cardoso Dias <carlosdias.dev@gmail.com> +%% -------------------------------------------------------------------------- +%% This work may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version 1.3 +%% of this license or (at your option) any later version. +%% The latest version of this license is in +%% http://www.latex-project.org/lppl.txt +%% and version 1.3 or later is part of all distributions of LaTeX +%% version 2005/12/01 or later. +%% +%% This work has the LPPL maintenance status `maintained'. +%% +%% The Current Maintainer of this work is Carlos Cardoso Dias. +%% +%% This work consists of the files nndraw.dtx and nndraw.ins +%% and the derived filebase nndraw.sty. +%% + +\input docstrip.tex +\keepsilent + +\usedir{tex/latex/nndraw} + +\preamble + +This is a generated file. + +Copyright (C) 2021 by Carlos Cardoso Dias <carlosdias.dev@gmail.com> +-------------------------------------------------------------------------- +This work may be distributed and/or modified under the +conditions of the LaTeX Project Public License, either version 1.3 +of this license or (at your option) any later version. +The latest version of this license is in + http://www.latex-project.org/lppl.txt +and version 1.3 or later is part of all distributions of LaTeX +version 2005/12/01 or later. + +\endpreamble + +\generate{\file{nndraw.sty}{\from{nndraw.dtx}{package}}} + +\obeyspaces +\Msg{*************************************************************} +\Msg{* *} +\Msg{* To finish the installation you have to move the following *} +\Msg{* file into a directory searched by TeX: *} +\Msg{* *} +\Msg{* nndraw.sty *} +\Msg{* *} +\Msg{* To produce the documentation run the file nndraw.dtx *} +\Msg{* through LaTeX. *} +\Msg{* *} +\Msg{* Happy TeXing! *} +\Msg{* *} +\Msg{*************************************************************} + +\endbatchfile + |