我一直在排版一道数学题,要求学生找出正确的点。我想把网格中心的两个 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}