我遇到了有关使用软件包创建的切换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
subfiles
main
在编译文件时确实会使用文件前言中的任何内容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}