动态地将一个 tex 文件 pdf 插入另一个 tex 文件内

动态地将一个 tex 文件 pdf 插入另一个 tex 文件内

假设和tex1.textex2.tex两个独立的 tex 文件,即它们都独立编译并生成 pdf 文件。我想动态地将的输出包含tex2.tex在内tex1.tex。我希望通过一步编译 tex1.tex 文件来实现这一点(如果我参考了它的结果,latex 会自动执行第二次编译作为先决条件步骤)

我的问题: 是否有任何机制(如可以添加到的一些指令tex1.tex)告诉 latex,当我编译时tex1.tex它应该首先编译tex2.tex为其对应的 pdf,然后编译tex1.tex其中包含作为图片的 tex2.pdf 文件的文档。

更新:

我正在添加示例文件,以tex1.tex使tex2.tex问题更加具体:假设我的tex1.tex如下所示:

\documentclass[11pt]{beamer}
\usetheme{default}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}

\author{Qartal}
\title{Inserting output of a tex file as pdf in one step}


\begin{document}
    \maketitle

    \begin{frame}
        \frametitle{}
        I want to inset bellow this line my diagram from file (tex2.tex):
    \end{frame}
\end{document}

I want to inset bellow this line my diagram from file (tex2.tex):


\end{document}

我的tex2.tex文件如下:

% TikZ chains with labeled edges
% Author: Stefan Kottwitz , http://texblog.net
\documentclass[a4paper,10pt]{article}
\usepackage{tikz}
%%%<
\usepackage{verbatim}
\usepackage[active,tightpage]{preview}
\PreviewEnvironment{tikzpicture}
\setlength\PreviewBorder{5pt}%
%%%>
\usetikzlibrary{arrows,chains,matrix,positioning,scopes}
%
\makeatletter
\tikzset{join/.code=\tikzset{after node path={%
\ifx\tikzchainprevious\pgfutil@empty\else(\tikzchainprevious)%
edge[every join]#1(\tikzchaincurrent)\fi}}}
\makeatother
%
\tikzset{>=stealth',every on chain/.append style={join},
         every join/.style={->}}
\tikzstyle{labeled}=[execute at begin node=$\scriptstyle,
   execute at end node=$]
%
\begin{document}
\begin{tikzpicture}
  \matrix (m) [matrix of math nodes, row sep=3em, column sep=3em]
    { 0 & A  & B  & C  & 0 \\
      0 & A' & B' & C' & 0 \\ };
  { [start chain] \chainin (m-1-1);
    \chainin (m-1-2);
    { [start branch=A] \chainin (m-2-2)
        [join={node[right,labeled] {\eta_1}}];}
    \chainin (m-1-3) [join={node[above,labeled] {\varphi}}];
    { [start branch=B] \chainin (m-2-3)
        [join={node[right,labeled] {\eta_2}}];}
    \chainin (m-1-4) [join={node[above,labeled] {\psi}}];
    { [start branch=C] \chainin (m-2-4)
        [join={node[right,labeled] {\eta_3}}];}
    \chainin (m-1-5); }
  { [start chain] \chainin (m-2-1);
    \chainin (m-2-2);
    \chainin (m-2-3) [join={node[above,labeled] {\varphi'}}];
    \chainin (m-2-4) [join={node[above,labeled] {\psi'}}];
    \chainin (m-2-5); }
\end{tikzpicture}
\end{document}

答案1

也许这就是你想要的:使用bashful包,它允许执行 shell 命令或外部程序(我现在只能在 Linux 上测试它)

外部程序/命令必须“封装”在

\bash
...
\END

一对。

注意:每次编译外部包装文档时都会编译第二个文件

tex1.tex

\documentclass{article}

\usepackage{pdfpages}
\usepackage{bashful}
\begin{document}

\bash[stderr]
pdflatex tex2ext
\END

\includepdf{tex2ext.pdf}



\end{document}

tex2ext.tex

\documentclass{article}

\usepackage{blindtext}
\begin{document}
\blindtext[2]


\end{document}

答案2

看起来像是 shell escape 的工作(\write18):

\documentclass{article}
\begin{filecontents*}{\jobname2.tex}
\documentclass{article}
\usepackage{blindtext}
\begin{document}
\blindtext[2]
\end{document}
\end{filecontents*}
\usepackage{pdfpages}
\immediate\write18{pdflatex \jobname2}
\begin{document}
\includepdf{\jobname2.pdf}
\end{document}

我使用了与Christian Hupfer 的回答但将它们一起运行(使用filecontents环境)以使事情变得更顺畅。

为了使这个工作,你需要允许 shell 转义,所以

pdflatex --shell-escape <filename>

在命令行或编辑器中的等效命令中。请注意,存在安全风险,因为\write18理论上任何指令都可能由第三方文件传递。

相关内容