我发现自己更愿意\typeout
直接使用 (pdf)latex shell 和命令 - 不幸的是,有一个问题:没有命令行历史记录。我认为在 Unix 终端仿真器(或像bash
? 这样的 shell 无法真正分辨)中,此功能由 GNU 提供readline
。因此,在readline
启用的 shell 上,我可以按向上和向下箭头,并调用过去的命令,并使用 轻松重新执行它们ENTER;我还可以使用CTRL+ 向左或向右箭头键跳过单词。
不幸的是,当我在 shell 中尝试这些组合时pdflatex
,我得到了这个:
$ pdflatex
This is pdfTeX, Version 3.1415926-2.3-1.40.12 (TeX Live 2011)
restricted \write18 enabled.
**\typeout{a}
entering extended mode
LaTeX2e <2011/06/27>
Babel <v3.8m> and hyphenation patterns for english, dumylang, nohyphenation, lo
aded.
a
*^[[A^[[D^[[C^[[1;5D^[[1;5C^[[1;5A^[[1;5B^C
...也就是说,我得到了像这样的转义键序列^[[A
,并且显然没有键盘外壳导航。
所以我的问题是:latex
原则上是否可以构建readline
支持键盘外壳交互的功能?如果发行版不构建此类支持,即使存在(以减少依赖性),我也能理解——我只是想知道,原则上是否已经存在用于构建 latex 的“配置设置” readline
(至少在 *nix 系统上)。
答案1
根据@phg 的建议,我将代表他发布此答案:如果运行兼容 posix 的系统,请尝试rlwrap tex
;它确实会记录在 TeX 命令行上键入的键,而无需将其链接到readline
。
您的(pdf)latex
很可能只是指向 pdftex 解释器的符号链接,而 pdftex 解释器实际上是在后台运行的。考虑到这一点,从@phg 的贡献:
链接 readline 会违反 Luatex 和 Pdftex 的核心原则。(我不知道 Xetex 的情况——也许他们不喜欢这个许可证。)一方面,这意味着引入运行时依赖项,另一方面,无论库有多普及和流行,它仍然是特定于平台的。这不是扩展像交互模式这样有争议的功能的最佳基础!
不过,没有 readline 的交互式解释器非常不方便。幸运的是,通过安装实用程序可以很容易地弥补可用性方面的差距
rlwrap(1)
。它采用现有的哑解释器,并在输入上透明地添加 readline 层。这不会影响输出,除了 readline 会执行的操作,例如显示“插入模式”指示符 (show-mode-in-prompt
) - 因此最好在脚本中避免使用它。