2

所以,我有一个关于让字数在 emacs LaTeX 模式下正常工作的问题(实际上是 auctex,但没关系。)答案很好。然后我发现我在(buffer-file-name)包含空格时遇到了麻烦。这搞得一团糟。这个问题也解决了。现在的问题是,当没有任何空格时,解决方案就会中断。

所以目前我有两个 emacs 命令:

(defun latex-word-count ()
  (interactive)
  (shell-command (concat "/usr/local/bin/texcount.pl "
                         "-inc "
                     (shell-quote-argument (concat "'" (buffer-file-name) "'")))))

这在包含文件夹中有空间时有效。

(defun latex-word-c-nospace ()
  (interactive)
  (shell-command (concat "/usr/local/bin/texcount.pl "
             "-inc "
             (shell-quote-argument (buffer-file-name)))))

这适用于包含文件夹名称中没有空格的情况。(好的,所以缩进有点奇怪,但无论如何)

我的问题:有没有办法让相同的功能在两种情况下都起作用?这个答案表明问题出在 texcount 而不是 emacs 上。有没有办法在不弄乱 texcount.pl 的情况下做到这一点?还是我最好的办法是按照 Chris Johnsen 在 SU 上建议的方式戳 texcount.pl?

4

3 回答 3

5

无论文件名中是否有空格,您的第二个例程都应该有效。例如,我创建了这个小命令:

(defun ls-l ()
  (interactive)
  (shell-command (concat "ls -l "
                         (shell-quote-argument
                          (buffer-file-name)))))

当我在编辑名为的文件foo.txt和编辑名为foo bar.txt.

于 2010-07-19T16:50:24.153 回答
1

您始终可以选择让 emacs 确定文件名是否有空格:

(defun latex-word-count ()
  (interactive)
  (let* ((has-space (string-match " " buffer-file-name))
         (quoted-name (shell-quote-argument
                       (if has-space
                           (concat "'" buffer-file-name "'")
                         buffer-file-name))))
    (shell-command (concat "/usr/local/bin/texcount.pl "
                           "-inc "
                           quoted-name))))
于 2010-07-21T08:54:14.833 回答
1

我是 TeXcount 的开发人员,不久前看到了这篇文章。

正如所指出的,问题出在 TeXcount 上,所以最好的解决方案是修复 TeXcount,而不是破解其他解决方案。我在 TeXcount 网页上提供了一个更新,希望可以在其中解决问题:http: //folk.uio.no/einarro/TeXcount/download.html

注意:这是新网页的临时版本,如果我决定使用 TeXcount 的新地址,以后可能会移动。

出现问题的原因是,为了在 Windows 下允许文件名中使用通配符,我使用 <@files> 来获取所有文件,而这不喜欢空格。在 Linux 中,您可以只使用不带 glob (<...>) 的 @files,但我希望 TeXcount 也可以在 Windows 中工作,因此更好的解决方案是在将空格传递给 glob 之前对其进行转义。

希望这会有所帮助,如果没有,请与我联系,我会看看我是否可以提供帮助......我不是这里的常客,所以如果发布为回复,我可能不会注意到问题。

艾纳尔

于 2010-07-23T12:16:59.620 回答