有没有办法将file1.tex
某些标记指定的 LaTeX 部分输入到另一个 LaTeX 文件中file2.tex
?(例如,我不想输入\begin{document}
、\maketitle
等)
我知道我可以使用和的file3.tex
输入内容来创建,但能够直接执行此操作(如上所述)会方便得多。file1.tex
file2.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}
(但你必须确保锚点做存在于加载的文件中,并且锚点不在括号内)。