Gibt es eine Möglichkeit, \input
nur 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 \GRAPH
sollte 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 \inputgraph
und `%% 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}
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 catchfilebetweentags
Paket verwenden.
In Ihrer Hauptdatei:
\usepackage{catchfilebetweentags}
....
\ExecuteMetaData[file.tex]{graph}
und in Ihremfile.tex
%<*graph>
code for the graph
%</graph>
Antwort3
Mit dem clipboard
Paket:
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 pdflatex
das Dokument zuerst ausführen \Copy
und dann das/die Dokument(e) mit \Paste
Befehlen 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.