问题标题说明了一切。你最喜欢的是什么sed编辑 TeX 文件时,一行代码是必需的。我见过至少一条sed这个论坛上的好家伙正在写一本关于sed在 TeX 中。也许他可以自愿分享一些他的技巧?
我保证我的很快就会到来(我喜欢用sed进行编辑!)。
答案1
我主要使用sed用于在整个目录中的 TeX 文件中进行搜索和替换。例如:
find "." -name "*.tex" | xargs sed -i -e "s/\(\\usepackage\){times}/\1{mathptmx}/g"
这会将所有出现的 更改为\usepackage{times}
,\usepackage{mathptmx}
以使 Times 字体既可用于文本也可用于数学运算。
find
搜索所有 .tex 文件- 管道符号
|
允许使用一个命令的输出作为另一个命令的输入 xargs
获取由 返回的文件名列表find
,并将它们合并为一行sed
为该行中包含的每个文件应用所需的更改。我使用选项-i
用于就地编辑(您可以指定后缀以进行备份)-e
用于执行脚本,此处s/.../.../..
用于搜索和替换
sed
理解正则表达式语法,这里我另外使用了反斜杠\
来引用一些对 shell 有特殊含义的字符,例如括号和反斜杠本身- 第一行末尾的反斜杠
\
是为了换行,以便更好地显示。如果您将所有内容输入到一个命令行中,则不需要它。
对于这种经常使用的命令行,我通常会创建一个 shell 函数或一个 shell 脚本,这样我就不需要输入太多内容,只需使用正则表达式作为参数来调用我的函数/脚本即可。
答案2
我之前在这个网站上的一个回答是一个脚本,用于提取带有图表的页面并将其编译成一个文档。 这整个脚本也包含在 Gist 中。
该脚本的工作原理是从文件中提取图片列表.aux
。以下几行仅提取图片,然后提取末尾的唯一编号(文档中的页码):
grep figure | sed 's/.*}}{\([1-9]*\)}}/\1/' | uniq |
这也说明了一个重要的观点:也许有很好的方法来利用sed
,但是重要的是 Unix 工具如何协同工作。仅仅孤立地关心sed
会失去其用处。
答案3
我发现了一个不错的命令行工具:
grep -R usepackage * | cut -d']' -f2 | cut -s -d'{' -f 2 | sed s/"}"/.sty"}"/g \
| cut -d'}' -f1 | sort | uniq | xargs dpkg -S | cut -d':' -f1 | sort | uniq
它分别返回与文档或文件夹中使用的 LaTeX 包相对应的 Debian 包名称。也可以与和结合使用find
以xargs
检查包括子目录。这当然仅适用于来自 Debian 或 Ubuntu 存储库的 TeX 安装。
sed
这是一个在更大、更通用的环境中仅用于简单搜索和替换的示例,结合诸如sort
、uniq
和之类的命令行工具grep
。