子文件归档导致切换问题

子文件归档导致切换问题

我遇到了有关使用软件包创建的切换etoolbox和通过 进行子文件归档的问题subfiles。每次编译子文件时,我都想对输出进行一些细微的更改。切换似乎是解决此问题的合适方法。这是我的 MWE:

对于主文件:

\documentclass{scrbook}

\usepackage{subfiles}
\usepackage{etoolbox}

\newtoggle{documentsplit}

\begin{document}

\subfile{chap1/chap1}

\end{document}

对于子文件:

\documentclass[../Main]{subfiles}

\settoggle{documentsplit}{true}

\begin{document}

\iftoggle{documentsplit}
    {\chapter{The document ist split}}
    {\chapter{The document is complete}}

\end{document}

我收到了主文件和子文件的相同输出(“文档被拆分”),这表明当我运行主文件时,切换以某种方式激活,即使它位于之前\begin{document}

我有两个问题:

  1. 如何在运行主文件时收到输出“文档已完成”?
  2. 切换开关怎么会激活?子文件文档明确指出不应该出现这种情况。

简单介绍一下背景:我正在排版一个版本,其中包含了同一作者的合集文章。最终的想法是提供单篇文章和完整的作品。提供单篇文章时,必须将作者姓名放在显眼的地方,例如在章节标题下方。在完整的书中,这没有必要,因为作者是显而易见的。版权信息等也是如此。

感谢您的帮助。

答案1

subfilesmain在编译文件时确实会使用文件前言中的任何内容sub,但对于文件的编译运行来说,反之亦然main

的文档subfiles及其代码表明\skip@preamble仅重新定义\documentclass\relax\document\enddocument因此文件序言中的任何语句(sub例如)\settoggle也将进入主文件的编译,这意味着是documentsplit正确的。

这里有一个略有不同的方法,通过检查文件中的main类是否存在subfiles。在第一种情况下,将开关设置为 true,否则明确将其设置为 false(以防万一之前在某个地方意外将其设置为 true)

\documentclass{scrbook}

\usepackage{etoolbox}
\newtoggle{documentsplit}
\usepackage{subfiles}

\makeatletter
\@ifclassloaded{subfiles}{%
  \toggletrue{documentsplit}
}{\togglefalse{documentsplit}}
\makeatother

\begin{document}


\subfile{chap1/chap1}

\end{document}

第一章.tex

\documentclass[../Main]{subfiles}


\begin{document}

\iftoggle{documentsplit}
{\chapter{The document ist split}}
{\chapter{The document is complete}}
\end{document}

相关内容