TeX (plain-tex) 中的条件 \end 或 \bye

TeX (plain-tex) 中的条件 \end 或 \bye

有人能用TeX-Code找出条件\end或吗?(纯文本)\bye

我想将几行放入一个 TeX 文件中,每行都以 结尾\end,在文档完成之前进行编译,以获取和查看文档的“现状”,然后使用最后声明的“\end”命令进行最终编译。

例子:

This is the end \end This is the other end \end This is the last end \end

第一个和第二个\end命令应该被停用或删除,只要另一个\end命令跟随,就只有第三个(或最后一个)\end命令应该被扩展或使用。

答案1

只要文件最后没有空行,这种方法就可以奏效。

\let\TeXend\end
\def\blurb{}
\everyeof{\blurb}
\def\end{\futurelet\next\checkend}
\def\checkend{%
  \ifx\next\blurb
    \csname TeXend\expandafter\endcsname
  \fi
}

This is the end \end This is the other end \end This is the last end \end

但它容易出错,而且在我看来毫无用处。需要 e-TeX。

但是,我看不出这有什么用处。我宁愿使用

\def\END{}
%\let\END\bye % when you want to remove the final notes

The document text

This is the end \END
This is the other end \END
This is the last end \END

\bye

\end如果您事先知道要停止的命令数,那么这相当容易:

\newcount\ends
\def\END{\advance\ends-1 \ifnum\ends=0 \csname bye\expandafter\endcsname\fi}


\ends=3

ABC \END DEF \END GHI \END JKL \END MNO \END PQR \END STU \END
\bye

这将打印

ABC DEF GHI

TeX 拒绝处理条件中跳过的文本中的标记\bye,但如果跳过它也不会犹豫\csname bye\endcsname。通过在执行之前\expandafter进行扩展,确保我们不会以未完成的条件结束。\fi\bye

答案2

例子example.tex

This \end is \end the \end

编译使用:

pdftex -jobname example "\let\TeXend\end\let\end\relax \input example \TeXend"

但我真的不明白你为什么想要这样做。

答案3

\csname end\endcsname什么好处吗?比如,

\def\temporalend{\csname end\endcsname}
%\def\temporalend{}

Section 1
\temporalend

Section 2
\bye

答案4

谢谢您的回答。我用数字条件解决了这个问题。

\newcount\ends
\newcount\lastends
\ends=0
\lastends=3
\def\myend{\advance\ends by 1 \ifnum\ends=\lastends \end \else \fi}
ABC \myend DEF \myend GHI \myend JKL \myend MNO \myend PQR \myend STU \myend
\bye

通过为 赋值\lastends,文档在 处进行编译,\ends达到 的值\lastends,最终通过达到 命令 强制进行编译\bye。 该命令\bye在条件语句中不起作用,因此我使用了\end

相关内容