我已经按格式写了几份报告article
。
我想将它们保存在单独的文件中,但将它们合并到更大的报告中。我删除了标题,但不想浏览每个文件并将每个部分重新标记为子部分,等等。有没有办法以编程方式处理这个问题?例如,在我的主文件中,我可能有
\section{Section1}
\input{file1}
并且file1.tex
我有
\section{File1Section1}
...
\section{File1Section2}
\section
我认为一些解决方案可能是在每次调用之前和之后重新定义\input
,或者我可以在其中包装调用的环境,\input
其中每个调用\section
都被重命名为\subsection
等等。 帮忙吗?
答案1
以下重新定义\input
为\section
(\subsection
以及子分段命令)通过\demotesections
。当然,这假设包含的文件内部没有比更深的级别\subparagraph
。但是,可以将这些设置\relax
为“无操作”:
\documentclass{article}
\usepackage{filecontents,lipsum}% http://ctan.org/pkg/{filecontents,lipsum}
% Create some dummy files
\begin{filecontents*}{file1}
\section{File1Section1}\lipsum[1]
\section{File1Section2}\lipsum[2]
\end{filecontents*}
\begin{filecontents*}{file2}
\section{File2Section1}\lipsum[1]
\section{File2Section2}\lipsum[2]
\end{filecontents*}
\let\oldinput\input
\newcommand{\savesections}{%
\let\oldsection\section% Store \section
\let\oldsubsection\subsection% Store \subsection
\let\oldsubsubsection\subsubsection% Store \subsubsection
\let\oldparagraph\paragraph% Store \paragraph
\let\oldsubparagraph\subparagraph% Store \subparagraph
}\AtBeginDocument{\savesections}
\newcommand{\restoresections}{%
\let\section\oldsection% Restore \section
\let\subsection\oldsubsection% Restore \subsection
\let\subsubsection\oldsubsubsection% Restore \subsubsection
\let\paragraph\oldparagraph% Restore \paragraph
\let\subparagraph\oldsubparagraph% Restore \subparagraph
}
\newcommand{\demotesections}{%
\let\section\subsection% Modify \section to be \subsection
\let\subsection\subsubsection% Modify \subsection to be \subsubsection
\let\subsubsection\paragraph% Modify \subsubsection to be \paragraph
\let\paragraph\subparagraph% Modify \paragraph to be \subparagraph
%\let\subparagraph\relax% Make \subparagraph a no-op
}
\renewcommand{\input}[1]{%
\demotesections% Demote sections
\oldinput{#1}% Input file
\restoresections}% Restore sections
\begin{document}
\section{Section1}
\input{file1}
\input{file2}
\subsection{Just a subsection}
\section{Section2}
\input{file1}
\input{file2}
\end{document}
首先使用 保存分段单元\savesections
。通过 重新定义\demotesections
在新宏中\input
作为子序列“本地化” \restoresections
,允许在外部使用默认分段单元而不会丢失功能。
答案2
无论如何,在我回到这里查看@Werner 的优雅解决方案之前,我尝试了一下。我会将其纳入他的示例中。
\documentclass{article}
\usepackage{filecontents,lipsum}% http://ctan.org/pkg/{filecontents,lipsum}
% Create some dummy files
\begin{filecontents*}{file1}
\section{File1Section1}\lipsum[1]
\section{File1Section2}\lipsum[2]
\end{filecontents*}
\begin{filecontents*}{file2}
\section{File2Section1}\lipsum[1]
\section{File2Section2}\lipsum[2]
\end{filecontents*}
\newcounter{toplevel}
\setcounter{toplevel}{1}
%
\newcommand{\open}{
\setcounter{section}{0}
\renewcommand*{\thesection}{\arabic{toplevel}.\arabic{section}}
}
%
\newcommand{\close}{
\addtocounter{toplevel}{1}
\setcounter{section}{\value{toplevel}}
\renewcommand*{\thesection}{\arabic{toplevel}}
}
%
\renewcommand*{\thesubsection}{\arabic{toplevel}.\arabic{section}.\arabic{subsection}}
\begin{document}
\section{Section1}
\open
\input{file1}
\input{file2}
\subsection{Just a subsection}
\close
\section{Section2}
\open
\input{file1}
\input{file2}
\close
\end{document}
它有点管用,只是它需要更好的格式,所以 的\thesubsection
字体较小,而且\tableofcontents
无法识别级别的降级,所以打印效果不是很好。除了美观之外,\thesubsection
主文件中的任何 都会在 和\open
语句之间被进一步降级(以我的笨拙方式) \close
。无论如何,这是我可以用我的知识\LaTeX
(基本上,\newcounter
,\setcounter
和\renewcommand
)做的事情。