假设和tex1.tex
是tex2.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
理论上任何指令都可能由第三方文件传递。