如何覆盖 filecontents 环境生成的文件

如何覆盖 filecontents 环境生成的文件

我正在使用 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}

相关内容