\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 跳过,但是 的语法要求 之前和之后有明确的空格。\r
and
ellipse
and
\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}