当然,任何 LaTeX 编辑器都会自动完成常见的 LaTeX 命令和环境。许多(大多数?)编辑器都允许用户添加要自动完成的新命令。但是,在技术文档中通常会有一些特定的术语,这些术语经常出现(并且可能很长)值得自动完成,但这些术语不是命令,并且因文档而异。因此,能够自动完成文档(或任何打开的文档)中存在的任何单词是相当不错的。
我知道 Emacs、Vim、Kile 和 TeXstudio 都支持这一点;还有其他的吗?
答案1
任何LaTeX 编辑器可以通过宏定义来适应这种自动完成风格。这可能是执行此操作的最快方法,而无需从现有编辑器切换到新/不同的编辑器。在我看来,它灵活、可转移,并能根据 LaTeX 软件包的条件支持来适应您可能需要的大量可变性。
由于替换文本通常用在常规文本中,因此xspace
包裹非常有用。它仅在命令序列后面跟着空格时才在命令序列后面插入空格。这是在常规文本中使用命令序列的常见问题。例如,A \TeX command sequence.
将扩展为,A TeXcommand sequence.
因为空格代表结尾\TeX
,因此会被吞噬。xspace
解决方法是:
\documentclass{article}
\usepackage{xspace}% http://ctan.org/pkg/xspace
% Definitions for words to auto-complete
\newcommand{\sync}{synchrocyclotrons\xspace}%
%...
\begin{document}
What mighty \sync you have, sir! Get me one of those \sync.
\end{document}
如果您改变主意(引用 ABBA 的话),只需更改宏定义即可。这样做可能与修改此类编辑器提供的自动完成部分所花的努力相同。
更进一步,您甚至可以将宏定义为具有(比如说)带星号的版本,*
如果使用则扩展为复数形式,否则使用单数形式:
\documentclass{article}
\usepackage{xparse}% http://ctan.org/pkg/xprase
\usepackage{xspace}% http://ctan.org/pkg/xspace
% Definitions for words to auto-complete
\NewDocumentCommand{\sync}{s}{%
synchrocyclotron\IfBooleanTF{#1}{s}{}\xspace
}
%...
\begin{document}
That's a huge \sync! There are plenty more \sync* over there.
\end{document}
这xparse
包裹提供一个简单的界面来处理带星号版本的命令/环境。
答案2
除了AucTeX
用于宏或环境的插入/完成命令之外,emacs
还提供了一种在任何缓冲区和任何模式下扩展任何单词的特定方法:命令dabbrev-expand
(M-/)。
dabbrev-expand
扩展为最近的、前一个单词,该单词是该单词的前缀。如果未找到合适的前一个单词,则考虑 point 后面的单词。如果仍未找到合适的单词,则查找由变量 指向的函数所接受的缓冲区dabbrev-friend-buffer-function
。正前缀参数 N 表示将第 N 个参数向后移动清楚的 可能性。否定论点则认为应该向前搜索。
如果光标没有从上一个扩展的末尾移动并且没有给出参数,则用下一个尚未尝试的可能扩展替换先前进行的扩展。
(后一个功能非常方便...)
答案3
Kile 可以自动完成文档中的所有单词。这是该功能的文档。
答案4
如果您使用的是 Windows - TeXStudio(早期的 TeXmakerX)具有这些功能。缺点是每次您启动某个环境或命令时,它都会显示完整的帮助!