Usar `\input` para insertar una sección de un documento en otro

Usar `\input` para insertar una sección de un documento en otro

¿Hay alguna forma \inputde 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 \GRAPHdebe 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 \inputgraphy `%% 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}

ingrese la descripción de la imagen aquí

¿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 catchfilebetweentagspaquete.

En su archivo principal:

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

y en tufile.tex

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

Respuesta3

Con el clipboardpaquete:

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 pdflatexel documento con el \Copyprimero y luego compilar los documentos con \Pastecomandos.

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í.

información relacionada