diff options
-rw-r--r-- | Master/texmf-dist/doc/latex/structmech/README.md | 31 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/structmech/doc/structmech.pdf | bin | 0 -> 250787 bytes | |||
-rw-r--r-- | Master/texmf-dist/doc/latex/structmech/doc/structmech.tex | 507 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/structmech/tex/structmech.sty | 416 | ||||
-rwxr-xr-x | Master/tlpkg/bin/tlpkg-ctan-check | 3 | ||||
-rw-r--r-- | Master/tlpkg/tlpsrc/collection-mathscience.tlpsrc | 1 | ||||
-rw-r--r-- | Master/tlpkg/tlpsrc/structmech.tlpsrc | 0 |
7 files changed, 957 insertions, 1 deletions
diff --git a/Master/texmf-dist/doc/latex/structmech/README.md b/Master/texmf-dist/doc/latex/structmech/README.md new file mode 100644 index 00000000000..05fe080a8e6 --- /dev/null +++ b/Master/texmf-dist/doc/latex/structmech/README.md @@ -0,0 +1,31 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Copyright (C) 2018 Theodore Chang +% +% This program is free software: you can redistribute it and/or modify +% it under the terms of the GNU General Public License as published by +% the Free Software Foundation, either version 3 of the License, or +% (at your option) any later version. +% +% This program is distributed in the hope that it will be useful, +% but WITHOUT ANY WARRANTY; without even the implied warranty of +% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +% GNU General Public License for more details. +% +% You should have received a copy of the GNU General Public License +% along with this program. If not, see <http://www.gnu.org/licenses/>. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +------ + +**structmech** is a collection of several TikZ commands that allows users to draw basic elements in material/structural mechanics. With one single command, it is capable of drawing member forces, nodal forces/displacements, various boundary conditions, internal force distributions, etc. + +Please feel free to redistribute and/or expand the functionality. Please contact me at: + +[tlcfem@gmail.com](mailto:tlcfem@gmail.com) + +tlc + +06/04/2018 + + + diff --git a/Master/texmf-dist/doc/latex/structmech/doc/structmech.pdf b/Master/texmf-dist/doc/latex/structmech/doc/structmech.pdf Binary files differnew file mode 100644 index 00000000000..98c4601616b --- /dev/null +++ b/Master/texmf-dist/doc/latex/structmech/doc/structmech.pdf diff --git a/Master/texmf-dist/doc/latex/structmech/doc/structmech.tex b/Master/texmf-dist/doc/latex/structmech/doc/structmech.tex new file mode 100644 index 00000000000..799645f7156 --- /dev/null +++ b/Master/texmf-dist/doc/latex/structmech/doc/structmech.tex @@ -0,0 +1,507 @@ +\documentclass[a4paper,10pt]{scrartcl} +\usepackage[margin=20mm]{geometry} +\usepackage[convention=sign]{structmech}\usepackage{amsmath,amsfonts,amssymb,indentfirst,fancyvrb,mathpazo,zi4,listings,float} +\usepackage[colorlinks]{hyperref} +\lstset{xleftmargin=2mm,numbers=left,numbersep=4mm,numberstyle=\color{0066CC},keywordstyle=\bfseries\color{CC0066},commentstyle=\color{CC6600},stringstyle=\bfseries\color{00CC66},stepnumber=1,frame=shadowbox,breaklines,frameround=tttt,basicstyle=\ttfamily\footnotesize} +\addtokomafont{disposition}{\rmfamily} +\title{structmech}\subtitle{A TikZ command set for structural mechanics drawings} +\author{Theodore Chang\footnote{E-mail: \href{tlcfem@gmail.com}{tlcfem@gmail.com}}\\\normalsize{}University of Canterbury, Christchurch, NZ} +\date{\normalsize{}v0.1 released on \today} +\newcommand*{\Highlight}[1]{\colorbox{00CC66}{\color{CC0066}#1}} +\begin{document}\maketitle\tableofcontents +\section{Intro} +\Highlight{structmech} is a collection of several commands to draw basic elements in structural mechanics with TikZ. It can be used to draw illustrations that may be used for teaching and excising purposes. The GPL v3 license is used for this package. +\section{Options} +Use following command to load the package. +\begin{Verbatim}[frame=single,label=Syntax] +\usepackage[key=val]{structmech} +\end{Verbatim} +Available options are: +\begin{enumerate} +\item axial: Define the axial force color. \Highlight{axial=colorValue}. Any predefined color value is acceptable. +\item rotation: Define the rotation arc color. \Highlight{rotation=colorValue}. Any predefined color value is acceptable. +\item node: Define the nodal force/displacement color. \Highlight{node=colorValue}. Any predefined color value is acceptable. +\item fill: Define the fill patch color. \Highlight{fill=colorValue}. Any predefined color value is acceptable. +\item convention: Define the sign convention. Value \Highlight{convention=sign} draws all quantities along positive direction and indicate negative quantities with minus sign $-$. Value \Highlight{convention=direction} label all numbers as positive but draw the negative quantities along negative directions. +\end{enumerate} +Use following command to change option values. +\begin{Verbatim}[frame=single,label=Syntax] +\setstructmech{axial=red} +\end{Verbatim} +Some examples. +\begin{Verbatim}[frame=single,label=Example] +\setstructmech{axial=red} +\BasicForce{0,3}{3,3}{} +\setstructmech{axial=blue} +\BasicForce{0,2}{3,2}{} +\setstructmech{axial=black} +\BasicForce{0,1}{3,1}{} +\end{Verbatim} +\begin{figure}[H] +\centering +\begin{tikzpicture} +\setstructmech{axial=red} +\BasicForce{0,3}{3,3}{} +\setstructmech{axial=blue} +\BasicForce{0,2}{3,2}{} +\setstructmech{axial=black} +\BasicForce{0,1}{3,1}{} +\end{tikzpicture} +\end{figure} +\section{Nodal Forces/Displacements} +\begin{Verbatim}[frame=single,label=Syntax] +\NodalForce[1]{2}[3][4][5]{6}[7] +\end{Verbatim} +\begin{enumerate} +\item[1.][1] --- Color of arrows, optional. Any existing color value, either build-in (refer to \texttt{xcolor}) or user-defined color is acceptable. Default value is \Highlight{\texttt{CC0066}}. +\item[2.]\{2\} --- Node coordinates. Accept two coordinates of the target node in the form of \Highlight{$x,y$}. +\item[3.][3] --- Label for horizontal force/displacement, optional. If not assigned or left blank, only the arrow (without label) will be drew. Assign \Highlight{\texttt{N}} for drawing nothing along horizontal direction. +\item[4.][4] --- Label for vertical force/displacement, optional. If not assigned or left blank, only the arrow (without label) will be drew. Assign \Highlight{\texttt{N}} for drawing nothing along vertical direction. +\item[5.][5] --- Label for rotational force/displacement, optional. If not assigned or left blank, only the arrow (without label) will be drew. Assign \Highlight{\texttt{N}} for drawing nothing along rotational direction. +\item[6.]\{6\} --- Rotation angle, optional. Default value is \Highlight{$0$}. +\item[7.][7] --- Scale, optional. +\end{enumerate} +\begin{Verbatim}[frame=single,label=Example] +\NodalForce{0,0} +\NodalForce[red]{2,0} +\NodalForce[blue]{4,0}[][][] +\NodalForce{6,0}[N] +\NodalForce{8,0}[][N] +\NodalForce{10,0}[][][N] +\NodalForce{12,0}[N][] +\setstructmech{convention=direction} +\NodalForce{0,-3}[-V_1][-V_2][-V_3] +\setstructmech{convention=sign} +\NodalForce{2.5,-3}[-V_1][-V_2][-V_3] +\NodalForce{4.5,-3}[V_1][V_2][V_3]{60} +\NodalForce{7,-3}{150}[1.3] +\NodalForce{9,-3}[N][V_2]{90}[1.6] +\NodalForce[cyan]{12.5,-4}[V_1][V_2][V_3]{-60}[2] +\end{Verbatim} +\begin{figure}[H] +\centering +\begin{tikzpicture} +\NodalForce{0,0} +\NodalForce[red]{2,0} +\NodalForce[blue]{4,0}[][][] +\NodalForce{6,0}[N] +\NodalForce{8,0}[][N] +\NodalForce{10,0}[][][N] +\NodalForce{12,0}[N][] +\setstructmech{convention=direction} +\NodalForce{0,-3}[-V_1][-V_2][-V_3] +\setstructmech{convention=sign} +\NodalForce{2.5,-3}[-V_1][-V_2][-V_3] +\NodalForce{4.5,-3}[V_1][V_2][V_3]{60} +\NodalForce{7,-3}{150}[1.3] +\NodalForce{9,-3}[N][V_2]{90}[1.6] +\NodalForce[cyan]{12.5,-4}[V_1][V_2][V_3]{-60}[2] +\end{tikzpicture} +\end{figure} +\section{Member Forces/Displacements} +\begin{Verbatim}[frame=single,label=Syntax] +\BasicForce[1]{2}{3}{4}{5}[6][7][8] +\end{Verbatim} +\begin{enumerate} +\item[1.][1] --- The number of forces to draw, optional. \Highlight{\texttt{1}} for axial force only, \Highlight{\texttt{2L}} for lower end bending moment only, \Highlight{\texttt{2H}} for high end bending moment only, \Highlight{\texttt{2}} for both two end moments, \Highlight{\texttt{3}} for all three force components. Default value is \Highlight{\texttt{3}}. +\item[2.]\{2\} --- The coordinate for the lower end in the form of \Highlight{$x,y$}. +\item[3.]\{3\} --- The coordinate for the high end in the form of \Highlight{$x,y$}. +\item[4.]\{4\} --- Label for the member, leave blank if not required. +\item[5.]\{5\} --- Further adjustment of the member label, optional, parameters used for TikZ positioning are acceptable, such as \Highlight{\texttt{right=2mm}} or \Highlight{\texttt{anchor=north}}. The default value is \Highlight{\texttt{above=2mm}}, leave blank if not required. +\item[6.][6] --- Label for first force drew. Available for all four values for \Highlight{\texttt{\#1}}, leave blank if not required. +\item[7.][7] --- Label for second force drew. Available for \Highlight{\texttt{\#1=2}}, leave blank if not required. +\item[8.][8] --- Label for third force drew. Available for \Highlight{\texttt{\#1=3}}, leave blank if not required. +\item[9.]Note the color is configured in the package option. +\end{enumerate} +\begin{Verbatim}[frame=single,label=Example] +\BasicForce{0,0}{3,0}{} +\BasicForce[1]{0,2}{3,2}{} +\BasicForce[2]{0,4}{3,4}{} +\BasicForce[3]{0,6}{3,6}{} +\BasicForce[2L]{0,8}{3,8}{} +\BasicForce[2H]{0,10}{3,10}{} +\BasicForce[1]{5,0}{8,0}{a}[U_1] +\BasicForce[2]{5,2}{8,2}{a}[U_1][U_2] +\BasicForce[2L]{5,4}{8,4}{a}[U_1] +\BasicForce[2H]{5,6}{8,6}{a}[U_1] +\BasicForce{5,8}{8,8}{a}[U_1][U_2][U_3] +\BasicForce{5,10}{8,10}{a}{above left=2mm and 6mm,0066CC}[U_1][U_2][U_3] +\setstructmech{convention=direction} +\BasicForce[3]{0,12}{3,12}{a}[-U_1][-U_2][-U_3] +\BasicForce[3]{5,12}{8,12}{a}[U_1][U_2][-U_3] +\setstructmech{convention=sign} +\end{Verbatim} +\begin{figure}[H] +\centering +\begin{tikzpicture} +\draw[dashed](-1,1)--(9,1)(-1,3)--(9,3)(-1,5)--(9,5)(-1,7)--(9,7)(-1,9)--(9,9)(-1,11)--(9,11); +\draw[line width=.6mm](-1,0)--(9,0)(-1,2)--(9,2)(-1,4)--(9,4)(-1,6)--(9,6)(-1,8)--(9,8)(-1,10)--(9,10)(-1,12)--(9,12); +\BasicForce{0,0}{3,0}{} +\BasicForce[1]{0,2}{3,2}{} +\BasicForce[2]{0,4}{3,4}{} +\BasicForce[3]{0,6}{3,6}{} +\BasicForce[2L]{0,8}{3,8}{} +\BasicForce[2H]{0,10}{3,10}{} +\BasicForce[1]{5,0}{8,0}{a}[U_1] +\BasicForce[2]{5,2}{8,2}{a}[U_1][U_2] +\BasicForce[2L]{5,4}{8,4}{a}[U_1] +\BasicForce[2H]{5,6}{8,6}{a}[U_1] +\BasicForce{5,8}{8,8}{a}[U_1][U_2][U_3] +\BasicForce{5,10}{8,10}{a}{above left=2mm and 6mm,0066CC}[U_1][U_2][U_3] +\setstructmech{convention=direction} +\BasicForce[3]{0,12}{3,12}{a}[-U_1][-U_2][-U_3] +\BasicForce[3]{5,12}{8,12}{a}[U_1][U_2][-U_3] +\setstructmech{convention=sign} +\end{tikzpicture} +\end{figure} +\section{UDL} +\begin{Verbatim}[frame=single,label=Syntax] +\UDL[1]{2}{3}[4]{5} +\end{Verbatim} +\begin{enumerate} +\item[1.][1] --- Flip the side \Highlight{F}, optional. +\item[2.]\{2\} --- Coordinate for lower end node, in form of \Highlight{$x,y$}. +\item[3.]\{3\} --- Coordinate for higher end node, in form of \Highlight{$x,y$}. +\item[4.][4] --- Label, optional. +\item[5.]\{5\} --- Scale, optional. +\end{enumerate} +\begin{Verbatim}[frame=single,label=Example] +\UDL{-4,0}{-1,4}[10] +\UDL{-2,0}{1,4}[-10] +\setstructmech{fill=CC6600,convention=direction} +\UDL{0,0}{3,4}[-10] +\setstructmech{fill=CC0066,convention=sign} +\UDL[F]{2,0}{5,4} +\UDL{5,0}{8,4}[20] +\UDL{8,0}{11,4}{2} +\end{Verbatim} +\begin{figure}[H] +\centering +\begin{tikzpicture} +\UDL{-4,0}{-1,4}[10] +\UDL{-2,0}{1,4}[-10] +\setstructmech{fill=CC6600,convention=direction} +\UDL{0,0}{3,4}[-10] +\setstructmech{fill=CC0066,convention=sign} +\UDL[F]{2,0}{5,4} +\UDL{5,0}{8,4}[20] +\UDL{8,0}{11,4}{2} +\end{tikzpicture} +\end{figure} +\section{Supports} +\subsection{Hinge Support} +\begin{Verbatim}[frame=single,label=Syntax] +\HingeSupport[1]{2}{3} +\end{Verbatim} +\begin{enumerate} +\item[1.][1] --- Rotation angle, optional. +\item[2.]\{2\} --- Node coordinate, in form of \Highlight{$x,y$}. +\item[3.]\{3\} --- Scale, optional. +\end{enumerate} +\begin{Verbatim}[frame=single,label=Example] +\HingeSupport{0,0} +\HingeSupport[75]{2,0}{1.5} +\HingeSupport[150]{2,2}{2} +\HingeSupport[225]{0,2}{2.5} +\end{Verbatim} +\begin{figure}[H] +\centering +\begin{tikzpicture} +\HingeSupport{0,0} +\HingeSupport[75]{2,0}{1.5} +\HingeSupport[150]{2,2}{2} +\HingeSupport[225]{0,2}{2.5} +\draw + (0,0)node[draw,circle,fill=white,inner sep=0,minimum size=2mm]{}-- + (2,0)node[draw,circle,fill=white,inner sep=0,minimum size=2mm]{}-- + (2,2)node[draw,circle,fill=white,inner sep=0,minimum size=2mm]{}-- + (0,2)node[draw,circle,fill=white,inner sep=0,minimum size=2mm]{}--cycle; +\end{tikzpicture} +\end{figure} +\subsection{Fixed Support} +\begin{Verbatim}[frame=single,label=Syntax] +\FixedSupport[1]{2}{3} +\end{Verbatim} +\begin{enumerate} +\item[1.][1] --- Rotation angle, optional. +\item[2.]\{2\} --- Node coordinate, in form of \Highlight{$x,y$}. +\item[3.]\{3\} --- Scale, optional. +\end{enumerate} +\begin{Verbatim}[frame=single,label=Example] +\FixedSupport{0,0} +\FixedSupport[75]{2,0}{1.5} +\FixedSupport[150]{2,2}{2} +\FixedSupport[225]{0,2}{2.5} +\end{Verbatim} +\begin{figure}[H] +\centering +\begin{tikzpicture} +\FixedSupport{0,0} +\FixedSupport[75]{2,0}{1.5} +\FixedSupport[150]{2,2}{2} +\FixedSupport[225]{0,2}{2.5} +\draw + (0,0)node[draw,fill=white,inner sep=0,minimum size=3mm]{}-- + (2,0)node[draw,fill=white,inner sep=0,minimum size=3mm]{}-- + (2,2)node[draw,fill=white,inner sep=0,minimum size=3mm]{}-- + (0,2)node[draw,fill=white,inner sep=0,minimum size=3mm]{}--cycle; +\end{tikzpicture} +\end{figure} +\subsection{Roller Support} +\begin{Verbatim}[frame=single,label=Syntax] +\RollerSupport[1]{2}{3} +\end{Verbatim} +\begin{enumerate} +\item[1.][1] --- Rotation angle, optional. +\item[2.]\{2\} --- Node coordinate, in form of \Highlight{$x,y$}. +\item[3.]\{3\} --- Scale, optional. +\end{enumerate} +\begin{Verbatim}[frame=single,label=Example] +\RollerSupport{0,0} +\RollerSupport[75]{2,0}{1.5} +\RollerSupport[150]{2,2}{2} +\RollerSupport[225]{0,2}{2.5} +\end{Verbatim} +\begin{figure}[H] +\centering +\begin{tikzpicture} +\RollerSupport{0,0} +\RollerSupport[75]{2,0}{1.5} +\RollerSupport[150]{2,2}{2} +\RollerSupport[225]{0,2}{2.5} +\draw + (0,0)node[draw,fill=white,circle,inner sep=0,minimum size=2mm]{}-- + (2,0)node[draw,fill=white,circle,inner sep=0,minimum size=2mm]{}-- + (2,2)node[draw,fill=white,circle,inner sep=0,minimum size=2mm]{}-- + (0,2)node[draw,fill=white,circle,inner sep=0,minimum size=2mm]{}--cycle; +\end{tikzpicture} +\end{figure} +\subsection{Slider Support} +\begin{Verbatim}[frame=single,label=Syntax] +\SliderSupport[1]{2}{3} +\end{Verbatim} +\begin{enumerate} +\item[1.][1] --- Rotation angle, optional. +\item[2.]\{2\} --- Node coordinate, in form of \Highlight{$x,y$}. +\item[3.]\{3\} --- Scale, optional. +\end{enumerate} +\begin{Verbatim}[frame=single,label=Example] +\SliderSupport{0,0} +\SliderSupport[75]{2,0}{1.5} +\SliderSupport[150]{2,2}{2} +\SliderSupport[225]{0,2}{2.5} +\end{Verbatim} +\begin{figure}[H] +\centering +\begin{tikzpicture} +\SliderSupport{0,0} +\SliderSupport[75]{2,0}{1.5} +\SliderSupport[150]{2,2}{2} +\SliderSupport[225]{0,2}{2.5} +\draw + (0,0)node[draw,fill=white,inner sep=0,minimum size=3mm]{}-- + (2,0)node[draw,fill=white,inner sep=0,minimum size=3mm]{}-- + (2,2)node[draw,fill=white,inner sep=0,minimum size=3mm]{}-- + (0,2)node[draw,fill=white,inner sep=0,minimum size=3mm]{}--cycle; +\end{tikzpicture} +\end{figure} +\subsection{Sleeve Support} +\begin{Verbatim}[frame=single,label=Syntax] +\SleeveSupport[1]{2}[3]{4} +\end{Verbatim} +\begin{enumerate} +\item[1.][1] --- Rotation angle, optional. +\item[2.]\{2\} --- Node coordinate, in form of \Highlight{$x,y$}. +\item[3.][3] --- Gap width, optional. +\item[4.]\{4\} --- Scale, optional. +\end{enumerate} +\begin{Verbatim}[frame=single,label=Example] +\SleeveSupport{0,0} +\SleeveSupport[75]{2,0}{1.5} +\SleeveSupport[150]{2,2}{2} +\SleeveSupport[225]{0,2}[.12]{2.5} +\end{Verbatim} +\begin{figure}[H] +\centering +\begin{tikzpicture} +\SleeveSupport{0,0} +\SleeveSupport[90]{2,0}{1.5} +\SleeveSupport[180]{2,2}{2} +\SleeveSupport[270]{0,2}[.12]{2.5} +\draw + (0,0)node[draw,fill=white,inner sep=0,minimum size=3mm]{}-- + (2,0)node[draw,fill=white,inner sep=0,minimum size=3mm]{}-- + (2,2)node[draw,fill=white,inner sep=0,minimum size=3mm]{}-- + (0,2)node[draw,fill=white,inner sep=0,minimum size=3mm]{}--cycle; +\end{tikzpicture} +\end{figure} +\subsection{Rigid Constraint} +\begin{Verbatim}[frame=single,label=Syntax] +\Rigid[1]{2}{3} +\end{Verbatim} +\begin{enumerate} +\item[1.][1] --- Rotation angle, optional. +\item[2.]\{2\} --- Node coordinate, in form of \Highlight{$x,y$}. +\item[3.]\{3\} --- Scale, optional. +\end{enumerate} +\begin{Verbatim}[frame=single,label=Example] +\Rigid{0,0} +\Rigid[-90]{2,0}{1.5} +\Rigid[0]{2,2}{2} +\Rigid[90]{0,2}{2.5} +\end{Verbatim} +\begin{figure}[H] +\centering +\begin{tikzpicture} +\Rigid{0,0} +\Rigid[-90]{2,0}{1.5} +\Rigid[0]{2,2}{2} +\Rigid[90]{0,2}{2.5} +\draw + (0,0)node[draw,fill=white,inner sep=0,minimum size=2mm]{}-- + (2,0)node[draw,fill=white,inner sep=0,minimum size=2mm]{}-- + (2,2)node[draw,fill=white,inner sep=0,minimum size=2mm]{}-- + (0,2)node[draw,fill=white,inner sep=0,minimum size=2mm]{}--cycle; +\end{tikzpicture} +\end{figure} +\section{Coordinate System Frame} +\begin{Verbatim}[frame=single,label=Syntax] +\CoorOrigin[1]{2}{3} +\end{Verbatim} +\begin{enumerate} +\item[1.][1] --- Rotation angle, optional. +\item[2.]\{2\} --- Node coordinate, in form of \Highlight{$x,y$}. +\item[3.]\{3\} --- Scale, optional. +\end{enumerate} +\begin{Verbatim}[frame=single,label=Example] +\CoorOrigin{0,0} +\CoorOrigin[75]{4,0}{1.5} +\CoorOrigin[150]{8,0}{2} +\CoorOrigin[225]{12,0}{2.5} +\end{Verbatim} +\begin{figure}[H] +\centering +\begin{tikzpicture} +\CoorOrigin{0,0} +\CoorOrigin[75]{4,0}{1.5} +\CoorOrigin[150]{8,0}{2} +\CoorOrigin[225]{12,0}{2.5} +\end{tikzpicture} +\end{figure} +\section{Internal Force Diagram} +\subsection{Linear Internal Force} +\begin{Verbatim}[frame=single,label=Syntax] +\IForceA[1]{2}{3}{4}{5}{6} +\end{Verbatim} +\begin{enumerate} +\item[1.][1] --- Fill color, optional +\item[2.]\{2\} --- Node coordinate of lower end, in form of \Highlight{$x,y$}. +\item[3.]\{3\} --- Node coordinate of higher end, in form of \Highlight{$x,y$}. +\item[4.]\{4\} --- Bending moment value of lower end, can be negative. +\item[5.]\{5\} --- Bending moment value of higher end, can be negative. +\item[6.]\{6\} --- Scale, optional. +\end{enumerate} +Caveat: it shall be noted that all internal forces follow the sign convention that is adopted in finite element method, instead of the one used in material mechanics. All quantities are defined in the local coordinate system, and the anticlockwise moment is taken as positive value. +\begin{Verbatim}[frame=single,label=Example] +\IForceA{0,0}{0,4}{1}{-2}{0.5} +\IForceA[blue]{0,4}{4,4}{2}{-0.5}{0.5} +\IForceA{4,4}{4,0}{0.5}{1}{0.5} +\IForceA[cyan]{4,0}{0,0}{-1}{-1}{0.5} +\end{Verbatim} +\begin{figure}[H] +\centering +\begin{tikzpicture} +\draw[line width=.4mm](0,0)rectangle(4,4); +\IForceA{0,0}{0,4}{1}{-2}{0.5} +\IForceA[blue]{0,4}{4,4}{2}{-0.5}{0.5} +\IForceA{4,4}{4,0}{0.5}{1}{0.5} +\IForceA[cyan]{4,0}{0,0}{-1}{-1}{0.5} +\end{tikzpicture} +\end{figure} +\subsection{Parabolic Internal Force} +\begin{Verbatim}[frame=single,label=Syntax] +\IForceB[1]{2}{3}{4}{5}{6}{7} +\end{Verbatim} +\begin{enumerate} +\item[1.][1] --- Fill color, optional +\item[2.]\{2\} --- Node coordinate of the lower end, in form of \Highlight{$x,y$}. +\item[3.]\{3\} --- Node coordinate of the higher end, in form of \Highlight{$x,y$}. +\item[4.]\{4\} --- Bending moment value of the lower end, can be negative. +\item[5.]\{5\} --- Bending moment value of the higher end, can be negative. +\item[6.]\{6\} --- The difference of the moment value of the centre point. +\item[7.]\{7\} --- Scale, optional. +\end{enumerate} +It should be noted that parameter \Highlight{\#6} defines the difference of the true moment value and the corresponding value of an assumed linear distribution. The positive value indicates that the parabola bends towards the local positive direction. Since this command draws a parabola, the load should be a uniformly distributed load. So this value \Highlight{\#6} is $\pm\dfrac{wl^2}{8}$, the sign depends on the direction of the UDL. +\begin{Verbatim}[frame=single,label=Example] +\IForceB{0,0}{0,4}{1}{-2}{1}{0.5} +\IForceB{0,4}{4,4}{-1}{1}{2}{0.5} +\IForceB{4,4}{4,0}{0.5}{1}{0}{0.5} +\IForceB[cyan]{4,0}{0,0}{1.5}{0}{2}{0.5} +\end{Verbatim} +\begin{figure}[H] +\centering +\begin{tikzpicture} +\draw[line width=.4mm](0,0)rectangle(4,4); +\IForceB{0,0}{0,4}{1}{-2}{1}{0.5} +\IForceB{0,4}{4,4}{-1}{1}{2}{0.5} +\IForceB{4,4}{4,0}{0.5}{1}{0}{0.5} +\IForceB[cyan]{4,0}{0,0}{1.5}{0}{2}{0.5} +\end{tikzpicture} +\end{figure} +\section{Beam Deformation (Perpendicular)} +\begin{Verbatim}[frame=single,label=Syntax] +\BeamDeformP[1]{2}{3}{4}[5]{6}[7]{8} +\end{Verbatim} +\begin{enumerate} +\item[1.][1] --- Line color, optional +\item[2.]\{2\} --- Node coordinate of the lower end, in form of \Highlight{$x,y$}. +\item[3.]\{3\} --- Node coordinate of the higher end, in form of \Highlight{$x,y$}. +\item[4.]\{4\} --- Perpendicular displacement of the lower end, can be negative, leave zero if not required. +\item[5.][5] --- Rotation value of the lower end, can be negative, optional. +\item[6.]\{6\} --- Perpendicular displacement of the high end, can be negative, leave zero if not required. +\item[7.][7] --- Rotation value of the high end, can be negative, optional. +\item[8.]\{8\} --- Scale, optional. +\end{enumerate} +This command draws deformation based on local coordinate system. The translations are perpendicular to the member cord. +\begin{Verbatim}[frame=single,label=Example] +\BeamDeformP{0,0}{0,4}{.5}{-1} +\BeamDeformP[blue]{0,4}{4,4}{0}[30]{0}[50]{1} +\BeamDeformP[red]{4,4}{4,0}{.5}[30]{0}[50]{2} +\end{Verbatim} +\begin{figure}[H] +\centering +\begin{tikzpicture} +\draw[line width=.4mm](0,0)rectangle(4,4); +\BeamDeformP{0,0}{0,4}{.5}{-1} +\BeamDeformP[blue]{0,4}{4,4}{0}[30]{0}[50]{1} +\BeamDeformP[red]{4,4}{4,0}{.5}[30]{0}[50]{2} +\end{tikzpicture} +\end{figure} +\section{Beam Deformation (Rotation Only)} +\begin{Verbatim}[frame=single,label=Syntax] +\BeamDeformR[1]{2}{3}[4][5]{6} +\end{Verbatim} +\begin{enumerate} +\item[1.][1] --- Line color, optional +\item[2.]\{2\} --- Node coordinate of the lower end, in form of \Highlight{$x,y$}. +\item[3.]\{3\} --- Node coordinate of the higher end, in form of \Highlight{$x,y$}. +\item[4.][4] --- Rotation value of the lower end, can be negative, optional. +\item[5.][5] --- Rotation value of the high end, can be negative, optional. +\item[6.]\{6\} --- Scale, optional. +\end{enumerate} +Caveat: if the nodal translations are expressed as global values, they can be readily combined into parameters \Highlight{\#2} and \Highlight{\#3}, so there is no need to provide another command to plot the deformation in the global coordinate system. +\begin{Verbatim}[frame=single,label=Example] +\BeamDeformR{0,0}{0,4}[20][30] +\BeamDeformR[blue]{0,4}{4,4}[20][30]{2} +\end{Verbatim} +\begin{figure}[H] +\centering +\begin{tikzpicture} +\draw[line width=.4mm](0,0)rectangle(4,4); +\BeamDeformR{0,0}{0,4}[20][30] +\BeamDeformR[blue]{0,4}{4,4}[20][30]{2} +\end{tikzpicture} +\end{figure} +\section{Implementation} +\lstinputlisting[language=tex]{structmech.sty} +\end{document}
\ No newline at end of file diff --git a/Master/texmf-dist/doc/latex/structmech/tex/structmech.sty b/Master/texmf-dist/doc/latex/structmech/tex/structmech.sty new file mode 100644 index 00000000000..21dd1f60495 --- /dev/null +++ b/Master/texmf-dist/doc/latex/structmech/tex/structmech.sty @@ -0,0 +1,416 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Copyright (C) 2018 Theodore Chang +%% +%% This program is free software: you can redistribute it and/or modify +%% it under the terms of the GNU General Public License as published by +%% the Free Software Foundation, either version 3 of the License, or +%% (at your option) any later version. +%% +%% This program is distributed in the hope that it will be useful, +%% but WITHOUT ANY WARRANTY; without even the implied warranty of +%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +%% GNU General Public License for more details. +%% +%% You should have received a copy of the GNU General Public License +%% along with this program. If not, see <http://www.gnu.org/licenses/>. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% structmech: A TikZ command set for structural mechanics drawings +% v0.1 by tlc +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{structmech}[2018/04/07 structmech: A TikZ command set for structural mechanics drawings] +\RequirePackage{tikz} +\RequirePackage{tikz-3dplot} +\RequirePackage{ifthen} +\RequirePackage{xparse} +\RequirePackage{xstring} +\RequirePackage{kvoptions} +\RequirePackage{xkeyval} +\usetikzlibrary{backgrounds,calc,positioning,arrows.meta,decorations.pathreplacing,decorations.pathmorphing,shapes.arrows} +\definecolor{0066CC}{RGB}{0,102,204} +\definecolor{00CC66}{RGB}{0,204,102} +\definecolor{CC0066}{RGB}{204,0,102} +\definecolor{CC6600}{RGB}{204,102,0} +\DeclareOptionX<structmech>{axial}[CC0066]{\def\axialColor{#1}} +\DeclareOptionX<structmech>{rotation}[00CC66]{\def\rotColor{#1}} +\DeclareOptionX<structmech>{node}[0066CC]{\def\nodalColor{#1}} +\DeclareOptionX<structmech>{fill}[CC0066]{\def\fillColor{#1}} +\DeclareOptionX<structmech>{convention}[sign]{\IfStrEq{#1}{sign}{\def\convention{#1}}{}\IfStrEq{#1}{direction}{\def\convention{#1}}{}} +\ExecuteOptionsX<structmech>{axial,rotation,node,convention,fill} +\ProcessOptionsX<structmech> +\tikzset{ + BMD/.style={draw=0066CC,fill=0066CC,fill opacity=.4}, + NOFILL/.style={fill=none,fill opacity=1}, +RotBasic/.style={\rotColor,line width=.4mm,->}, + FIXED/.style={postaction={draw,decorate,decoration={border,pre length=1mm,post length=1mm,angle=-60,amplitude=1mm,segment length=1mm}}} +} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Command Zero: Set options. +% \setstructmech{1} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\NewDocumentCommand{\setstructmech}{m}{\ExecuteOptionsX<structmech>{#1}} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Command 1: Label All Nodal Forces. +% \NodalForce[1]{2}[3][4][5]{6}[7] +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\NewDocumentCommand{\NodalForce}{O{\nodalColor} m O{} O{} O{} G{0} O{1}}{ +\begin{scope}[rotate around={#6:(#2)},shift={(#2)},scale=#7] +\IfEq{#3}{} + {\draw[#1,line width=.4mm,->](-1,0)--(-.2,0);} + {\IfEq{#3}{N} + {} + {\IfStrEq{\convention}{sign} + {\draw[#1,line width=.4mm,->](-1,0)--(-.2,0);\node[fill=none,#1]at(-1.4,0){\footnotesize$#3$};} + {\StrLeft{#3}{1}[\SS]\IfStrEq{\SS}{-} + {\draw[#1,line width=.4mm,->](-.2,0)--(-1,0);\node[fill=none,#1]at(-1.4,0){\footnotesize$\StrDel[1]{#3}{-}$};} + {\draw[#1,line width=.4mm,->](-1,0)--(-.2,0);\node[fill=none,#1]at(-1.4,0){\footnotesize$#3$};} + } + } + } +\IfEq{#4}{} + {\draw[#1,line width=.4mm,->](0,-1)--(0,-.2);} + {\IfEq{#4}{N} + {} + {\IfStrEq{\convention}{sign} + {\draw[#1,line width=.4mm,->](0,-1)--(0,-.2);\node[fill=none,#1]at(0,-1.4){\footnotesize$#4$};} + {\StrLeft{#4}{1}[\SS]\IfStrEq{\SS}{-} + {\draw[#1,line width=.4mm,->](0,-.2)--(0,-1);\node[fill=none,#1]at(0,-1.4){\footnotesize$\StrDel[1]{#4}{-}$};} + {\draw[#1,line width=.4mm,->](0,-1)--(0,-.2);\node[fill=none,#1]at(0,-1.4){\footnotesize$#4$};} + } + } + } +\IfEq{#5}{} + {\draw[#1,line width=.4mm,->](.2121,-.2121)arc[#1,start angle=-45,end angle=135,radius=3mm];} + {\IfEq{#5}{N} + {} + {\IfStrEq{\convention}{sign} + {\draw[#1,line width=.4mm,->](.2121,-.2121)arc[#1,start angle=-45,end angle=135,radius=3mm];\node[#1,fill=none]at(-.5303,.5303){\footnotesize$#5$};} + {\StrLeft{#5}{1}[\SS]\IfStrEq{\SS}{-} + {\draw[#1,line width=.4mm,<-](.2121,-.2121)arc[#1,start angle=-45,end angle=135,radius=3mm];\node[#1,fill=none]at(-.5303,.5303){\footnotesize$\StrDel[1]{#5}{-}$};} + {\draw[#1,line width=.4mm,->](.2121,-.2121)arc[#1,start angle=-45,end angle=135,radius=3mm];\node[#1,fill=none]at(-.5303,.5303){\footnotesize$#5$};} + } + } + } +\end{scope} +} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Command 2: Label Element Forces. +% \BasicForce[1]{2}{3}{4}{5}[6][7][8] +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\NewDocumentCommand{\BasicForce}{O{3} m m m G{above=2mm} o o o}{ +\coordinate(A)at(#2); +\coordinate(B)at(#3); +\pgfmathanglebetweenpoints{\pgfpointanchor{A}{center}}{\pgfpointanchor{B}{center}} +\let\Angle\pgfmathresult +\tikzset{ +EndRotA/.style={start angle=\Angle+90,end angle=\Angle+270,radius=3mm}, +EndRotB/.style={start angle=\Angle-90,end angle=\Angle+90,radius=3mm}, +EndRotC/.style={start angle=\Angle+270,end angle=\Angle+90,radius=3mm}, +EndRotD/.style={start angle=\Angle+90,end angle=\Angle-90,radius=3mm}, +} +\IfEq{#1}{1} + { + \IfNoValueTF{#6} + {\draw[\axialColor,line width=.4mm,<->](#2)--(#3)node[midway,fill=none,#5]{$#4$};} + {\IfStrEq{\convention}{sign} + {\draw[\axialColor,line width=.4mm,<->](#2)--(#3)node[midway,fill=none,#5]{$#4$}node[midway,fill=white]{\footnotesize$#6$};} + {\StrLeft{#6}{1}[\SS]\IfStrEq{\SS}{-} + {\draw[\axialColor,line width=.4mm,>-<](#2)--(#3)node[midway,fill=none,#5]{$#4$}node[midway,fill=white]{\footnotesize$\StrDel[1]{#6}{-}$};} + {\draw[\axialColor,line width=.4mm,<->](#2)--(#3)node[midway,fill=none,#5]{$#4$}node[midway,fill=white]{\footnotesize$#6$};} + } + } + } + {} +\IfEq{#1}{2L} + { + \draw[\axialColor,draw=none](#2)--(#3)node[midway,fill=none,#5]{$#4$}; + \IfNoValueTF{#6} + {\draw[RotBasic]($(#2)+(\Angle+90:.3)$)arc[EndRotA];} + {\IfStrEq{\convention}{sign} + {\node[fill=none,\rotColor]at($(#2)+(\Angle+90:.6)$){\footnotesize$#6$};\draw[RotBasic]($(#2)+(\Angle+90:.3)$)arc[EndRotA];} + {\StrLeft{#6}{1}[\SS]\IfStrEq{\SS}{-} + {\node[fill=none,\rotColor]at($(#2)+(\Angle-90:.6)$){\footnotesize$\StrDel[1]{#6}{-}$};\draw[RotBasic]($(#2)+(\Angle-90:.3)$)arc[EndRotC];} + {\node[fill=none,\rotColor]at($(#2)+(\Angle+90:.6)$){\footnotesize$#6$};\draw[RotBasic]($(#2)+(\Angle+90:.3)$)arc[EndRotA];} + } + } + } + {} +\IfEq{#1}{2H} + { + \draw[\axialColor,draw=none](#2)--(#3)node[midway,fill=none,#5]{$#4$}; + \IfNoValueTF{#6} + {\draw[RotBasic]($(#3)+(\Angle-90:.3)$)arc[EndRotB];} + {\IfStrEq{\convention}{sign} + {\node[fill=none,\rotColor]at($(#3)+(\Angle-90:.6)$){\footnotesize$#6$};\draw[RotBasic]($(#3)+(\Angle-90:.3)$)arc[EndRotB];} + {\StrLeft{#6}{1}[\SS]\IfStrEq{\SS}{-} + {\node[fill=none,\rotColor]at($(#3)+(\Angle+90:.6)$){\footnotesize$\StrDel[1]{#6}{-}$};\draw[RotBasic]($(#3)+(\Angle+90:.3)$)arc[EndRotD];} + {\node[fill=none,\rotColor]at($(#3)+(\Angle-90:.6)$){\footnotesize$#6$};\draw[RotBasic]($(#3)+(\Angle-90:.3)$)arc[EndRotB];} + } + } + } + {} +\IfEq{#1}{2} + { + \draw[\axialColor,draw=none](#2)--(#3)node[midway,fill=none,#5]{$#4$}; + \IfNoValueTF{#6} + {\draw[RotBasic]($(#2)+(\Angle+90:.3)$)arc[EndRotA];} + {\IfStrEq{\convention}{sign} + {\node[fill=none,\rotColor]at($(#2)+(\Angle+90:.6)$){\footnotesize$#6$};\draw[RotBasic]($(#2)+(\Angle+90:.3)$)arc[EndRotA];} + {\StrLeft{#6}{1}[\SS]\IfStrEq{\SS}{-} + {\node[fill=none,\rotColor]at($(#2)+(\Angle-90:.6)$){\footnotesize$\StrDel[1]{#6}{-}$};\draw[RotBasic]($(#2)+(\Angle-90:.3)$)arc[EndRotC];} + {\node[fill=none,\rotColor]at($(#2)+(\Angle+90:.6)$){\footnotesize$#6$};\draw[RotBasic]($(#2)+(\Angle+90:.3)$)arc[EndRotA];} + } + } + \IfNoValueTF{#7} + {\draw[RotBasic]($(#3)+(\Angle-90:.3)$)arc[EndRotB];} + {\IfStrEq{\convention}{sign} + {\node[fill=none,\rotColor]at($(#3)+(\Angle-90:.6)$){\footnotesize$#7$};\draw[RotBasic]($(#3)+(\Angle-90:.3)$)arc[EndRotB];} + {\StrLeft{#7}{1}[\SS]\IfStrEq{\SS}{-} + {\node[fill=none,\rotColor]at($(#3)+(\Angle+90:.6)$){\footnotesize$\StrDel[1]{#7}{-}$};\draw[RotBasic]($(#3)+(\Angle+90:.3)$)arc[EndRotD];} + {\node[fill=none,\rotColor]at($(#3)+(\Angle-90:.6)$){\footnotesize$#7$};\draw[RotBasic]($(#3)+(\Angle-90:.3)$)arc[EndRotB];} + } + } + } + {} +\IfEq{#1}{3} + { + \IfNoValueTF{#6} + {\draw[\axialColor,line width=.4mm,<->](#2)--(#3)node[midway,fill=none,#5]{$#4$};} + {\IfStrEq{\convention}{sign} + {\draw[\axialColor,line width=.4mm,<->](#2)--(#3)node[midway,fill=none,#5]{$#4$}node[midway,fill=white]{\footnotesize$#6$};} + {\StrLeft{#6}{1}[\SS]\IfStrEq{\SS}{-} + {\draw[\axialColor,line width=.4mm,>-<](#2)--(#3)node[midway,fill=none,#5]{$#4$}node[midway,fill=white]{\footnotesize$\StrDel[1]{#6}{-}$};} + {\draw[\axialColor,line width=.4mm,<->](#2)--(#3)node[midway,fill=none,#5]{$#4$}node[midway,fill=white]{\footnotesize$#6$};} + } + } + \IfNoValueTF{#7} + {\draw[RotBasic]($(#2)+(\Angle+90:.3)$)arc[EndRotA];} + {\IfStrEq{\convention}{sign} + {\node[fill=none,\rotColor]at($(#2)+(\Angle+90:.6)$){\footnotesize$#7$};\draw[RotBasic]($(#2)+(\Angle+90:.3)$)arc[EndRotA];} + {\StrLeft{#7}{1}[\SS]\IfStrEq{\SS}{-} + {\node[fill=none,\rotColor]at($(#2)+(\Angle-90:.6)$){\footnotesize$\StrDel[1]{#7}{-}$};\draw[RotBasic]($(#2)+(\Angle-90:.3)$)arc[EndRotC];} + {\node[fill=none,\rotColor]at($(#2)+(\Angle+90:.6)$){\footnotesize$#7$};\draw[RotBasic]($(#2)+(\Angle+90:.3)$)arc[EndRotA];} + } + } + \IfNoValueTF{#8} + {\draw[RotBasic]($(#3)+(\Angle-90:.3)$)arc[EndRotB];} + {\IfStrEq{\convention}{sign} + {\node[fill=none,\rotColor]at($(#3)+(\Angle-90:.6)$){\footnotesize$#8$};\draw[RotBasic]($(#3)+(\Angle-90:.3)$)arc[EndRotB];} + {\StrLeft{#8}{1}[\SS]\IfStrEq{\SS}{-} + {\node[fill=none,\rotColor]at($(#3)+(\Angle+90:.6)$){\footnotesize$\StrDel[1]{#8}{-}$};\draw[RotBasic]($(#3)+(\Angle+90:.3)$)arc[EndRotD];} + {\node[fill=none,\rotColor]at($(#3)+(\Angle-90:.6)$){\footnotesize$#8$};\draw[RotBasic]($(#3)+(\Angle-90:.3)$)arc[EndRotB];} + } + } + } + {} +} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Command 3: Hinge support +% \HingeSupport[1]{2}{3} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\NewDocumentCommand{\HingeSupport}{O{0} m G{1}}{ +\begin{scope}[rotate around={#1:(#2)},shift={(#2)},scale=#3] +\draw[line width=.2mm](0,0)--++(-.25,-.4)--++(.5,0)--cycle; +\draw[line width=.2mm,FIXED](-.4,-.4)--++(.8,0); +\end{scope} +} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Command 4: UDL +% \UDL[1]{2}{3}[4]{5} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\makeatletter +\NewDocumentCommand{\UDL}{O{N} m m O{} G{1}}{ +\IfEq{#1}{F}{\def\FAC{-1}}{\def\FAC{1}} +\coordinate(A)at(#2); +\coordinate(B)at(#3); +\pgfmathanglebetweenpoints{\pgfpointanchor{A}{center}}{\pgfpointanchor{B}{center}} +\let\Angle\pgfmathresult +\pgfpointdiff{\pgfpointanchor{A}{center}}{\pgfpointanchor{B}{center}} +\pgfmathparse{veclen(\pgf@x,\pgf@y)/28.45274} +\let\Length\pgfmathresult +\draw[\fillColor,fill=\fillColor,fill opacity=.4](#2)--(#3)--($(#3)+(\Angle+\FAC*90:\Length/10*#5)$)--($(#2)+(\Angle+\FAC*90:\Length/10*#5)$)--cycle; +\IfNoValueTF{#4} + {} + {\IfStrEq{\convention}{sign} + {\node[NOFILL]at($(#2)!.5!(#3)+(\Angle+\FAC*90:\Length/5*#5)$)[rotate=\Angle]{$#4$};} + {\StrLeft{#4}{1}[\SS]\IfStrEq{\SS}{-} + {\node[NOFILL]at($(#2)!.5!(#3)+(\Angle+\FAC*90:\Length/5*#5)$)[rotate=\Angle]{$\StrDel[1]{#4}{-}$};} + {\node[NOFILL]at($(#2)!.5!(#3)+(\Angle+\FAC*90:\Length/5*#5)$)[rotate=\Angle]{$#4$};} + } + } +\foreach\x in{0,.1,.2,...,1}{ +\coordinate(C)at($(#2)!\x!(#3)$); +\IfNoValueTF{#4} + {\draw[<-](C)--++($(\Angle+\FAC*90:\Length/10*#5)$);} + {\IfStrEq{\convention}{sign} + {\draw[<-](C)--++($(\Angle+\FAC*90:\Length/10*#5)$);} + {\StrLeft{#4}{1}[\SS]\IfStrEq{\SS}{-} + {\draw[->](C)--++($(\Angle+\FAC*90:\Length/10*#5)$);} + {\draw[<-](C)--++($(\Angle+\FAC*90:\Length/10*#5)$);} + } + } +}; +} +\makeatother +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Command 5: Fixed support +% \FixedSupport[1]{2}{3} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\NewDocumentCommand{\FixedSupport}{O{0} m G{1}}{ +\begin{scope}[rotate around={#1:(#2)},shift={(#2)},scale=#3] +\draw[line width=.2mm,FIXED](-.4,0)--++(.8,0); +\end{scope} +} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Command 6: Roller support +% \RollerSupport[1]{2}{3} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\NewDocumentCommand{\RollerSupport}{O{0} m G{1}}{ +\begin{scope}[rotate around={#1:(#2)},shift={(#2)},scale=#3] +\draw[line width=.2mm] + (0,0)--++(-.25,-.3)--++(.5,0)--cycle + (-.15,-.35)circle(.05) + (+.15,-.35)circle(.05); +\draw[line width=.2mm,FIXED] + (-.4,-.4)--++(.8,0); +\end{scope} +} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Command 7: Slider support +% \SliderSupport[1]{2}{3} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\NewDocumentCommand{\SliderSupport}{O{0} m G{1}}{ +\begin{scope}[rotate around={#1:(#2)},shift={(#2)},scale=#3] +\draw[line width=.2mm] + (-.25,-.1/#3)--++(.5,0) + (-.15,-.14/#3)--++(0,-.22) + (+.15,-.14/#3)--++(0,-.22); +\draw[line width=.2mm,fill=white] + (-.15,-.14/#3)circle(.04)++(0,-.22)circle(.04) + (+.15,-.14/#3)circle(.04)++(0,-.22)circle(.04); +\draw[line width=.2mm,FIXED] + (-.4,-.14/#3-.26)--++(.8,0); +\end{scope} +} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Command 8: Sleeve support +% \SleeveSupport[1]{2}{3} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\NewDocumentCommand{\SleeveSupport}{O{0} m O{.4} G{1}}{ +\begin{scope}[rotate around={#1:(#2)},shift={(#2)},scale=#4] +\draw[line width=.2mm,FIXED](#3/2,-.4)--++(0,.8); +\draw[line width=.2mm,FIXED](-#3/2,.4)--++(0,-.8); +\end{scope} +} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Command 9: Coordinate system frame +% \CoorOrigin[1]{2}{3} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\NewDocumentCommand{\CoorOrigin}{O{0} m G{1}}{ +\begin{scope}[rotate around={#1:(#2)},shift={(#2)},scale=#3] +\draw[line width=.2mm,->](-.2,0)--++(1,0);\node[fill=none,draw=none]at(1.1,0){\footnotesize$x$}; +\draw[line width=.2mm,->](0,-.2)--++(0,1);\node[fill=none,draw=none]at(0,1.1){\footnotesize$y$}; +\end{scope} +} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Command 10: Rigid constraint +% \Rigid[1]{2}{3} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\NewDocumentCommand{\Rigid}{O{0} m G{1}}{ +\begin{scope}[rotate around={#1:(#2)},shift={(#2)},scale=#3] +\draw[fill=black,rounded corners=.2mm](0,0)--(.25,.4)--(.4,.25)--cycle; +\end{scope} +} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Command 11: Linear Internal Force +% \IForceA[1]{2}{3}{4}{5}{6} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\makeatletter +\NewDocumentCommand{\IForceA}{O{\fillColor} m m m m G{1}}{ +\coordinate(A)at(#2); +\coordinate(B)at(#3); +\pgfmathanglebetweenpoints{\pgfpointanchor{A}{center}}{\pgfpointanchor{B}{center}} +\let\Angle\pgfmathresult +\coordinate(C)at($(A)+(\Angle+90:#4*#6)$); +\coordinate(D)at($(B)+(\Angle-90:#5*#6)$); +\draw[#1,fill=#1,fill opacity=.3](A)--(C)--(D)--(B)--cycle; +\pgfpointdiff{\pgfpointanchor{A}{center}}{\pgfpointanchor{B}{center}} +\pgfmathparse{veclen(\pgf@x,\pgf@y)/28.45274} +\let\Length\pgfmathresult +\StrLeft{#4}{1}[\SA] +\IfStrEq{\SA}{-} + {\node[NOFILL]at($(C)+(\Angle-90:\Length/8)$)[rotate=\Angle]{$#4$};} + {\node[NOFILL]at($(C)+(\Angle+90:\Length/8)$)[rotate=\Angle]{$#4$};} +\StrLeft{#5}{1}[\SB] +\IfStrEq{\SB}{-} + {\node[NOFILL]at($(D)+(\Angle+90:\Length/8)$)[rotate=\Angle]{$#5$};} + {\node[NOFILL]at($(D)+(\Angle-90:\Length/8)$)[rotate=\Angle]{$#5$};} +} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Command 12: Parabolic Internal Force +% \IForceB[1]{2}{3}{4}{5}{6}{7} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\NewDocumentCommand{\IForceB}{O{\fillColor} m m m m m G{1}}{ +\coordinate(A)at(#2); +\coordinate(B)at(#3); +% original cord +\pgfmathanglebetweenpoints{\pgfpointanchor{A}{center}}{\pgfpointanchor{B}{center}} +\let\Angle\pgfmathresult +\coordinate(C)at($(A)+(\Angle+90:#4*#7)$); +\coordinate(D)at($(B)+(\Angle-90:#5*#7)$); +% shape cord +\pgfmathanglebetweenpoints{\pgfpointanchor{C}{center}}{\pgfpointanchor{D}{center}} +\let\AngleB\pgfmathresult +% original length +\pgfpointdiff{\pgfpointanchor{A}{center}}{\pgfpointanchor{B}{center}} +\pgfmathparse{veclen(\pgf@x,\pgf@y)/28.45274} +\let\Length\pgfmathresult +% inclined length +\pgfpointdiff{\pgfpointanchor{C}{center}}{\pgfpointanchor{D}{center}} +\pgfmathparse{veclen(\pgf@x,\pgf@y)/28.45274} +\let\LengthB\pgfmathresult +% center of inclined cord +\coordinate(G)at($(C)+(\AngleB:\LengthB/2)$); +\pgfmathsetmacro\height{#6*#7}; +\begin{scope}[rotate around={\AngleB:(G)},shift={(G)}] +\draw[#1,fill=#1,fill opacity=.3](-.5*\LengthB,0)parabola bend(0,\height)(.5*\LengthB,0)--++(\Angle-\AngleB+90:#5*#7)--($(-.5*\LengthB,0)+(\Angle-\AngleB-90:#4*#7)$)--cycle; +\end{scope} + +\StrLeft{#4}{1}[\SA] +\IfStrEq{\SA}{-} + {\node[NOFILL]at($(C)+(\Angle-90:\Length/8)$)[rotate=\Angle]{$#4$};} + {\node[NOFILL]at($(C)+(\Angle+90:\Length/8)$)[rotate=\Angle]{$#4$};} +\StrLeft{#5}{1}[\SB] +\IfStrEq{\SB}{-} + {\node[NOFILL]at($(D)+(\Angle+90:\Length/8)$)[rotate=\Angle]{$#5$};} + {\node[NOFILL]at($(D)+(\Angle-90:\Length/8)$)[rotate=\Angle]{$#5$};} +} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Command 13: Beam Deformation (perpendicular) +% \BeamDeformP[1]{2}{3}{4}[5]{6}[7]{8} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\NewDocumentCommand{\BeamDeformP}{O{\fillColor} m m m O{0} m O{0} G{1}}{ +\coordinate(A)at(#2); +\coordinate(B)at(#3); +% original cord +\pgfmathanglebetweenpoints{\pgfpointanchor{A}{center}}{\pgfpointanchor{B}{center}} +\let\Angle\pgfmathresult +\coordinate(C)at($(A)+(\Angle+90:#4*#8)$); +\coordinate(D)at($(B)+(\Angle-90:#6*#8)$); +\pgfmathanglebetweenpoints{\pgfpointanchor{C}{center}}{\pgfpointanchor{D}{center}} +\let\AngleB\pgfmathresult +\draw[#1,line width=.8mm](C)to[out=\AngleB+#5*#8,in=180+\AngleB+#7*#8](D); +} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Command 13: Beam Deformation (Rotation Only) +% \BeamDeformR[1]{2}{3}[4][5]{6} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\NewDocumentCommand{\BeamDeformR}{O{\fillColor} m m O{0} O{0} G{1}}{ +\coordinate(A)at(#2); +\coordinate(B)at(#3); +% original cord +\pgfmathanglebetweenpoints{\pgfpointanchor{A}{center}}{\pgfpointanchor{B}{center}} +\let\Angle\pgfmathresult +\draw[#1,line width=.8mm](A)to[out=\Angle+#4*#6,in=180+\Angle+#5*#6](B); +} +\makeatother
\ No newline at end of file diff --git a/Master/tlpkg/bin/tlpkg-ctan-check b/Master/tlpkg/bin/tlpkg-ctan-check index 0a0cb3670a1..50e89e0b563 100755 --- a/Master/tlpkg/bin/tlpkg-ctan-check +++ b/Master/tlpkg/bin/tlpkg-ctan-check @@ -589,7 +589,8 @@ my @TLP_working = qw( stack stackengine stage standalone stanli starfont startex statistik statex statex2 statmath staves stdclsdv stdpage stealcaps steinmetz - stellenbosch stex stix stmaryrd storebox storecmd stringstrings struktex + stellenbosch stex stix stmaryrd storebox storecmd + stringstrings structmech struktex sttools stubs studenthandouts sty2dtx suanpan subdepth subeqn subeqnarray subfig subfigmat subfigure subfiles subfloat substances substitutefont substr subsupscripts diff --git a/Master/tlpkg/tlpsrc/collection-mathscience.tlpsrc b/Master/tlpkg/tlpsrc/collection-mathscience.tlpsrc index 2639c5a8948..76d20d471cb 100644 --- a/Master/tlpkg/tlpsrc/collection-mathscience.tlpsrc +++ b/Master/tlpkg/tlpsrc/collection-mathscience.tlpsrc @@ -150,6 +150,7 @@ depend statex2 depend statmath depend steinmetz depend stmaryrd +depend structmech depend struktex depend substances depend subsupscripts diff --git a/Master/tlpkg/tlpsrc/structmech.tlpsrc b/Master/tlpkg/tlpsrc/structmech.tlpsrc new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/Master/tlpkg/tlpsrc/structmech.tlpsrc |