如何在 tikz-pgf 中绘制以下图形?

如何在 tikz-pgf 中绘制以下图形?

tikz-pgf 源代码

\[\begin{tikzpicture}
\def\a{1.5} \def\b{2}
\path
(-\a,0) node (A) {$A$}      
(\a,0) node (B) {$B$}
(0,-\b) node[align=center] (C) {$C$};
\begin{scope}[nodes={midway,scale=.75}]
\draw[<-] (A)--(C.120) node[left]{some text};
\draw[->] (C.60)--(B) node[right]{some text};
\end{scope}
\end{tikzpicture} 
\] 

生成下图:

在此处输入图片描述

我的问题:

(1)如何将箭头上的文字“some text”沿箭头方向移动,而不是像现在这样水平移动?也就是说,我想将“some text”文字横向或平行于箭头方向移动。

(2)如何增加箭头尺寸?

答案1

像这样:

在此处输入图片描述

通过使用 TiZ库及图片元素样式定义:

\documentclass[margin=3mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{arrows.meta,
                positioning,
                quotes}

\begin{document}
    \begin{tikzpicture}[
node distance = 15mm and 20mm,
       every edge/.style = {draw, -Straight Barb},
every edge quotes/.style = {auto=right, font=\footnotesize, inner sep=2pt, sloped}
                        ]
\node (A) {$A$};
\node (C) [below right=of A] {$C$};
\node (B) [above right=of C] {$B$};
%
\draw   (C) edge ["some text"]  (A)
        (C) edge ["some text"]  (B);
    \end{tikzpicture} 
\end{document}

答案2

这个答案分为两部分:

  • 一个办法
  • 编写更好问题的一些提示

解决方案:

  • 使用 tikz 库arrows.meta
  • 避免范围和缩放,因为不同的字体大小似乎是您想要的标签
  • \def我不太清楚是否需要 TeX ;我建议\pic改用
  • 对于标签,节点被放置在下一个节点坐标之后,例如(A)......这可能不是你想要的
  • 为了使代码更清晰,重构总是一个好主意,一开始就将其重构为一些样式定义(lbl等等)

结果

\documentclass[10pt,border=3mm,tikz]{standalone}
\usetikzlibrary{arrows.meta}% <<< new

\begin{document}
    \begin{tikzpicture}[% <<< new
        lbl/.style={sloped,below,% <<< as requested
            font={\scriptsize}},% <<< fontsize, instead of scaling
        >=Stealth% <<< arrow tip from arrows.meta
    ]
        \def\a{1.5} \def\b{2}% <<< shouldn't be used here; what's the need?
        \path
        (-\a,  0) node (A) {$A$}      
        ( \a,  0) node (B) {$B$}
        (  0,-\b) node (C) {$C$};
        
        % ~~~ not needed, not really what you intend ~~~~~~~~~~~
%       (0,-\b) node[align=center] (C) {$C$};% <<< only useful for\\multi-\\line
%       \begin{scope}[nodes={midway,scale=.75}]% <<< not needed
%           \draw[<-] (A)--(C.120) node[left]{some text};
%           \draw[->] (C.60)--(B) node[right]{some text};

        % ~~~ alternative ~~~~~~~~~~~~~~~~~~
            \draw[->] (C.120)-- node[left ,lbl]{some text} (A);
            \draw[->] (C.60) -- node[right,lbl]{some text} (B);
%       \end{scope}% <<< not needed, related to labels font size
    \end{tikzpicture} 
\end{document}

编写更好问题的提示

为了帮助您学习,无论是关于 Latex 还是本网站,下面的图片都是您在复制代码片段时从常规 Latex 系统编译中得到的结果。结果发现,它是不完整的……(而且无论如何都是错误的)

因此,此答案显示了将精简的代码片段(这很好)转换为 MWE 的过程,人们可以立即复制、尝试和改进。即发布此处显示的最后一个代码是一个不错的 MWE。

顺便说一下,这是一个关于如何编写 MWE 的很好的汇编,在答案和许多评论中的链接中都有。

0. 来自评论

看起来这里使用的 Latex 环境TexStudio可以减少代码编写量。这可能是由于此工具的自动完成功能,请参阅维基百科还有一些.clw 文件

但是,运行 Latex 的方法有很多,包括命令行、通过 IDE、通过在线、使用 Docker 以及 whatHaveYou。因此,为了让这里的观众能够立即复制、编译和处理您的代码以获得答案,basic structure应该始终提供以下内容in code you post

\documentclass ...% insert yours

% ~~~ preamble ~~~
\usepackage ... %  insert yours, the RELEVANT ones only
...

\begin{document}
   % your relevant code here
\end{document}
1. 编译错误

好的,这似乎在您的环境中有效,但是......

\[\begin{tikzpicture}
\def\a{1.5} \def\b{2}
\path
(-\a,0) node (A) {$A$}      
(\a,0) node (B) {$B$}
(0,-\b) node[align=center] (C) {$C$};
\begin{scope}[nodes={midway,scale=.75}]
\draw[<-] (A)--(C.120) node[left]{some text};
\draw[->] (C.60)--(B) node[right]{some text};
\end{scope}
\end{tikzpicture} 
\] 

... 对于这里的大多数用户来说,它无法在常规 Latex 系统上进行编译,常规 Latex 系统pdflatex在这里(通过 F1 不可见):

错误1

2. 让我们添加文档环境
\begin{document}
    \[\begin{tikzpicture}
        \def\a{1.5} \def\b{2}
        \path
        (-\a,0) node (A) {$A$}      
        (\a,0) node (B) {$B$}
        (0,-\b) node[align=center] (C) {$C$};
        \begin{scope}[nodes={midway,scale=.75}]
            \draw[<-] (A)--(C.120) node[left]{some text};
            \draw[->] (C.60)--(B) node[right]{some text};
        \end{scope}
    \end{tikzpicture} 
    \] 
\end{document}

仍然抱怨:不知道 atikzpicture应该是什么:

错误2

3. 启用编译 Tikz 文档

因此,您需要指定一个文档类,并使用 tikz 包。这个

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

等同于

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

\begin{document}
    \[\begin{tikzpicture}
        \def\a{1.5} \def\b{2}
        \path
        (-\a,0) node (A) {$A$}      
        (\a,0) node (B) {$B$}
        (0,-\b) node[align=center] (C) {$C$};
        \begin{scope}[nodes={midway,scale=.75}]
            \draw[<-] (A)--(C.120) node[left]{some text};
            \draw[->] (C.60)--(B) node[right]{some text};
        \end{scope}
    \end{tikzpicture} 
    \] 
\end{document}

但它仍然抱怨,这次是关于你想要的数学模式:

错误3

4. 让我们删除数学模式
\documentclass[10pt,border=3mm,tikz]{standalone}

\begin{document}
    \begin{tikzpicture}
        \def\a{1.5} \def\b{2}
        \path
        (-\a,0) node (A) {$A$}      
        (\a,0) node (B) {$B$}
        (0,-\b) node[align=center] (C) {$C$};
        \begin{scope}[nodes={midway,scale=.75}]
            \draw[<-] (A)--(C.120) node[left]{some text};
            \draw[->] (C.60)--(B) node[right]{some text};
        \end{scope}
    \end{tikzpicture} 
\end{document}

耶!第一次编译成功。现在我们才可以转向tikz代码本身并重新编写它...

已编译

5. 希望你能收到

这是一种返工,通常只能纯粹猜测海报序言,这种不完整的代码片段给这个社区带来了压力。

猜猜看,它会产生什么影响

  • 回复数量
  • 回复质量
  • 回复速度

请学习做得更好。

答案3

您可以使用以下方法快速解决您的问题tikz-cd

\documentclass{article}
\usepackage{amsmath,amssymb,tikz-cd}
\usetikzlibrary{arrows.meta}
\tikzcdset{
    arrow style=tikz,
    arrows={>={To[width=.4cm, length=.15cm]}}
    }

\begin{document}
Text is parallel to the arrow:
\[
\begin{tikzcd}
    A&&B\\[24pt]
    &C\ar[ul, sloped, swap, "\text{some text}"]\ar[ur, sloped, swap, "\text{some text}"]
\end{tikzcd}
\]
Text crosses the arrow:
\[
\begin{tikzcd}
    A&&B\\[24pt]
    &C\ar[ul, "\text{some text}" description]\ar[ur, "\text{some text}" description]
\end{tikzcd}
\]
\end{document}

我在箭头设置中使用了“To”:

arrow style=tikz,
arrows={>={To[width=.4cm, length=.15cm]}}

但您可以使用 TikZ 提供的任何样式,并可以设置您喜欢的宽度和长度。

在此处输入图片描述

相关内容