在 TikZ 中将节点设为椭圆形

在 TikZ 中将节点设为椭圆形

梅威瑟:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{shapes} 
\begin{document}

\begin{tikzpicture}

\tikzset{elips/.style={ellipse,draw},}
\tikzset{yuvar/.style={circle,draw},} % yuvar means circular in Turkish

\begin{scope}
    \node (A)[elips] at (0,0) {A}; % This should look like an ellipse but it doesn't
    \node (B)[yuvar] at (2,0) {B};
    \node (C)[elips] at (4,0) {AA}; % This is an ellipse but only if C's are doubled

\end{scope}

\end{tikzpicture}
\end{document}

为了使节点A略微呈椭圆形(像从顶部和底部轻轻按压的球),我必须在其中添加更多文本,例如,不仅仅是放A我必须放的AA

我尝试过几种方法,例如修补inner sep=0.5cm等等,但都没有成功。

如何使节点变成椭圆形,而不必添加多个字母或不显著改变其默认大小?

样本:

在此处输入图片描述

a顶部和底部是扁平的,但尺寸没有明显改变,即水平长度保持不变。

答案1

(评论和问题编辑后更新)

当您使用该ellipse形状时,椭圆将“紧密贴合”包含文本和内部分隔的矩形。因此,如果您只想要略微的差异,您可以执行以下操作(但请注意,它不适用于最后一个椭圆,它必须增大以适合文本):

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{shapes}
\begin{document}

\begin{tikzpicture}

\tikzset{elips/.style={ellipse,draw,minimum width=2em,minimum height=1.8em,inner ysep=0pt},}
\tikzset{yuvar/.style={circle,draw,minimum width=2em},} % yuvar means circular in Turkish

\begin{scope}
    \node (A)[elips] at (0,0) {A}; % This should look like an ellipse but it doesn't
    \node (B)[yuvar] at (1,0) {B};
    \node (C)[elips] at (2,0) {p};
    \node (D)[elips] at (3,0) {DD};
    \node (E)[elips] at (5,0) {EEEEEEE};
\end{scope}

\end{tikzpicture}
\end{document}

在此处输入图片描述

请注意,A 和 B 之间的差异与您的草图非常相似,但这在很大程度上取决于圆圈中包含的内容。后代,如“p”,将产生不对称。

另一种策略是始终使用椭圆,但强制将文本置于“假”矩形中,如以下代码所示。该命令\fixedsize(肯定可以优化)将文本排版在给定大小的假矩形的中心,无论文本的大小如何。然后您只需使用没有内部分隔符的椭圆即可:


\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{shapes}
\begin{document}

\setlength{\fboxsep}{0pt}
\setlength{\fboxrule}{1pt}

\newcommand{\fixedsize}[3]{%width, height, content
    \parbox[c][#2][c]{#1}{\hfil\makebox[0pt][c]{#3}\hfil}%
}
\newcommand{\fitcircle}[1]{\fixedsize{1.2em}{1.2em}{#1}}
\newcommand{\fitoval}[1]{\fixedsize{1.2em}{1.0em}{#1}}

\begin{tikzpicture}
\tikzset{my/.style={ellipse,draw,inner sep=0pt}}
\begin{scope}
    \node (A)[my] at (0,0) {\fitcircle{A}};
    \node (B)[my] at (1,0) {\fitoval{B}};
    \node (C)[my] at (2,0) {\fitoval{p}};
    \node (D)[my] at (3,0) {\fitoval{DD}};
    \node (E)[my] at (5,0) {\fitoval{EEEEEEE}};
\end{scope}

\end{tikzpicture}
\end{document}

在此处输入图片描述

您可以调整\fitoval和的尺寸\fitcircle来获得您需要的东西。

相关内容