将tikz图片中x和y轴上的两个零更改为字母O

将tikz图片中x和y轴上的两个零更改为字母O

我一直在排版一道数学题,要求学生找出正确的点。我想把网格中心的两个 0 改为位于原点西北方向的字母 O。我的代码和当前输出如下所示。另外,请不要将包更改为pgfplots- 我想让它保持原样tikz,因为其他图表已经看起来很好看了。谢谢你的帮助!

在此处输入图片描述

代码:

\documentclass[tikz]{book}
\usepackage[utf8]{inputenc}
\usepackage[LGRgreek]{mathastext}
\usepackage{multirow}
\usepackage{tkz-base} % tikz package
\usepackage{tikz} % tikz package
\usepackage{tkz-euclide} % tikz package
\usepackage{array}
\usepackage{siunitx}
\usepackage{amssymb}
\setlength{\parindent}{0pt}
\usepackage{hyperref}
\usepackage{longtable}
\usepackage{graphicx}
\hypersetup{
    colorlinks=true,
    linkcolor=black,
    filecolor=purple,      
    urlcolor=RoyalBlue,
    pdftitle={Math AT1 Year 7},
    pdfpagemode=FullScreen,
}
\usepackage{scalerel}
\usepackage{stackengine}
\usepackage{xcolor}
\newcommand\showdiv[1]{\overline{\smash{\hstretch{.5}{)}\mkern-3.2mu\hstretch{.5}{)}}#1}}
\let\ph\phantom
\usepackage[a4paper, total={7in, 10.5in}]{geometry}
\usepackage{sectsty}
\usepackage{titlesec}

\begin{document}
\begin{figure}[h]
\begin{tikzpicture}
   \tkzInit[xmax=5,ymax=5,xmin=-4,ymin=-3]   
   \tkzGrid
   \tkzAxeXY
   \foreach \Point/\PointLabel in {(3,2)/A, (-2,3)/B, (-3,-2)/C, (3,-2)/D}
   \draw[fill=black] \Point circle (0.05) node[above right] {$\PointLabel$};
\end{tikzpicture}
\end{figure}
\end{document}

答案1

尽管\tkzLabelX\tkzLabelY具有选项orig(跳过0),但这仍会在具有的位置放置一个空节点fill = white

这就是为什么我要先画标签然后再画轴(将绘制在这些白色伪影上)。

代码

\documentclass[tikz]{standalone}
\usepackage{tkz-base,tkz-euclide} % tikz package
\begin{document}
\begin{tikzpicture}
   \tkzInit[xmax=5,ymax=5,xmin=-4,ymin=-3]   
   \tkzGrid
   \tkzLabelX[orig]
   \tkzLabelY[orig]
   \tkzDrawX
   \tkzDrawY
   \node[above left] {$O$};
   \foreach \Point/\PointLabel in {(3,2)/A, (-2,3)/B, (-3,-2)/C, (3,-2)/D}
   \draw[fill=black] \Point circle (0.05) node[above right] {$\PointLabel$};
\end{tikzpicture}
\end{document}

不幸的是,\tkzAxeXY还将其可选参数转发给所有四个\tkzDrawX\tkzDrawY\tkzLabelX\tkzLabelY这使得提供良好的样式来实际跳过 0 节点变得有点混乱。

这里no zero(当应用于时\tkzAxeXY)将从0-node(完全隐藏它们)中生成一个坐标。

然后,(字母 O,而不是零)样式make an O再次改变 xlabel 的样式,重新激活形状rectangle并应用一些设置,以便$O$将具有内容的节点添加到原点的西北部。

由于这是一个沿刻度路径放置的节点,因此我使用它pos = .5来返回原始节点(也可以使用)。所有其他键都用于抵消 Tkz 的默认设置。当然,您可以根据需要调整这些设置。(最好将其设置为类似...at={(0,0)}的样式letter O instead of a zero at the origin

代码

\documentclass[tikz]{standalone}
\usepackage{tkz-base,tkz-euclide}
\makeatletter
\pgfkeys{
  /tkzlabelX/no zero/.style={
    /tikz/xlabel style/.append style={
      style/.expand once={\ifdim\tkz@pos pt=0pt shape=coordinate\fi}}},
  /tkzlabelY/no zero/.style={
    /tikz/ylabel style/.append style={
      style/.expand once={\ifdim\tkz@pos pt=0pt shape=coordinate\fi}}},
  /tkzAxeXY/no zero/.code=, /tkzdrawX/no zero/.code=, /tkzdrawY/no zero/.code=,
  /tkzlabelX/make an O/.style={
    /tikz/xlabel style/.append style={
      style/.expand once={\ifdim\tkz@pos pt=0pt
        shape=rectangle, fill=none, fill/.code=, % no filling, please
        pos=.5, yshift=+3pt, anchor=south east, % counter default xlabel style
        inner sep=+.3333em, /utils/exec=\def\tkz@Xresult{$O$}\fi}}},
  /tkzAxeXY/make an O/.code=, /tkzlabelY/make an O/.code=,
  /tkzdrawX/make an O/.code=, /tkzdrawY/make an O/.code=}
\makeatother
\begin{document}
\begin{tikzpicture}
   \tkzInit[xmax=5,ymax=5,xmin=-4,ymin=-3]
   \tkzGrid
   \tkzAxeXY[no zero, make an O]
   \foreach \Point/\PointLabel in {(3,2)/A, (-2,3)/B, (-3,-2)/C, (3,-2)/D}
   \draw[fill=black] \Point circle (0.05) node[above right] {$\PointLabel$};
\end{tikzpicture}
\end{document}

输出

在此处输入图片描述

相关内容