是否有一个包含整个 LaTeX 文档的 shell 脚本?

是否有一个包含整个 LaTeX 文档的 shell 脚本?

我见过一些将 shell 脚本合并到 LaTeX 文档中的例子。但是,我还没有见过将整个 LaTeX 文档合并到 shell 脚本中的例子。有没有人能举个例子说明这种情况?[不仅仅是引用 LaTeX 文件,而是实际上将整个文档都包含在脚本中——从打开的类到文档结束。]

我正在考虑让 shell 脚本包含用于构建 LaTeX 文档的命令行,然后是整个 LaTeX 文档(直接合并到脚本中),然后在文档构建时包含 sleep 命令,最后包含 latexmk -c 命令。

答案1

我假设你所说的 shell 指的是 Unix shell,例如bash。你可能需要查看“这里的文件“bash 的功能。最简单的方法是

#!/bin/bash

latex <<theend
\documentclass{article}
\begin{document}
Blah blah
\end{document}
theend
echo "Done!"

然而,如果 latex 处理需要多次通过,这可能会导致一些问题。它还会使您的当前目录变得混乱,其中包含一堆由 生成的额外文件latex,例如日志文件、.aux文件等,这可能不是您想要的。

更好的选择是创建一个临时目录,使用将 LaTeX 文档提取到其中cat,然后以此文档作为输入运行 LaTeX。您可能需要多次运行 LaTeX 以确保所有交叉引用都已解析。最后,您只需将生成的文件复制.dvi.pdf当前目录即可。

下面是此类脚本的一个示例。它用于mktemp创建临时目录。据我所知,mktemp并非每个 Unix 上都可用,但它应该在每个具有 GNU coreutils 的系统上都可用。

可能有更好的方法来处理流程的几乎每个步骤,但这应该可以帮助您入门。

#!/bin/bash

# Create a temporary directory
curdir=$( pwd )
tmpdir=$( mktemp -dt "latex.XXXXXXXX" )

# Set up a trap to clean up and return back when the script ends
# for some reason
clean_up () {
    cd "$curdir"
    [ -d "$tmpdir" ] && rm -rf "$tmpdir"
    exit
}
trap 'clean_up' EXIT SIGHUP SIGINT SIGQUIT SIGTERM 

# Switch to the temp. directory and extract the .tex file
cd $tmpdir
# Quoting the 'THEEND' string prevents $-expansion.
cat > myfile.tex <<'THEEND'
\documentclass{article}
\begin{document}
Blah blah \(x^2 + 1\) or $x^2 + 1$.
\end{document}
THEEND

# If the file extracts succesfully, try to run pdflatex 3 times.
# If something fails, print a warning and exit
if [[ -f 'myfile.tex' ]]
then
   for i in {1..3}
   do
      if pdflatex myfile.tex
      then
         echo "Pdflatex run $i finished."
      else
         echo "Pdflatex run $i failed."
         exit 2
      fi
   done
else
   echo "Error extracting .tex file"
   exit 1
fi

# Copy the resulting .pdf file to original directory and exit
cp myfile.pdf $curdir
exit 0

相关内容