有条件\再见?

有条件\再见?

编辑大型文档非常慢。因此,人们将其拆分成多个部分,并创建一个主文档,然后\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}

相关内容