我总是忘记用于搜索多个文件的命令行工具的语法。搜索.sty
TeX 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 来说稍微简单一些。只需在搜索框中输入搜索词即可这里