Verwenden von `\input` zum Einfügen eines Abschnitts eines Dokuments in ein anderes

Verwenden von `\input` zum Einfügen eines Abschnitts eines Dokuments in ein anderes

Gibt es eine Möglichkeit, \inputnur einen bestimmten Abschnitt eines Dokuments in ein anderes einzufügen? Ich beabsichtige, dies zu verwenden, um die Lesbarkeit eines Artikels mit vielen pgfplots-Diagrammen zu verbessern, indem ich alle meine Diagramme in eine andere Datei verschiebe und etwas wie verwende, \input{file.tex:graph1}um jedes Diagramm dort einzufügen, wo es benötigt wird, anstatt sie alle zusammen anzuzeigen

Antwort1

Sie können Ihre Datei mit dem Code für die Diagramme wie folgt einrichten:

% 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

(der erste Kommentar dient nur dazu, zu zeigen, dass Kommentare berücksichtigt werden und die Quelle des Codes anzugeben). Ich habe es als gespeichert murfitt-graphs.tex, aber der Name ist beliebig und Sie können mehrere Dateien wie diese haben. Die Struktur ist wichtig: Auf die Zeile \GRAPHsollte der symbolische Name des Diagramms folgen (welche ASCII-Zeichenfolge Sie auch immer möchten).

Jetzt sollte Ihr Hauptdokument den folgenden Code enthalten; der relevante Teil steht zwischen %% define \inputgraphund `%% 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}

Bildbeschreibung hier eingeben

Was ist der Vorteil gegenüber catchfilebetweentags? Dass hier der Code nicht als Argument eines Makros eingelesen wird. Falls Sie ein falsches Label verwenden, erhalten Sie eine Fehlermeldung

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

und es wird kein Diagramm verarbeitet.

Antwort2

Sie könnten das catchfilebetweentagsPaket verwenden.

In Ihrer Hauptdatei:

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

und in Ihremfile.tex

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

Antwort3

Mit dem clipboardPaket:

graphen.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}

main.tex:

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

Sie müssen pdflatexdas Dokument zuerst ausführen \Copyund dann das/die Dokument(e) mit \PasteBefehlen kompilieren.

Antwort4

Verbesserung derakzeptierte Antwort, wenn Sie Ihre kompilieren möchten murfitt-graphs.tex, schreiben Sie stattdessen Folgendes:

\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}

Das \newcommand{\COMMANDNAME}[0]{}wird als Escape-Befehl verwendet. Inspiration vonHier.

verwandte Informationen