[pstricks] psmatrix, new arrow type
Herbert Voss
Herbert.Voss at FU-Berlin.DE
Sun Nov 2 10:09:18 CET 2008
Antoine Pairet schrieb:
> Basically, it uses a forloop to generate a psmatrix. Then using \ncnode
> I connect several nodes. This works pretty good. However, I'd like to
> define a new arrow type: an arrow that ends with a circle with a dot in
> its centre.
>
> \ncline{°-°}{nodeA}{nodeB} would link the 2 nodes by a line ending by
> two circles having a dot in their center.
see example
> Moreover, I'd like to have some advices concerning the definition of my
> \nonZero macro. It must put a dot on a node of the psmatrix. I uses
> \ncline[linestyle=none]{*-}{nodeA}{1,1}
> Is there a better method?
not really, but you can do \ncline[linestyle=none]{*-}{nodeA}{nodeA}
> And how about having better brackets than with my code?
do not define counters inside an environment, should be
done always outside.
Herbert
\documentclass[a4paper,10pt]{report}
\usepackage{pst-node,graphicx}
\usepackage[utf8]{inputenc}
\usepackage[english]{babel}
\usepackage{forloop}
\usepackage{amsmath}
\newcommand\equalValue[2]{\ncline{*-*}{#1}{#2}}%
\newcommand\oppositeValue[2]{\ncline{*-o}{#1}{#2}}%
\newcommand\halfValue[2]{\ncline{#1}{#2}}%
\newcommand\halfOppositeValue[2]{%
\ncline{o-o}{#1}{#2}%
\ncput[npos=0]{\psdot[dotscale=0.5]}%
\ncput[npos=1]{\psdot[dotscale=0.5]}}
\newcommand\nonZero[1]{\ncline[linestyle=none]{*-}{#1}{#1}}%
\newcounter{identRow}%%Counters for the loop
\newcounter{identCol}%
\newcounter{endMatrix}%
\newsavebox\PBox
\newenvironment{symmatrix}[2]{% % Macro definitions
\setcounter{endMatrix}{#1}%
\addtocounter{endMatrix}{-1}%
\psset{arrowscale=2}
\begin{lrbox}{\PBox}
\begin{psmatrix}[colsep=.5cm,rowsep=.25cm,mnode=dot,dotsize=1.5pt]%
\forloop{identRow}{0}{\value{identRow} < #1}{%
\forloop{identCol}{1}{\value{identCol} < #2}{&}%
\ifnum\theidentRow<\theendMatrix \\\fi}%
\end{psmatrix}}
{\end{lrbox}\[\left(\arraycolsep=2pt%
\array{c}\usebox\PBox\endarray\right)\]}
\begin{document}
\begin{symmatrix}{3}{6}
\equalValue{2,3}{3,6}
\oppositeValue{2,1}{3,4}
\halfOppositeValue{2,2}{3,5}
\nonZero{2,5}
\end{symmatrix}
\end{document}
More information about the PSTricks
mailing list