我正在使用 latex 来生成图形,这是一个简单的例子。
\documentclass[
border={0mm 0mm 0mm 0mm}, % left bottom right top
]{standalone}
\usepackage{tikz,stackengine}
\usepackage{pgfplotstable}
\pgfplotsset{compat=newest}
\usepgfplotslibrary{units}
\begin{document}
\pgfplotsset{width=5cm,height=5cm,grid style={dashed}}
\begin{filecontents}{curves.txt}
x y1 y2
1 1 2
2 4 5
3 2 3
4 6 7
5 5 6
6 6 7
7 9 5
8 5 8
\end{filecontents}
% command in the matlab
% [Time_Series_Plotted',p_total_from_TU(:,Time_Series_Plotted)',p_total_from_TU_CHP(:,Time_Series_Plotted)',p_total_from_TU_CHP_WF(:,Time_Series_Plotted)',p_total_of_loads(:,Time_Series_Plotted)',p_total_from_TU_CHP_WF_WCur(:,Time_Series_Plotted)']
\pgfplotstableread[skip first n=5,]{curves.txt}{\curves}% 2+4 for filecontents header
\begin{tikzpicture}
\begin{axis}
[color=black,grid=major,use units, xlabel=x, ylabel=y,
legend style={draw=none,fill=none,legend image post style={scale=1}, font=\scriptsize}, legend cell align={left}, legend pos=north west,]
\addplot[dashed,draw=green, line width=1] table [x index=0,y index=1, ]{\curves};
\addplot[ draw=green, line width=1] table [x index=0,y index=2, ]{\curves};
\legend{curve1, curve2};
\end{axis}
\end{tikzpicture}
\end{document}
我使用\begin{filecontents}
和\end{filecontents}
创建 .txt 文件来存储 的数据tikzpicture
。然后,在编译 latex 代码后,我在文件夹中有一个 curves.txt 文件。
但是,在调整 latex 文件中的曲线参数时,我必须先删除 curves.txt 文件,然后再编译 latex 代码。否则 latex 仍然会使用 curves.txt 中的旧值来绘制曲线。
因此,是否有一些方法可以在生成 pdf 文件后删除 curves.txt 文件,或者每次编译 latex 代码时覆盖旧的 curves.txt 文件,或者只是pgfplots
从 latex 代码中读取数据而不从文件中读取?
答案1
您不需要外部文件,调整下面代码中的值就像使用一样简单filecontents
。
\documentclass{article}
\usepackage{tikz}
\usepackage{pgfplotstable}
\pgfplotsset{compat=newest}
\usepgfplotslibrary{units}
\begin{document}
\begin{tikzpicture}
\pgfplotsset{width=5cm,height=5cm,grid style={dashed}}
\pgfplotstableread{
x y1 y2
1 1 2
2 4 5
3 2 3
4 6 7
5 5 6
6 6 7
7 9 5
8 5 8
}{\curves}
\begin{axis}[
color=black,
grid=major,
use units,
xlabel=x,
ylabel=y,
legend style={
draw=none,
fill=none,
legend image post style={scale=1},
font=\scriptsize,
},
legend cell align=left,
legend pos=north west,
]
\addplot[dashed, draw=green, line width=1] table [x index=0,y index=1, ]{\curves};
\addplot[ draw=green, line width=1] table [x index=0,y index=2, ]{\curves};
\legend{curve1, curve2}
\end{axis}
\end{tikzpicture}
\end{document}
答案2
您可以使用以下命令\begin{filecontents*}[overwrite]{curves.txt}...\end{filecontents*}
确保您的.txt
文件已重新创建:
\documentclass[
border={0mm 0mm 0mm 0mm}, % left bottom right top
]{standalone}
\usepackage{tikz,stackengine}
\usepackage{pgfplotstable}
\pgfplotsset{compat=newest}
\usepgfplotslibrary{units}
\begin{document}
\pgfplotsset{width=5cm,height=5cm,grid style={dashed}}
\begin{filecontents*}[overwrite]{curves.txt}
x y1 y2
1 1 2
2 4 5
3 2 3
4 6 7
5 5 6
6 6 7
7 9 5
8 5 8
\end{filecontents*}
% command in the matlab
% [Time_Series_Plotted',p_total_from_TU(:,Time_Series_Plotted)',p_total_from_TU_CHP(:,Time_Series_Plotted)',p_total_from_TU_CHP_WF(:,Time_Series_Plotted)',p_total_of_loads(:,Time_Series_Plotted)',p_total_from_TU_CHP_WF_WCur(:,Time_Series_Plotted)']
\pgfplotstableread[skip first n=5,]{curves.txt}{\curves}% 2+4 for filecontents header
\begin{tikzpicture}
\begin{axis}
[color=black,grid=major,use units, xlabel=x, ylabel=y,
legend style={draw=none,fill=none,legend image post style={scale=1}, font=\scriptsize}, legend cell align={left}, legend pos=north west,]
\addplot[dashed,draw=green, line width=1] table [x index=0,y index=1, ]{\curves};
\addplot[ draw=green, line width=1] table [x index=0,y index=2, ]{\curves};
\legend{curve1, curve2};
\end{axis}
\end{tikzpicture}
\end{document}