如何消除此脚本中的循环错误消息?

如何消除此脚本中的循环错误消息?
#!/bin/bash

PREAMBLE='\usepackage{fontspec}\setmonofont{Source Code Pro}\usepackage{xeCJK}\setCJKmonofont{Noto Sans Mono CJK SC}\pagestyle{empty}'

for f in "$@"; do
    if [[ -s "$f" ]]; then
        pygmentize -f tex -O "style=$STYLE,linenos,full,preamble=$PREAMBLE" $f \
            | xelatex -jobname=$(basename $f) -output-directory=$SCRATCH
    else
        echo $ERR "Error: File <$f> not found." && exit 1
    fi

    [[ "$STYLE" = "default" ]] \
        && pdfcrop $SCRATCH/$(basename $f.pdf) $(basename $f | tr . -).pdf \
        || pdfcrop $SCRATCH/$(basename $f.pdf) $(basename $f | tr . -)-$STYLE.pdf
    
    (( ALL == 1 )) \
        && { pygmentize -f tex -O "style=bw,linenos,full,preamble=$PREAMBLE" $f \
                 | xelatex -jobname=$(basename $f) -output-directory=$SCRATCH; \
             pdfcrop $SCRATCH/$(basename $f.pdf) $(basename $f | tr . -)-bw.pdf; }
done

答案1

你有两个问题。首先,您似乎正在尝试编译格式错误的 LaTeX 文件。这些是 LaTeX 错误,与脚本本身无关:

! LaTeX Error: File `\def {\char `\\}.sty' not found.

Type X to quit or <RETURN> to proceed,
or enter new name. (Default extension: sty)

Enter file name: ! Argument of \@firstofone has an extra }.
<inserted text> 
                \par 
l.105 \AtBeginDocument
                                 { \xeCJK@document@hook } 
? 
! Emergency stop.
<inserted text> 
                \par 
l.105 \AtBeginDocument
                                 { \xeCJK@document@hook } 

为了弄清楚这些,您需要检查您的 LaTeX 代码。您可能想尝试将代码发布到https://tex.stackexchange.com/并在那里询问。


您收到的唯一 shell 错误是您似乎缺少命令:

./src2pdf.sh: line 65: pdfcrop: command not found

您正在尝试运行一个名为pdfcrop但您的系统上不存在该命令。我不知道你正在运行什么操作系统,所以我不知道你如何找到它,但这就是你需要解决的问题。在Ubuntu上,该工具是texlive-extra-utils该工具是软件包,所以如果你运行的是 Ubuntu,你可以尝试:

sudo apt install texlive-extra-utils

在 Arch 上,您可以在 AUR 上找到它作为 的一部分pdfcropmargins,因此请尝试(替换trizen为您首选的 AUR 管理器):

trizen -S pdfcropmargins

相关内容