有人能用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
。