我正在研究相同的TeX 文件(位于 git 存储库中)位于不同位置。但是,这些不同位置安装了不同版本的 LaTeX。
在工作中,我需要这些标题:
\usepackage[caption=false]{caption}
\usepackage[font=footnotesize]{subfig}
在家里(subfig 包的较新版本),我需要这些标题:
\usepackage[font=footnotesize,caption=false]{subfig}
错误的标头会导致编译失败:在家中使用“work”标头时,subfig 会抱怨我应该停止使用 caption 包。在工作中使用“home”标头时,subfig 会抱怨未知参数。
有没有办法让 LaTeX 检测可用的 subfig 版本并使用“正确”的\usepackage
语句?
答案1
您可以使用外部文件:
header_work.tex:
\usepackage[caption=false]{caption}
\usepackage[font=footnotesize]{subfig}
header_home.tex:
% foo, see question
主要.tex:
\documentclass{foo}
\usepackage{bar}
\input{header}
%...
begin{document}
%...
然后,您可以编写一个小的 makefile 或 shell 脚本,根据您的环境创建正确的 header.tex 链接,例如 build.sh:
#!/bin/sh
rm -f header.tex
SOURCE="header_home.tex"
if [ `hostname` = "foo"]
then
SOURCE="header_work.tex"
fi
ln -s $SOURCE header.tex
pdflatex main.tex
答案2
你可以尝试
\IfFileExists{caption3.sty}{
% actual syntax to load the subfig package without the caption package
\usepackage[font=footnotesize,caption=false]{subfig}
}{
% abbandoned syntax to load the subfig package without the caption package
\usepackage[caption=false]{caption}
\usepackage[font=footnotesize]{subfig}
}
它不是万无一失的,但希望能够适用于大多数 TeX 系统。
答案3
这对评论来说有点复杂,但它是我在问题评论中所说的内容的延续,即这种事情正是版本控制系统旨在解决的问题。我使用的是bzr
,而不是git
,但它们都是分布式版本控制系统,所以我很确定这git
也可以工作,但命令的名称会有所不同。
首先,建立一个主存储库并在其中放置一些内容:
mkdir bzr_test # create the directory
cd bzr_test # go into it
bzr init-repo . # initialise the repository
bzr init main # create the main tree for the project
cd main # go into it
vi document.tex # create the first document
对于此示例,我们从基本文档开始:
\documentclass{article}
\usepackage{subfig}
\begin{document}
Hello World
\end{document}
现在我们提交该文档并创建两个分支:
bzr add document.tex # Tell bzr to notice this document
bzr commit -m 'Main document' # Commit the changes
cd .. # Back to containing directory
bzr branch main work # Create a work branch
bzr branch main home # And a home one
在每个分支中,我们根据需要修改文档:
在上班:
\documentclass{article}
\usepackage[caption=false]{caption}
\usepackage[font=footnotesize]{subfig}
\begin{document}
Hello World
\end{document}
在家里:
\documentclass{article}
\usepackage[font=footnotesize,caption=false]{subfig}
\begin{document}
Hello World
\end{document}
我们承诺这些改变(并确保这些改变是仅有的在此阶段进行更改)。
cd work # Not sure which directory we're in!
bzr commit -m 'Headers for work' # Commit changes for work
cd ../home # Go to home
bzr commit -m 'Headers for home' # Commit changes for home
现在我们对其中一个分支做一些修改。
cd ../work
vi document.tex
bzr commit -m 'Major revisions'
假设work
我们现在有:
\documentclass{article}
\usepackage[caption=false]{caption}
\usepackage[font=footnotesize]{subfig}
\begin{document}
Hello World
Greetings Earthlings
\end{document}
现在我们要将这些转移到分支home
。这里的关键是可选择的合并。如果我们只是进行基本合并,那么它将合并从共同父级到当前修订版的所有内容。但是,我们想忽略第一个修订版。
cd ../home
bzr merge ../work -r2..
现在我们看到:
\documentclass{article}
\usepackage[font=footnotesize,caption=false]{subfig}
\begin{document}
Hello World
Greetings Earthlings
\end{document}
唯一令人讨厌的是,你必须记住每次合并的是哪个修订版本,这样你才能从那个修订版本合并到最后。我怀疑有更好的方法来管理这个问题,但我不是版本控制系统的专家,我提供这个更多的是概念验证,而不是理想的解决方案。我的基本观点是,跟踪这样的变化正是版本控制设计的目的,所以让它做它的工作,让 TeX 去做它是工作。