简单地说,我有一个包含几个文件的文档(仅当它们存在时,否则它什么也不做)。
然后我想在新的一页上开始“某事”。
问题是,如果没有任何我想要包含的文件确实存在,我不希望“某些内容”出现在第 2 页,而第 1 页只包含标题。在这种情况下,我希望“某些内容”出现在第 1 页,就在标题下方。
我认为我找到了以下解决方案(我绝对不是乳胶专家):
\documentclass{article}
\usepackage{ifthen}
\title{Sample Doc}
\author{Giulio}
\newboolean{p}
\begin{document}
\setboolean{p}{false}
\maketitle
\IfFileExists{toBeIncluded.tex}
{
\setboolean{p}{true}
\input{toBeIncluded.tex}
}
{
% do nothing
}
\IfFileExists{toBeIncluded2.tex}
{
\setboolean{p}{true}
\input{toBeIncluded2.tex}
}
{
% do nothing
}
\ifthenelse{\boolean{p}}
{
\newpage
}
{
}
This should start on a new page, unless there is really nothing before it, in which case it should start jst below the title on page one.
\end{document}
这是一个不错的解决方法吗?我是否遗漏了什么微妙之处?还有更好的方法吗?
多谢
答案1
第一个问题:是的,这是一个体面的这样做的方法。
第二个问题:是否有更好的这样做?当然,更好的有时这取决于旁观者的看法,但我建议,为了让您更轻松地输入内容,并为文档将来可能的扩展提供更灵活的方式,将您的代码包装成两个宏:
\myinclude
它会测试文件是否存在,如果包含该文件则设置布尔值。\mynewpage
检查布尔值,并在出现分页符的情况下将布尔值重置为 false(这允许您在代码中多次使用此构造)。
以下是一个例子:
\documentclass{article}
\usepackage{ifthen}
\usepackage{lipsum}
\usepackage{filecontents}
\begin{filecontents*}{test3.tex}
\lipsum[2]
\end{filecontents*}
\newboolean{p}\setboolean{p}{false}
\newcommand{\myinclude}[1]{\IfFileExists{#1}{\setboolean{p}{true}\input{#1}}{}}
\newcommand{\mynewpage}{\ifthenelse{\boolean{p}}{\clearpage\setboolean{p}{false}}{}}
\title{Sample Doc}
\author{Giulio}
\begin{document}
\maketitle
\myinclude{test1.tex}
\myinclude{test2.tex}
\mynewpage
\lipsum[1]
\section{My section}
\myinclude{test3.tex}
\mynewpage
\lipsum[3]
\end{document}