重命名部分级别?

重命名部分级别?

我已经按格式写了几份报告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)做的事情。

相关内容