有什么方法可以\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]{}
退出命令。灵感来自这里。