使用 vscode 等现代工具编译不带 \begin{document} 的小段代码

使用 vscode 等现代工具编译不带 \begin{document} 的小段代码

我想编译一段不带\begin{document}and的 LaTeX 代码\end{document}(当然,序言是固定的)。原因是有时我只写一小段文本,不想每次都包含基本行(甚至不想使用 等\input)。目前我知道的唯一方法是运行如下所示的 shell 代码。

DIR="$( cd "$( dirname "$0" )" && pwd )"
cd $DIR

xelatex -interaction=batchmode \\documentclass{einfart}\\usepackage{ProjLib}\\begin{document}\\input{<filename>}\\end{document}

有没有更好的方法?例如,我不知道是否有兼容的方法latexmk。另外,是否可以使用 Visual Studio Code 的扩展“LaTeX Workshop”实现类似的效果?

(我确实意识到省略\begin{document}等等可能不是一个好主意。我只是在探索工作流程的可能性。)

答案1

仅供参考,下面是我目前用于编译扩展名为 的文件的 shell 脚本.piece.tex,其中.piece有一个标记,表明这不是完整的 LaTeX 代码文件。

DIR="$( cd "$( dirname "$0" )" && pwd )"
cd $DIR

mkdir -p .aux

filename=$(ls -t *.piece.tex | head -n1)

echo "\\documentclass[use boldface, theorem in new line, simple name, theorem numbering = *]{einfart}" > .aux/${filename%.piece.tex}.temp.tex
echo "\\usepackage{ProjLib}" >> .aux/${filename%.piece.tex}.temp.tex
echo "\\usepackage{tikz-cd}" >> .aux/${filename%.piece.tex}.temp.tex
echo "\\\\begin{document}"   >> .aux/${filename%.piece.tex}.temp.tex
echo "\\input{$filename}"    >> .aux/${filename%.piece.tex}.temp.tex
echo "\\end{document}"       >> .aux/${filename%.piece.tex}.temp.tex

latexmk -xelatex -silent -output-directory=.aux -jobname=${filename%.piece.tex} .aux/${filename%.piece.tex}.temp.tex

mv .aux/${filename%.piece.tex}.pdf ${filename%.piece.tex}.pdf

例如,如果你有一个Document.piece.tex内容如下:

This is a test document.

\begin{theorem}\label{thm1}
    \blindtext
\end{theorem}

\begin{theorem}\label{thm2}
    \blindtext
\end{theorem}

\begin{definition}\label{def1}
    \blindtext
\end{definition}

\cref{thm1,def1,thm2}

\dnf

然后运行脚本后,你将得到Document.pdf如下结果:

在此处输入图片描述


一些解释:

前两行将目录更改为包含 shell 脚本的当前目录:

DIR="$( cd "$( dirname "$0" )" && pwd )"
cd $DIR

然后创建一个.aux文件夹用于存储辅助文件。

mkdir -p .aux

脚本现在将找到最新的.piece.tex文件进行编译。

filename=$(ls -t *.piece.tex | head -n1)

它将在文件夹中生成一个同名.temp.tex文件.auxlatexmk供处理。

echo "\\documentclass[use boldface, theorem in new line, simple name, theorem numbering = *]{einfart}" > .aux/${filename%.piece.tex}.temp.tex
echo "\\usepackage{ProjLib}" >> .aux/${filename%.piece.tex}.temp.tex
echo "\\usepackage{tikz-cd}" >> .aux/${filename%.piece.tex}.temp.tex
echo "\\\\begin{document}"   >> .aux/${filename%.piece.tex}.temp.tex
echo "\\input{$filename}"    >> .aux/${filename%.piece.tex}.temp.tex
echo "\\end{document}"       >> .aux/${filename%.piece.tex}.temp.tex

最后,编译并将文件latexmk移动.pdf到当前文件夹。

latexmk -xelatex -silent -output-directory=.aux -jobname=${filename%.piece.tex} .aux/${filename%.piece.tex}.temp.tex
mv .aux/${filename%.piece.tex}.pdf ${filename%.piece.tex}.pdf

相关内容