你好呀
目前正在 Visual Studio Code 中为 LaTeX-Workshop 扩展创建编译配方,如何创建使用或其他方法重命名文件的for
工具 mv
?
在 Mac 上使用终端的脚本非常简单:
for file in ./*.tex; do mv $file `echo $file | tr ' ' '_'`; done
菜谱中使用的工具类似于:
{
"name": "' '->'_'",
"command": "for",
"args": [
"file",
"in",
"./**.tex;",
"do",
"mv",
"$file",
"`echo $file | tr ' ' '_'`;",
"done",
],
"env": {}
},
{
"name": "'_'->' '",
"command": "for",
"args": [
"file",
"in",
"./**.tex;",
"do",
"mv",
"$file",
"`echo $file | tr '_' ' '`;",
"done",
],
"env": {}
},
配方如下:
{
"name": "lualatex light",
"tools": [
"' '->'_'",
"lualatex",
"'_'->' '"
]
},
按照目前的情况,编译会产生以下错误:
[16:05:21] LaTeX build process spawned. PID: undefined.
[16:05:21] LaTeX fatal error: spawn for ENOENT, . PID: undefined.
[16:05:21] Does the executable exist? $PATH: /Users/username/opt/anaconda3/bin:/Users/username/opt/anaconda3/condabin:/Library/Frameworks/Python.framework/Versions/3.8/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/TeX/texbin:/opt/X11/bin:/Library/Apple/usr/bin:/Library/Frameworks/Mono.framework/Versions/Current/Commands
[16:05:21] Does the executable exist? $Path: undefined
[16:05:21] The environment variable $SHELL: /bin/zsh
答案1
您之所以收到此错误,是因为工具参数似乎不能包含命令,而只能包含该工具中标识的命令的参数。例如,您的for
命令的参数包含echo
命令。
其次,如果您的配方中的第一个工具有效,那么它将lualatex
无法工作,因为它会查找您的主 TeX 文件,而该文件(暂时)不存在,因为您已重命名它。我基于以下假设做出此断言:您的lualatex
工具在您的 settings.json 文件中定义为类似以下内容,它调用%DOC%
,指向您项目的主 TeX 文件:
{
"name": "lualatex",
"command": "lualatex",
"args": [
"-synctex=1",
"-interaction=nonstopmode",
"-file-line-error",
"%DOC%"
]
},
您可以通过多种方式解决此问题
- 您可以
lualatex
在处理项目时通过正常方式进行编译。当您准备与希望在文件名中使用下划线而不是空格的人共享生成的 PDF 时,请在终端中运行此命令(假设您的文件名是M W E.pdf
):
mv M\ W\ E.pdf $(echo "M W E.pdf" | tr ' ' '_')
- 您可以有一个 shell 脚本为您执行此重命名操作,并且您的 LaTeX Workshop 配方会调用一个只运行此 shell 脚本的工具。
Shell 脚本 rename.sh 保存在与 相同的目录中,%DIR%
并赋予其执行权限chmod 755 rename.sh
:
#!/bin/sh
mv "${1}" $(echo $1 | tr ' ' '_')
工具:
{
"name": "rename",
"command": "./rename.sh",
"args": [
"%DOCFILE%.pdf",
],
},
食谱:
{
"name": "lualatex light",
"tools": [
"lualatex",
"rename",
]
},
如果有办法将一个工具的输出传输到另一个工具,那么这可能以完全有机的方式自动化地实现,与 VS Code 和 LaTeX Workshop 紧密相关。例如,代码及其变体生成以下文件:
{
"name": "' '->'_'",
"command": "mv",
"args": [
"%DOCFILE%.pdf",
"$(echo %DOCFILE%.pdf | tr ' ' '_')",
],
"env": {}
},