是否可以在纯 TeX 中从 stdin 读取?我发现在 LaTeX 中可以使用\typein
(参见这里),然而 TeX 不支持此功能。还有其他选择吗?
MWE 在乳胶:
\documentclass{article}
\begin{document}
\typein[\name]{What is your name?}%
Hello, ``\name''
\end{document}"
这是 pdfTeX,版本 3.14159265-2.6-1.40.18(TeX Live 2017/Debian)(预加载格式=pdfl
答案1
当你说\read<number> to \foo
数字与打开的输入流不对应并且数字为非负数时,TeX 会提示你
\foo=
如果数字大于 15,则无法打开流,因此 16 以上的任何整数都可以。如果使用负数,则不会显示提示,但 TeX 仍会等待输入。
存在尾随空格的问题,它来自您按回车键插入的行尾。可以通过将行尾字符设置为类别代码 9 来解决此问题。
\def\prompt#1{%
\begingroup
\catcode`\^^M=9 % ignore the end-of-line
\read 20 to #1%
\expandafter\endgroup
\expandafter\def\expandafter#1\expandafter{#1}%
}
\prompt\foo
\show\foo
控制台输出是
\foo=xyz
> \foo=macro:
->xyz.
l.11 \show\foo
?
在第一行中,TeX 提示输入\foo
;我输入了xyz
并按回车键。的输出\show
告诉我们没有空格。分组限制了类别代码的变化。使用链,\expandafter
我们还可以\foo
在当前组之外定义前关闭它。
答案2
\write 18
与输出类似,以下内容解决了我的问题。
\read 18 to \name
来自 stdin 的内容出现在 中\name
,但末尾出现了一个空格。