pb 图中虚线箭头

pb 图中虚线箭头

我有一个使用包定义的图表环境编写的交换图pb-diagram。我对图表的外观非常满意。

但是我需要将一些箭头改为虚线箭头。

手册中pb-diagram指出箭杆的选项有:

 ..   |  dotted or dashed arrow shaft
 =    |  double line shaft* (“equals sign”)
 !    |  invisible arrow shaft

例如,该命令\arrow{e,..}应该绘制点状或虚线的箭头轴。

我的问题是?如何确保箭头是虚线而不是点线?在我尝试的所有示例中,箭头都变成了点线。

我将非常感激任何关于如何解决此问题的建议pb-diagrams。下面是一个最小示例。

\documentclass[12pt]{article}
\usepackage{pb-diagram}
\begin{document}
\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}

所有虚线箭头均应为虚线箭头。

OBS:我知道有一个更高级的软件包叫 TiZ,它更具表现力,显然允许人们很好地控制图表。但在这个问题中,我只对如何解决与包有关的问题感兴趣pb-diagram,因为图表相当大,已经编码,我只需要添加一些虚线箭头来完成它。此外,我在安装 Ti 时遇到了一些麻烦我的电脑上有一个 Z。

答案1

pb-diagram在这里我找到了放置点的例程,命名\dg@dotvector并对其进行了一些修改。我用 替换了\circle放置每个点的宏\rule。但是,我需要以\rule适当的角度倾斜,所以我使用\FPdiv\FParctan\FPmul计算角度正切,取反正切,并转换为度数。然后我使用 将\rotatebox上述角度调整\rule为该角度。

编辑以利用 LaRiFaRi 的出色建议,从而允许同时使用点..和划--语法。在下面的 MWE 中,我在图中显示了点和划线(以及实线)。

\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}

在此处输入图片描述

为了进行比较,以下是该例程的默认行为,未经修改:

在此处输入图片描述

答案2

以防万一你改变主意:-)

% arara: pdflatex

\documentclass[12pt]{article}
\usepackage{tikz-cd}

\begin{document}
\begin{equation}
    \begin{tikzcd}[every arrow/.append style={-latex}]
        A
        \arrow[dashed]{r}{a} 
        \arrow[dashed]{d}[swap]{c} 
        \arrow[dashed]{drr}[near start,swap]{u}
        & B
        \arrow[dashed]{r}{b}
        & C
        \arrow{d}{d} 
        \arrow{dll}[near start]{v} \\
        D \arrow{rr}[swap]{e} 
        & 
        & 
        H 
    \end{tikzcd}
\end{equation}
\end{document}

在此处输入图片描述

相关内容