查找整个 texmf 树

查找整个 texmf 树

我总是忘记用于搜索多个文件的命令行工具的语法。搜索.styTeX Live 中分发的所有文件以查找某个字符串(例如)的最简单/最快捷的方法是什么\everypar?(假设是 Linux/Mac OS X。)

答案1

texgrep我正在使用一个名为这样的脚本:

texgrep everypar sty

反斜杠应该被引用。以下是脚本的源代码:

搜索模式:

#!/bin/bash
# texgrep - searches for a text pattern contained in files
#   located inside the texmf trees
# usage: texgrep pattern [extension]
# usage examples:
#   texgrep phantomsection sty
#   texgrep \\\\def\\\\phantomsection
if [ $# -eq 0 ]; then
  echo 1>&2 Usage: texgrep pattern [extension]
  exit 1
fi
for path in TEXMFMAIN TEXMFDIST TEXMFHOME
do
 find `kpsewhich --var-value=$path` -type f -name "*$2" |xargs grep $1
done
exit 0

这对我来说很有价值,因为我喜欢阅读资料,这节省了我的时间。不久前,我把这个脚本放在了我的博客上:通过 shell 脚本加速工作

更多与搜索和工作相关的脚本:

搜索和编辑:

#!/bin/bash
# texedit - find one or several tex related files
#   and open them in the editor
if [ $# -eq 0 ]; then
  echo 1>&2 Usage: texedit file1 [file2] ...
  exit 1
fi
gedit `kpsewhich $@`
exit 0

搜索并查看:

#!/bin/bash
# texls - list the content of the directory
#   corresponding to a certain tex related file
if [ $# -eq 0 ]; then
  echo 1>&2 Usage:    texls filename [pattern]
  echo 1>&2 examples: texls babel.sty
  echo 1>&2           texls book.cls *clo
  exit 1
fi
ls `kpsewhich $1 | sed 's/\(.*\)\/.*$/\1\//'`$2
exit 0

搜索并更改目录:

#!/bin/bash
# texcd - change into the directory
#   corresponding to a certain tex related file
if [ $# -eq 0 ]; then
  echo 1>&2 Usage:    . texcd filename [pattern]
  echo 1>&2 examples: . texcd beamer.cls
  exit 1
fi
cd `kpsewhich $1 | sed 's/\(.*\)\/.*$/\1/'`
echo Changed to: `pwd`

所有操作都可以用 shell 函数来完成,而不是用脚本。就像 Michael 在我的博客中建议的那样:

function texcd ()
{
cd $(dirname "$(kpsewhich "$1")");
}

我希望它对某些人有用,即使它超出了问题的范畴。

答案2

好吧,我的命令行往往非常冗长,但我认为您可以通过以下方式搜索文件foo中所有出现的:sty$TEXMF

for texmf in `kpsewhich -expand-path '$TEXMF' | sed 's/:/ /g'`; do 
  find $texmf | grep '\.sty$' | xargs -J% grep -n 'foo' %; 
done

现在我喝完了早上的咖啡(并阅读了一些评论),更简洁的版本是:

grep -r --include=*.sty -n '\\everypar' `kpsewhich -expand-path '$TEXMF' | sed 's/:/ /g'`

答案3

这是我的做法:

ack --tex '\\everypar' /opt/texlive2010

输出效果非常好(还有一个 TextMate 包 - 但这不是问题所在),而且速度很快。--tex通过在命令行中设置~/.ackrc以下内容,确保您已获得该部分所需的一切:

--type-set=tex=.tex,.sty

(您还应该包括.mkiv.mkii,您知道;-))

答案4

对于 ConTeXt 来说稍微简单一些。只需在搜索框中输入搜索词即可这里

相关内容