如何在 TeX Live 中正确安装相同 LaTeX 软件包的两个(并行)版本?以 2.8 和 2.9 为例biblatex
。我目前在 TL 2013 中安装了其中一个,在 TL 2014 中安装了另一个,并且可以来回比较生成的文件等。...但这不是最佳选择,我现在需要在 TL 2014 中同时安装这两个版本!
答案1
TeX 搜索当前/工作文件夹第一的在搜索其他地方(您的local/texmf
或根 TeX 文件夹)之前包含要包含的文件/包。
因此,唯一“有效”地执行此操作的方法是使用工作文件夹来存储两个版本。将一个版本放在名为的文件夹中X
,将另一个版本放在名为的文件夹中Y
。然后,每次运行 LaTeX 时,您都可以执行脚本将所需版本(X
或Y
)复制到您的工作文件夹中(在编译之前或使用编译中期--shell-escape
)。
否则,您将只能让 TeX 根据其设置其包/文件哈希表的方式选择符合您要求的第一个包名称,而这可能不是您想要的版本。
答案2
我有相当多的测试/开发/实验/本地版本的软件包,我想暂时与我的 TeXsystems 一起使用。
我总是将这些包放在它们自己的 texmf 树中,然后在需要时将这些 texmf 树附加到 texsystem(s)。
附言:
biblatex 是一种特殊情况:切换 biblatex 版本时,您还必须使用不同的 biber.exe。为了避免与 PATH 变量发生冲突,我将附加的 biber 可执行文件重命名为 biberexp.exe 和 biberdev.exe,并在切换到另一个 biblatex 版本时调用这些可执行文件。
使用 miktex 附加 texmf 树相当简单:我在命令行上运行或通过某些脚本/快捷键initexmf --register-root=path/to/texmf
来注册根并将initexmf --unregister-root=path/to/texmf
其删除。
使用当前的 texlive(2017、2018),可以使用
tlmgr conf auxtrees add /quick/test/tree
tlmgr conf auxtrees remove /quick/test/tree
达到同样的效果。
对于较旧的 texlive 来说,这并不容易。目前我使用的是混合策略:对于 biblatex 包,我更改 TEXMFCNF 使其指向不同的 texmf.cnf,在其他情况下,我手动更改主本地树中的 texmf.cnf,或者我使用 更改 TEXMFHOME tlmgr conf texmf TEXMFHOME=
。这一切都不是很令人满意,我想当我有时间的时候,我会编写一个脚本,它可以从我的本地主 texmf.cnf 中添加和删除根,并且可以像 miktex 工具一样使用。(编辑 2018:我编写了这样一个脚本,但由于 texlive 的变化,它不再需要。)
答案3
基本面
这种方法的基本思想依赖于使用完整路径调用可执行文件。也就是说,运行
/usr/local/texlive/2014/bin/x86_64-linux/pdflatex
和
/usr/local/texlive/2014/bin/x86_64-linux/biber
或者
/usr/local/texlive/2013/bin/x86_64-linux/pdflatex
和
/usr/local/texlive/2013/bin/x86_64-linux/biber
如果您不需要经常这样做,这可能是最简单的方法 - 只需指定完整路径。或者创建 bash 别名作为快捷方式。
[当然,一2013 年或 2014 年大概是您的默认设置,因此您实际上只需要对非默认情况执行此操作。
自动调用相关可执行文件可确保使用适当版本的软件包。也就是说,当您调用 2013 可执行文件时,即使 2014 是您的默认版本,您也会获得 2013 软件包。
更复杂的策略
但是,如果您需要经常这样做,我建议使用一种允许您在文件内部在 2013 年和 2014 年之间切换的方法.tex
。
这里我解释了如何使用arara
通过在文件内切换指令在 TeX Live 2013 和 TeX Live 2014 之间切换.tex
。显然,您可以对其他可执行文件执行类似操作。只需复制并调整 中的脚本,就像我对和/usr/local/texlive/2014/texmf-dist/scripts/arara/rules/
所做的那样。pdflatex
biber
步骤 1:向文件添加指令
arara
这里我只是使用默认提供的标准指令。
% arara: pdflatex
% arara: biber
% arara: pdflatex
\documentclass{article}
\usepackage{filecontents}
\usepackage[backend=biber]{biblatex}
\begin{filecontents}{\jobname.bib}
@article{some-article,
author = {Dude, Some},
title = {Some Title},
year = 1066,
journal = {Some Journal},
pages = {1000456--1005027}}
\end{filecontents}
\bibliography{\jobname}
\begin{document}
\autocite{some-article}
\printbibliography
\end{document}
从日志中:
This is pdfTeX, Version 3.14159265-2.6-1.40.15 (TeX Live 2014) (preloaded format=pdflatex 2014.6.28) 1 JUL 2014 22:31
entering extended mode
...
(/usr/local/texlive/2014/texmf-dist/tex/latex/biblatex/biblatex.sty
Package: biblatex 2014/06/25 v2.9a programmable bibliographies (PK/JW/AB)
来自.bbl
:
% $ biblatex bbl format version 2.4 $
第 2 步:创建变体 arara 规则
首先在主目录中创建一个配置文件,araraconfig.yaml
其内容如下:
!config
paths:
- <arara> @{userhome}/.arara/rules
# vim: set nospell:
显然,如果您不使用,请省略最后一行vim
。此外,如果您希望使用其他方法,请更改规则的路径。例如:
!config
paths:
- <arara> @{userhome}/rules
然后在你的规则目录中创建以下四个文件。例如,我的文件位于其中,~/.arara/rules
因为这就是我放在配置文件中的内容。
文件 1
名称:biber2013.yaml
内容:
!config
# Based on Biber rule for arara
# Biber rule author: Marco Daniel
# requires arara 3.0+
identifier: biber2013
name: Biber 2013
command: <arara> /usr/local/texlive/2013/bin/x86_64-linux/biber @{options} "@{getBasename(file)}"
arguments:
- identifier: options
flag: <arara> @{parameters.options}
# vim: set nospell:
文件 2
名称:biber2014.yaml
内容:
!config
# Based on Biber rule for arara
# Biber rule author: Marco Daniel
# requires arara 3.0+
identifier: biber2014
name: Biber 2014
command: <arara> /usr/local/texlive/2014/bin/x86_64-linux/biber @{options} "@{getBasename(file)}"
arguments:
- identifier: options
flag: <arara> @{parameters.options}
# vim: set nospell:
文件 3
名称:pdflatex2013.yaml
内容:
!config
# Based on PDFLaTeX rule for arara
# PDFLaTeX rule author: Marco Daniel
# PDFLaTeX rule last edited by: Paulo Cereda
# requires arara 3.0+
identifier: pdflatex2013
name: PDFLaTeX 2013
command: <arara> /usr/local/texlive/2013/bin/x86_64-linux/pdflatex @{action} @{draft} @{shell} @{synctex} @{options} "@{file}"
arguments:
- identifier: action
flag: <arara> --interaction=@{parameters.action}
- identifier: shell
flag: <arara> @{isTrue(parameters.shell,"--shell-escape","--no-shell-escape")}
- identifier: synctex
flag: <arara> @{isTrue(parameters.synctex,"--synctex=1","--synctex=0")}
- identifier: draft
flag: <arara> @{isTrue(parameters.draft,"--draftmode")}
- identifier: options
flag: <arara> @{parameters.options}
# vim: set nospell:
文件 4
名称:pdflatex2014.yaml
内容:
!config
# Based on PDFLaTeX rule for arara
# PDFLaTeX rule author: Marco Daniel
# PDFLaTeX rule last edited by: Paulo Cereda
# requires arara 3.0+
identifier: pdflatex2014
name: PDFLaTeX 2014
command: <arara> /usr/local/texlive/2014/bin/x86_64-linux/pdflatex @{action} @{draft} @{shell} @{synctex} @{options} "@{file}"
arguments:
- identifier: action
flag: <arara> --interaction=@{parameters.action}
- identifier: shell
flag: <arara> @{isTrue(parameters.shell,"--shell-escape","--no-shell-escape")}
- identifier: synctex
flag: <arara> @{isTrue(parameters.synctex,"--synctex=1","--synctex=0")}
- identifier: draft
flag: <arara> @{isTrue(parameters.draft,"--draftmode")}
- identifier: options
flag: <arara> @{parameters.options}
# vim: set nospell:
步骤 3:使用新指令
首先,让我们将默认值更改为 2014 指令。除了名称和标识符之外,这些应该基本相同:
% arara: pdflatex2014
% arara: biber2014
% arara: pdflatex2014
从日志中:
This is pdfTeX, Version 3.14159265-2.6-1.40.15 (TeX Live 2014) (preloaded format=pdflatex 2014.6.28) 1 JUL 2014 22:39
...
(/usr/local/texlive/2014/texmf-dist/tex/latex/biblatex/biblatex.sty
Package: biblatex 2014/06/25 v2.9a programmable bibliographies (PK/JW/AB)
来自.bbl
:
% $ biblatex bbl format version 2.4 $
现在让我们测试一下2013年的指令:
% arara: pdflatex2013
% arara: biber2013
% arara: pdflatex2013
从日志中:
This is pdfTeX, Version 3.1415926-2.5-1.40.14 (TeX Live 2013) (format=pdflatex 2014.4.9) 1 JUL 2014 22:42
entering extended mode
...
(/usr/local/texlive/2013/texmf-dist/tex/latex/biblatex/biblatex.sty
Package: biblatex 2013/11/25 v2.8a programmable bibliographies (PK/JW/AB)
来自.bbl
:
% $ biblatex bbl format version 2.3 $