在 xy-pic 中堆叠

在 xy-pic 中堆叠

我想画这个:

在此处输入图片描述

我的 xy-pic 代码是

\[
\xy
@={(0,0),(10,0),(10,10),(0,10)},
{\ar@{-}^{f_1}|{\dir{>}} s0;s1},
{\ar@{-}^{f_2}|{\dir{>}} s1;s2},
{\ar@{-}^{f_3}|{\dir{>}} s2;s3},
{\ar@{-}^{f_4}|{\dir{>}} s3;s0},
\endxy
\]

我可以使用函数@@来简化上述代码吗?例如,代码

\[
\xy
@={(0,0),(10,0),(10,10),(0,10)},
s0="prev",
@@{;"prev";**@{-}="prev"}
\endxy
\]

给出没有箭头和 f 的输出。

答案1

TikZ 的实现代码非常简单:

\documentclass[tikz,border=10pt]{standalone}

\begin{document}
\begin{tikzpicture}[-stealth,line cap=rect]
\draw(0,0)  |- (1,1)  node[above]{$f_1$};
\draw(1,1)  -| (2,0)  node[right]{$f_2$};
\draw(2,0)  |- (1,-1) node[below]{$f_3$};
\draw(1,-1) -| (0,0)  node[left]{$f_4$};
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案2

PSTricks 解决方案,您可以在其中控制图表中的边长(通过更改的值\Length):

\documentclass{article}

\usepackage{pstricks-add}
\usepackage{xfp}

\newcommand*\halfLength{\fpeval{\Length/2}}
\newcommand*\maximum{\fpeval{\Length+0.5}}

\def\Length{5}


\begin{document}

\begin{pspicture}(-0.5,-0.5)(\maximum,\maximum)
  \psline[
    ArrowInside = ->,
    ArrowInsidePos = 0.52,
    arrowscale = 1.5
  ](0,0)(0,\Length)(\Length,\Length)(\Length,0)(0,0)
  \uput[ 90](\halfLength,\Length){$f_{1}$}
  \uput[  0](\Length,\halfLength){$f_{2}$}
  \uput[270](\halfLength,0){$f_{3}$}
  \uput[180](0,\halfLength){$f_{4}$}
\end{pspicture}

\end{document}

输出

请注意,我没有选择ArrowInsidePos = 0.5,而是ArrowInsidePos = 0.52因为这提供了更好的箭头位置(从视觉上来说),我想。

相关内容