我正在努力为图添加一个功能:为每个图写入一个关联值。这是我的 MWE:
\documentclass{standalone}
\usepackage{pgfplots}
\newcommand*{\TracSecReso}[4]{
\pgfmathsetmacro\Wr{#2*sqrt(1-2*(#3^2))}
\pgfmathsetmacro\GdBWr{(20*log10(#1))-10*(log10((1-(\Wr/#2)^2)^2+4*(#3^2)*(\Wr/#2)^2))}
\addplot [mark=none] coordinates {(\Wmin,\GdBWr) (\Wr,\GdBWr) } [densely dotted,#4]
node[pos=0.5,above] {\GdBWr};
}
\begin{document}
\begin{tikzpicture}
\def\Wmax{10^(2)}
\def\Wmin{10^(-1)}
\begin{semilogxaxis}[ymax=50,ymin=-40]
\TracSecReso{1}{1}{0.5}{}
\TracSecReso{10}{1}{0.05}{}
\end{semilogxaxis}
\end{tikzpicture}
\end{document}
编译后得到:
如您所见,图片上有两条不同的水平线,每条线都应该标明其值,但两条线上却显示相同的值。
我尝试了几种方法,但仍然无法解决,你能帮助我吗?
答案1
这是由于调查和扩展事物的方式造成的pgfplots
。解决这个问题的一种方法是使用\edef\temp\noexpand
第节中的技巧8.1 实用命令手册 v1.16。
\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}
\newcommand*{\TracSecReso}[4]{
\pgfmathsetmacro\Wr{#2*sqrt(1-2*(#3^2))}
\pgfmathsetmacro\GdBWr{(20*log10(#1))-10*(log10((1-(\Wr/#2)^2)^2+4*(#3^2)*(\Wr/#2)^2))}
\edef\temp{\noexpand\addplot [mark=none] coordinates {(\Wmin,\GdBWr) (\Wr,\GdBWr) } [densely dotted,#4]
node[pos=0.5,above] {\GdBWr};}
\temp
}
\begin{document}
\begin{tikzpicture}
\def\Wmax{10^(2)}
\def\Wmin{10^(-1)}
\begin{semilogxaxis}[ymax=50,ymin=-40]
\TracSecReso{1}{1}{0.5}{}
\TracSecReso{10}{1}{0.05}{}
\end{semilogxaxis}
\end{tikzpicture}
\end{document}