如何定义在 tikz 图片中绘制轴标签的宏?

如何定义在 tikz 图片中绘制轴标签的宏?

我想绘制一个宏来排版轴刻度标记和标签。但是,以下

\newcommand\obrPopisX[2][below]{\foreach \x/\xtext in {#2} 
    \draw[shift={(\x,0)}] (0pt,2pt) -- (0pt,-2pt) node[#1] {$\xtext$};}

无法产生良好的结果,因为可选参数是“above”——标签太近了,因为它们附着在轴下方 2pt 的点上。作为部分解决方法,我可以使用

\newcommand\obrPopisX[2][below]{\foreach \x/\xtext in {#2} 
  {\draw[shift={(\x,0)}] (0pt,2pt) -- (0pt,-2pt);
  \draw [shift={(\x,0)}] (0,0) node[#1] {$\xtext$};};}

但这会将标签设置为相对于轴上的点,而不是刻度标记的末尾。我希望定义宏,将标签设置为相对于整条线,即行为如下

\draw[shift={(0,\y)}] (2pt,0pt) -- (-2pt,0pt) node ...;

或者类似

\draw[shift={(0,\y)}] (-2pt,0pt) -- (2pt,0pt) node  ....;

取决于关键字“above”是否是宏 obrPopisX 的可选参数之一。有什么想法吗?可能我想将标签附加到整条线上,而不是线的终点。谢谢。

答案1

以下是定义CoordinateAxisX接受参数的宏的一种方法:

  • [<label-style>] = 应用于刻度标签的样式
  • {<x-axis-label>}= x 轴标签
  • {XAxisMin} = xmin 用于绘制轴
  • {XAxisMax} = xmax 用于绘制轴
  • {tick marks} = 勾选位置列表

第一个是默认设置,第二个是[above,red]指定的选项,第三个是[below,blue]指定的选项:

在此处输入图片描述

进一步增强:

  • 请注意,这要求选项周围没有空格above。因此,将其与..., above,...、 或 一起使用...,above ,...将失败。这可以通过进一步使用该包轻松解决xstring,但由于似乎不想使用其他包,因此我没有添加该增强功能。
  • 这种方法也不是考虑到below可以通过 指定选项的可能性above,below。在这种情况下,该above选项将应用于轴标签,尽管就目前而言pgfkeys,该below选项是活动的选项。

代码:

\documentclass{article}
\usepackage{xstring}
\usepackage{tikz}

\newcommand*{\IfIsInString}[4]{%
    \StrPosition{#1}{#2}[\Position]%
    \IfEq{\Position}{0}{#4}{#3}%
}%

\newcommand*{\TickSize}{2pt}%
\newcommand*{\CoordinateAxisX}[5][]{%
    % [<label-style>]{<x-axis-label>}{XAxisMin}{XAxisMax}{tick marks}
    \edef\TickMarks{#5}
    \draw [gray, thin, -latex] (#3,0) -- (#4,0) node[right] {#2};%
    \IfIsInString{,#1,}{,above,}{%
        \foreach \x in \TickMarks {%
            \draw [gray, thin] (\x, -\TickSize) -- (\x,\TickSize)
                node [above, black, #1] {$\x$};
        }%
    }{%
        \foreach \x in \TickMarks {%
            \draw [gray, thin] (\x, \TickSize) -- (\x,-\TickSize)
                node [below, black, #1] {$\x$};
        }%  
    }%
}%


\newcommand*{\XMin}{-3}%
\newcommand*{\XMax}{3}%
\newcommand*{\XAxisLabel}{$x$}
\begin{document}
\begin{tikzpicture}
\CoordinateAxisX{\XAxisLabel}{\XMin}{\XMax}{-2,...,2}
\end{tikzpicture}

\bigskip
\begin{tikzpicture}
\CoordinateAxisX[above,red]{\XAxisLabel}{\XMin}{\XMax}{-2,...,2}
\end{tikzpicture}

\bigskip
\begin{tikzpicture}
\CoordinateAxisX[below,blue]{\XAxisLabel}{\XMin}{\XMax}{-2,...,2}
\end{tikzpicture}
\end{document}

相关内容