VS Code - LaTeX-Workshop - 使用 `for` 脚本的配方

VS Code - LaTeX-Workshop - 使用 `for` 脚本的配方

你好呀

目前正在 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%"
            ]
        },

您可以通过多种方式解决此问题

  1. 您可以lualatex在处理项目时通过正常方式进行编译。当您准备与希望在文件名中使用下划线而不是空格的人共享生成的 PDF 时,请在终端中运行此命令(假设您的文件名是M W E.pdf):

mv M\ W\ E.pdf $(echo "M W E.pdf" | tr ' ' '_')

  1. 您可以有一个 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": {}
        },

生成文件的屏幕截图

相关内容