部分文件输入

部分文件输入

有没有办法将file1.tex某些标记指定的 LaTeX 部分输入到另一个 LaTeX 文件中file2.tex?(例如,我不想输入\begin{document}\maketitle等)

我知道我可以使用和的file3.tex输入内容来创建,但能够直接执行此操作(如上所述)会方便得多。file1.texfile2.tex

下面是file1.tex我想要包含的内容的一个示例file2.tex

\documentclass[11pt]{amsart}
\title{My Tikz Pictures}
\begin{document}
\maketitle

% Start input here

\newcommand{\picA}{...}
\newcommand{\picZ}{...}

% End input here

\begin{document} 
....
\end{document} 

答案1

如果您想要包含的是项目的常见定义,我建议您创建一个包文件,例如adampics.sty

% Next line is optional
\ProvidesPackage{adampics}[2020-10-10 v1.0 Common definitions for Adam's documents]
\newcommand{\picA}{...}
\newcommand{\picZ}{...}

\usepackage{adampics}然后只需在您的文档中执行即可。


如果由于某种原因,你需要读入完整文件并提取其中的一部分,那么可以这样做。在要输入的文件中,添加两个锚点\csname adamSTARTinput\endcsname\csname adamSTOPinput\endcsname

% loadedfile.tex
\documentclass[11pt]{amsart}
\title{My Tikz Pictures}
\begin{document}
\maketitle

\csname adamSTARTinput\endcsname

\newcommand{\picA}{...}
\newcommand{\picZ}{...}

\csname adamSTOPinput\endcsname

\begin{document} 
....
\end{document}

作为一个\csname ...\endcsname生成的宏,只要它们没有被定义,它们就不会执行任何操作,因此在独立模式下运行上述文档将正常进行。

然后在调用者文档中执行以下操作:

\documentclass{article}

\makeatletter
\def\inputfilepart#1{%
  \let\adamSTOPinput\endinput
  \long\def\loadfilepartaux##1%
    \csname adamSTARTinput\endcsname{}
  \expandafter\loadfilepartaux\@@input "#1"
}
\makeatother

\begin{document}

\texttt{\meaning\picZ} % undefined
\inputfilepart{loadedfile.tex}
\texttt{\meaning\picZ} % \long macro:->...

\end{document}

(但你必须确保锚点存在于加载的文件中,并且锚点不在括号内)。

相关内容