编辑大型文档非常慢。因此,人们将其拆分成多个部分,并创建一个主文档,然后\input this
执行\input that
。但:当我在编辑时,this.tex
我想\bye
在末尾添加一个以使预览正常工作,但是如果文件\bye
以主文档的编译结束,则会在之后停止\input this
。
必须有一个标准的解决方案;标题推测也许有一种方法可以说“ \bye
,除非正在输入此文件”......
答案1
一种解决方案可能是在主文档中定义自定义\bye
命令,例如\mybye
。在子文档中,您可以检查此命令是否已定义,如果没有,则将其定义为\bye
。主文档中的定义可以为空。
可以使用\ifcsname
(e-TeX 宏)来检查命令是否存在。
MWE,主要文件:
Hello from master document\par
\def\mybye{}
\input subdocument
more text in master document
\bye
子文件:
\ifcsname mybye\endcsname\else\def\mybye{\csname bye\endcsname}\fi
Hello from subdocument\par
\mybye
答案2
您可以使用仅在主文件中定义的宏。
文件 dcu.tex
\def\ABCDEFGHIJK{}
\input dcu1
\input dcu2
\bye
文件dcu1.tex
This is the first file
\ifx\ABCDEFGHIJK\undefined\csname bye\expandafter\endcsname\fi
文件dcu2.tex
This is the second file
\ifx\ABCDEFGHIJK\undefined\csname bye\expandafter\endcsname\fi
答案3
如果您使用乳胶,您可以使用expl3
定义boolean
\l_bye_bool
(最初设置为 false)来判断是否应该输入。
\bye
设置\l_bye_bool
为 true\myinput
根据判断是否输入文件\l_bye_bool
然后如果a1.tex
包含\bye
,则后续操作\myinput
将不执行任何操作。
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\bool_new:N \l_bye_bool
\bool_gset_false:N \l_bye_bool
\cs_new_protected:Nn \l_bye_cs: {\bool_gset_true:N \l_bye_bool}
\cs_new_protected:Nn \l_input_cs:n {
\if_bool:N \l_bye_bool {}
\else: {\input{#1}}
\fi:
}
\NewDocumentCommand {\bye} { } {\l_bye_cs:}
\NewDocumentCommand {\myinput} { m } {\l_input_cs:n {#1}}
\ExplSyntaxOff
\begin{document}
\myinput{a1.tex}
\myinput{a2.tex}
\end{document}