xypic 边界框

xypic 边界框

我正在使用 xymatrix 绘制马尔可夫链图。它看起来很棒,但是边界框计算不正确,因此与其他文本重叠。

这特别糟糕,因为我也在standalone脚本上使用它,而且生成的图像太过裁剪。

遵循 MWE:


\documentclass{article}
\usepackage{lipsum}
\usepackage[all]{xy}

\begin{document}

\lipsum[1]

\begin{figure}[h]
\[\xymatrix{
 & a \ar@(ul,ur) \ar@/^/[rr] \ar@/^/[dd] \ar@/^/[ddrr] \ar@/^4pc/[rrrd]
 & 
 & b \ar@(ul,ur) \ar@/^/[ll] \ar@/^/[dd] \ar@/^/[ddll] \ar[dr] 
 \\
 begin \ar[ur] \ar[dr] \ar@/^4pc/[urrr]\ar@/_4pc/[drrr]
 & 
 & 
 & 
 & end 
 \\
 & c \ar@(dr,dl) \ar@/^/[rr] \ar@/^/[uu] \ar@/^/[uurr] \ar@/_4pc/[rrru]
 & 
 & d \ar@(dr,dl) \ar@/^/[ll] \ar@/^/[uu] \ar@/^/[uull] \ar[ur]
}\]
\caption{Exemplo de uma cadeia de Markov\label{mkv1}}
\end{figure}

\lipsum[1]
\end{document}

这是我使用独立时的图像样本作物

有什么提示可以说明如何将 xymatrix 包装到什么地方,以强制它完全显示?

谢谢

编辑:有点相关在 xymatrix 中为对象分组的框添加填充,但我不想为每个不同的图像指定填充......

答案1

如果您添加\fbox{...}构造\xymatrix,您会看到边界框由节点“a,b,c,d,begin,end”确定。

在此处输入图片描述

(我做了一些更改:首先,我添加了可产生合适箭头提示的cmtip选项,然后键入了“和”作为文本节点。)xy\txt{begin}\txt{end}

Xy-pic 从来不会考虑弯曲的箭头来确定边界框。你可以用以下规则手动调整它:

\documentclass{article}
\usepackage{lipsum}
\usepackage[all,cmtip]{xy}

\begin{document}

\lipsum[1]

\begin{figure}[htp]
\[
\fboxsep=0pt
\fbox{%
\vrule height 7ex depth 24.5ex width 0pt
\xymatrix{
 & a \ar@(ul,ur) \ar@/^/[rr] \ar@/^/[dd] \ar@/^/[ddrr] \ar@/^4pc/[rrrd]
 &
 & b \ar@(ul,ur) \ar@/^/[ll] \ar@/^/[dd] \ar@/^/[ddll] \ar[dr]
 \\
 \txt{begin} \ar[ur] \ar[dr] \ar@/^4pc/[urrr]\ar@/_4pc/[drrr]
 &
 &
 &
 & \txt{end}
 \\
 & c \ar@(dr,dl) \ar@/^/[rr] \ar@/^/[uu] \ar@/^/[uurr] \ar@/_4pc/[rrru]
 &
 & d \ar@(dr,dl) \ar@/^/[ll] \ar@/^/[uu] \ar@/^/[uull] \ar[ur]
}}
\]
\caption{Exemplo de uma cadeia de Markov\label{mkv1}}
\end{figure}

\lipsum[1]
\end{document}

在此处输入图片描述

调整高度和深度直到满意为止然后移除该\fbox部件:

\documentclass{article}
\usepackage{lipsum}
\usepackage[all,cmtip]{xy}

\begin{document}

\lipsum[1]

\begin{figure}[htp]
\[
\vrule height 7ex depth 24.5ex width 0pt
\xymatrix{
 & a \ar@(ul,ur) \ar@/^/[rr] \ar@/^/[dd] \ar@/^/[ddrr] \ar@/^4pc/[rrrd]
 &
 & b \ar@(ul,ur) \ar@/^/[ll] \ar@/^/[dd] \ar@/^/[ddll] \ar[dr]
 \\
 \txt{begin} \ar[ur] \ar[dr] \ar@/^4pc/[urrr]\ar@/_4pc/[drrr]
 &
 &
 &
 & \txt{end}
 \\
 & c \ar@(dr,dl) \ar@/^/[rr] \ar@/^/[uu] \ar@/^/[uurr] \ar@/_4pc/[rrru]
 &
 & d \ar@(dr,dl) \ar@/^/[ll] \ar@/^/[uu] \ar@/^/[uull] \ar[ur]
}
\]
\caption{Exemplo de uma cadeia de Markov\label{mkv1}}
\end{figure}

\lipsum[1]
\end{document}

在此处输入图片描述

答案2

评论太长了。这是 tikz 版本。这有相反的问题,这里的边界框实际上太大了。

\documentclass{standalone}
\usepackage{tikz-cd}
\begin{document}
\begin{tikzcd}
  {} & a\mathstrut
  \arrow[loop above]
  \ar[dd,bend left=10]
  \ar[rr,bend left=10]
  \ar[rrdd,bend left=10]
  \ar[rrrd,out=45,in=95,looseness=1.5]
 & 
 & b\mathstrut
 \arrow[loop above]
  \ar[dd,bend left=10]
  \ar[ll,bend left=10]
  \ar[lldd,bend left=10]
  \ar[rd]
 \\
 begin\mathstrut
 \ar[ru]
 \ar[rd]
 \arrow[rrru,out=85,in=135,looseness=1.5]
 \ar[rrrd,out=-85,in=-135,looseness=1.5] 
 & 
 & 
 & 
 & end\mathstrut
 \\
 {} & c\mathstrut
 \ar[uu,bend left=10]
 \ar[rr,bend left=10]
 \ar[uurr,bend left=10]
 \arrow[loop below]
 \ar[rrru,out=-45,in=-95,looseness=1.5]
 & 
 & d\mathstrut
 \ar[uu,bend left=10]
 \ar[ll,bend left=10]
 \ar[uull,bend left=10]
 \arrow[loop below]
 \ar[ru]
  \\
\end{tikzcd}
\end{document}

在此处输入图片描述

您可以轻松地玩箭头

\usetikzlibrary{arrows,arrows.meta}
\tikzcdset{
  arrow style=tikz,
  diagrams={>=Latex[round]}
}

信用:https://tex.stackexchange.com/a/361751/3929

相关内容