使用 \tikzmath 绘制椭圆的问题

使用 \tikzmath 绘制椭圆的问题
\documentclass{article}


\usepackage{tikz}
\usetikzlibrary{positioning}
\usetikzlibrary{arrows}
\usetikzlibrary{arrows.meta}
\usetikzlibrary{patterns}
\usetikzlibrary{patterns.meta}
\usepackage{onimage}
\usetikzlibrary{math}
\usetikzlibrary{shapes}
\usepackage{xcolor}
\usepackage{txfonts,graphics,url}
\usepackage{array}
\usepackage{graphicx}
\usepackage{setspace}
\usepackage{caption}
\usepackage{bm} 
%\usepackage{amsmath}
\usepackage{epstopdf}
\usepackage{multirow}
\usepackage{rotating}
\usepackage{subfigure}
\usepackage{fancyhdr}


\begin{document}

\begin{figure}[htbp]
    \centering
    \begin{tikzpicture}
        \tikzmath{ \r = 6; }; 
        \draw[thick] (0,0) ellipse (\r and \r/2 );
        \draw [thick,domain=180:360] plot ({\r*cos(\x)}, {\r*sin(\x)});
        \fill[black] (0, 0) circle (\r/6);
        \draw[red,line width=0.4pt] (\r/6/1.4,\r/6/1.4)--(\r/2, \r/2);
        \draw[red,line width=0.4pt] (-\r/2, 0)--(-\r/2-\r/4, \r/4);
        \draw[red,line width=0.4pt] (0,-\r/2)--(3*\r/4, -\r);
        \draw[red] (\r/2/sqrt(2), \r/2/sqrt(2))coordinate (A)node[right] {A};
        \draw[red] (-\r/2-\r/4, \r/4)coordinate (A)node[left,align=left] {B};
        \draw[red] (3*\r/4, -\r)coordinate (A)node[right,align=left] {C};
    \end{tikzpicture}
    \caption{}
\end{figure}


\end{document}

编译提示上面代码中的\draw[thick] (0,0) ellipse (\r and \r/2 );和有错误,如果我把它们改成和,就没有问题了。\draw[red] (\r/2/sqrt(2), \r/2/sqrt(2))coordinate (A)node[right] {A};\draw[thick] (0,0) ellipse (2 and 1 );\draw[red] (\r/2/1.4, \r/2/1.4)coordinate (A)node[right] {A};

但是如何才能使带有参数的初始代码正常工作呢?

谢谢。

答案1

一些解释@ljguo 的回答

在 中,命令和\draw[thick] (0,0) ellipse (\r and \r/2);之间的空格被 TeX 跳过,但是 的语法要求 之前和之后有明确的空格。\randellipseand

\r因此,您需要一些技巧来保留和之间的空间and,其中之一是用\r括号括起来(\r/2不需要换行):

\draw[thick] (0,0) ellipse ({\r} and \r/2);

在 中\draw[red] (\r/2/sqrt(2),\r/2/sqrt(2))coordinate ...;,罪魁祸首是错误配对的括号()。不幸的是,tikz 不考虑嵌套括号,因此 tikz 看到的是坐标( \r/2/sqrt(2 )。括号技巧也适用于这种情况:

\draw[red] ({\r/2/sqrt(2)},{\r/2/sqrt(2)})coordinate ...;

答案2

\documentclass{article}


\usepackage{tikz}

\usetikzlibrary{math}

\begin{document}

\begin{figure}[htbp]
    \centering
    \begin{tikzpicture}
        \tikzmath{\r = 6; } 
        \draw[thick] (0,0) ellipse ({\r} and {\r/2}); %edit
        \draw [thick,domain=180:360] plot ({\r*cos(\x)}, {\r*sin(\x)});
        \fill[black] (0, 0) circle (\r/6);
        \draw[red,line width=0.4pt] (\r/6/1.4,\r/6/1.4)--(\r/2, \r/2);
        \draw[red,line width=0.4pt] (-\r/2, 0)--(-\r/2-\r/4, \r/4);
        \draw[red,line width=0.4pt] (0,-\r/2)--(3*\r/4, -\r);
        \draw[red] ({\r/2/sqrt(2)},{\r/2/sqrt(2)})coordinate (A)node[right] {A}; %edit
        \draw[red] (-\r/2-\r/4, \r/4)coordinate (A)node[left,align=left] {B};
        \draw[red] (3*\r/4, -\r)coordinate (A)node[right,align=left] {C};
    \end{tikzpicture}
    \caption{}
\end{figure}


\end{document}

相关内容