¿Hay alguna forma \input
de insertar solo una sección específica de un documento en otro? Tengo la intención de usar esto para mejorar la legibilidad de un artículo con muchos gráficos de pgfplots, moviendo todos mis gráficos a otro archivo y usando algo como \input{file.tex:graph1}
insertar cada gráfico donde sea necesario, en lugar de mostrarlos todos. juntos
Respuesta1
Puede configurar su archivo que contiene el código para los gráficos como
% 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
(El primer comentario es solo para mostrar que los comentarios se respetan y para indicar la fuente del código). Lo guardé como murfitt-graphs.tex
, pero el nombre es arbitrario y puedes tener varios archivos como este. La estructura es importante: la línea \GRAPH
debe ir seguida del nombre simbólico del gráfico (cualquier cadena de caracteres ASCII que desee).
Ahora su documento principal debería tener el siguiente código; la parte relevante está entre %% define \inputgraph
y `%% 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}
¿Cuál es la ventaja sobre catchfilebetweentags
? Que aquí el código no se lee como argumento de una macro. En caso de que uses una etiqueta incorrecta, obtendrás un error.
Runaway argument?
graph1 \begin {tikzpicture} \begin {axis}[ylabel={Y label},xmin=-1,xm\ETC.
! File ended while scanning use of \GRAPH.
y no se procesará ningún gráfico.
Respuesta2
Podrías usar el catchfilebetweentags
paquete.
En su archivo principal:
\usepackage{catchfilebetweentags}
....
\ExecuteMetaData[file.tex]{graph}
y en tufile.tex
%<*graph>
code for the graph
%</graph>
Respuesta3
Con el clipboard
paquete:
gráficos.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}
principal.tex:
\documentclass{article}
\usepackage{clipboard}
\openclipboard{mygraphs}
\begin{document}
A nice graph:\Paste{graph2}
\end{document}
Debe ejecutar pdflatex
el documento con el \Copy
primero y luego compilar los documentos con \Paste
comandos.
Respuesta4
Mejorando elrespuesta aceptada, si quieres poder compilar tu murfitt-graphs.tex
, escribe esto en su lugar:
\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}
Se \newcommand{\COMMANDNAME}[0]{}
utiliza como comando de escape. Inspiración deaquí.