使用“\input”將文檔的一部分插入到另一個文檔中

使用“\input”將文檔的一部分插入到另一個文檔中

有沒有什麼方法可以\input將文件的特定部分插入到另一個文件中?我打算使用它來提高包含大量 pgfplots 圖表的文章的可讀性,方法是將所有圖表移動到另一個文件,並使用類似\input{file.tex:graph1}將每個圖表插入需要的位置,而不是顯示所有圖表一起

答案1

您可以設定包含圖形程式碼的文件,例如

% from https://tex.stackexchange.com/a/234521/4427

\GRAPH graph1
\begin{tikzpicture}
  \begin{axis}[ylabel={Y label},xmin=-1,xmax=1,width=3in,height=2in]
    \addplot coordinates {(-1,-1) (1,1)};
    \coordinate (NE) at (rel axis cs: 1,1);% upper right corner of axis
  \end{axis}
  \path (-15mm,-5mm) ($(NE)+(3mm,2mm)$);
  %\draw[red] (-15mm,-5mm) rectangle ($(NE)+(3mm,2mm)$);% to fine tune offsets
\end{tikzpicture}
\ENDGRAPH

\GRAPH graph2
\begin{tikzpicture}
  \begin{axis}[xmin=-10,xmax=10,width=3in,height=2in]
    \addplot coordinates {(-10,-10) (10,10)};
    \coordinate (NE) at (rel axis cs: 1,1);
  \end{axis}
  \path (-15mm,-5mm) ($(NE)+(3mm,2mm)$);
  %\draw[red] (-15mm,-5mm) rectangle ($(NE)+(3mm,2mm)$);% to fine tune offsets
\end{tikzpicture}
\ENDGRAPH

(第一條評論只是為了表明評論受到尊重並說明代碼的來源)。我將其保存為murfitt-graphs.tex,但名稱是任意的,您可以有多個這樣的檔案。結構很重要:該行後面\GRAPH應該是圖形的符號名稱(無論您想要什麼 ASCII 字元字串)。

現在你的主文檔應該有以下程式碼;相關部分在%% define \inputgraph和 `%% end之間

\documentclass{article}

\usepackage{pgfplots}
\usetikzlibrary{calc}

%% define \inputgraph
\newcommand{\inputgraph}[2]{% #1 = file, #2 = graph name
  \long\def\GRAPH ##1#2 {}%
  \input{#1}
}
\let\ENDGRAPH\endinput
%% end


\begin{document}

\inputgraph{murfitt-graphs}{graph2}

\inputgraph{murfitt-graphs}{graph1}

\inputgraph{murfitt-graphs}{graph2}

\end{document}

在此輸入影像描述

相比有什麼優勢catchfilebetweentags?這裡的程式碼不是作為宏的參數讀入的。如果你使用了錯誤的標籤,你會得到一個錯誤

Runaway argument?
graph1 \begin {tikzpicture} \begin {axis}[ylabel={Y label},xmin=-1,xm\ETC.
! File ended while scanning use of \GRAPH.

並且不會處理任何圖表。

答案2

你可以使用這個catchfilebetweentags包。

在你的主文件中:

\usepackage{catchfilebetweentags}
....
\ExecuteMetaData[file.tex]{graph}

並在你的file.tex

%<*graph>
code for the graph
%</graph>

答案3

clipboard包:

圖.tex:

\documentclass{article}
\usepackage{clipboard}
\newclipboard{mygraphs}
\begin{document}
 Something ...
\Copy{graph1}{Code of graph 1}
\Copy{graph2}{Code of graph 2}
\Copy{graph1}{Code of graph 3}
 More code ... 
\end{document}

主.tex:

\documentclass{article}
\usepackage{clipboard}
\openclipboard{mygraphs}
\begin{document}
A nice graph:\Paste{graph2}
\end{document}

您必須pdflatex在文件中執行\Copy第一個,然後使用命令編譯文件\Paste

答案4

改善接受的答案,如果您希望能夠編譯您的murfitt-graphs.tex,請改為這樣寫:

\documentclass{article}

\usepackage{pgfplots}
\usetikzlibrary{calc}

%-------------------------------------------------------------------------------
% Escape command
\newcommand{\GRAPH}[0]{}
\newcommand{\ENDGRAPH}[0]{}
%-------------------------------------------------------------------------------

\begin{document}

\GRAPH graph1
\begin{tikzpicture}
  \begin{axis}[ylabel={Y label},xmin=-1,xmax=1,width=3in,height=2in]
    \addplot coordinates {(-1,-1) (1,1)};
    \coordinate (NE) at (rel axis cs: 1,1);% upper right corner of axis
  \end{axis}
  \path (-15mm,-5mm) ($(NE)+(3mm,2mm)$);
  %\draw[red] (-15mm,-5mm) rectangle ($(NE)+(3mm,2mm)$);% to fine tune offsets
\end{tikzpicture}
\ENDGRAPH

\GRAPH graph2
\begin{tikzpicture}
  \begin{axis}[xmin=-10,xmax=10,width=3in,height=2in]
    \addplot coordinates {(-10,-10) (10,10)};
    \coordinate (NE) at (rel axis cs: 1,1);
  \end{axis}
  \path (-15mm,-5mm) ($(NE)+(3mm,2mm)$);
  %\draw[red] (-15mm,-5mm) rectangle ($(NE)+(3mm,2mm)$);% to fine tune offsets
\end{tikzpicture}
\ENDGRAPH

\end{document}

用作\newcommand{\COMMANDNAME}[0]{}轉義命令。靈感來自這裡

相關內容