我想编译一段不带\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
文件.aux
以latexmk
供处理。
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