Here I found the routine in pb-diagram
that placed dots, named \dg@dotvector
and made several modifications to it. I replaced the \circle
macro that placed each dot with a \rule
. However, I needed to have the \rule
tilted at the proper angle, so I used \FPdiv
and \FParctan
and \FPmul
to calculate the angle tangent, take the arctangent, and convert to degrees. Then I used \rotatebox
to angle the aforementioned \rule
to that angle.
EDITED to take advantage of LaRiFaRi's excellent suggestion, thus allowing the simultaneous use of both dot ..
and dash --
syntax. In the following MWE, I show both dot and dash lines (and solid lines) in the graph.
\documentclass[12pt]{article}
\usepackage{pb-diagram,fp,graphicx}
\begin{document}
\makeatletter
\@namedef{dgo@--}{\let\dg@VECTOR=\dg@dashvector}%
\def\dg@dashvector(#1,#2)#3{%
\begingroup
\dg@XTEMP=#1\relax \dg@YTEMP=#2\relax
\let\dg@NDOTS=\dg@XEND \let\dg@DOTDIAM=\dg@WEND
% Find number of dots: make x-spacing be DOTSPACING for arrows
% of |slope| <= 1, and make y-spacing be DOTSPACING otherwise.
% Thus, true spacing is never more than 30% off from DOTSPACING.
\dg@NDOTS=\unitlength \multiply\dg@NDOTS #3\relax
\dg@ZTEMP=\dg@YTEMP \dg@changesign\dg@YTEMP\dg@ZTEMP
\ifnum\dg@XTEMP>\z@
\ifnum\dg@YTEMP>\dg@XTEMP
\multiply\dg@NDOTS\dg@YTEMP \divide\dg@NDOTS\dg@XTEMP \fi
\else\ifnum\dg@XTEMP<\z@
\ifnum\dg@YTEMP>-\dg@XTEMP
\multiply\dg@NDOTS\dg@YTEMP \divide\dg@NDOTS-\dg@XTEMP \fi
\fi\fi
\dg@YTEMP=\dg@ZTEMP
\divide\dg@NDOTS\dgDOTSPACING
\ifnum\dg@NDOTS>\z@\else \dg@NDOTS=\@ne \fi
% Compute increment vector between dots; round to \unitlength's.
% Use NDOTS not DOTSPACING, since DOTSPACING not exactly obeyed.
\dg@ZTEMP=\unitlength \multiply\dg@ZTEMP #3\relax
\divide\dg@ZTEMP\dg@NDOTS
\ifnum\dg@XTEMP=\z@
\dg@changesign\dg@ZTEMP\dg@YTEMP \dg@YTEMP=\dg@ZTEMP
\else
\dg@changesign\dg@ZTEMP\dg@XTEMP
\multiply\dg@YTEMP\dg@ZTEMP \divide\dg@YTEMP\dg@XTEMP
\dg@XTEMP=\dg@ZTEMP
\fi
\divide\dg@XTEMP\unitlength \divide\dg@YTEMP\unitlength
% Draw dotted line with \multiput
% and arrowhead as zero-length \vector
%%% CALCULATE THE ROTATE ANGLE OF THE DASHED LINE
\ifnum\the\dg@XTEMP>0%
\FPdiv\arang{\the\dg@YTEMP}{\the\dg@XTEMP}%
\FParctan\arang{\arang}%
\FPmul\arang{\arang}{57.295}%
\else
\def\arang{90}%
\fi
%%%%%
\begin{picture}(0,0)%
\dg@DOTDIAM=\dgDOTSIZE \divide\dg@DOTDIAM\unitlength
\multiput(0,0)(\dg@XTEMP,\dg@YTEMP){\dg@NDOTS}{%
% \circle*{\dg@DOTDIAM}}% REPLACE THIS LINE WITH THE NEXT
\smash{\rotatebox{\arang}{\rule{2pt}{.5pt}}}}%
\multiply\dg@XTEMP\dg@NDOTS \multiply\dg@YTEMP\dg@NDOTS
\put(\dg@XTEMP,\dg@YTEMP){\vector(#1,#2){0}}%
\end{picture}%
\endgroup}%
\makeatother
\begin{equation}
\begin{diagram}
\node{A}
\arrow{e,t,..}{a}
\arrow{s,l,--}{c}
\arrow{ese,b,1,--}{u}
\node{B}
\arrow{e,t,--}{b}
\node{C}
\arrow{s,r}{d}
\arrow{wsw,b,1}{v} \\
\node{D}
\arrow[2]{e,b}{e}
\node[2]{H}
\end{diagram}
\end{equation}
\end{document}

For comparison, here is the default behavior of the routine, without modification:

Best Answer
You could use
\ar@{<--}
, but it's conceptually better to originate it fromA
:Note
\tilde{\varphi}
, rather than\overset{\sim}{\varphi}
. You can use\widetilde
if the accent seems too short.Alternatively, you can use
tikz-cd