我可以让 latex 忽略某些定义或用某种预处理器定义替换它们吗

我可以让 latex 忽略某些定义或用某种预处理器定义替换它们吗

我在几台机器上写了一份文档。其中一台安装了 Ubuntu 14.04,并安装了过时的 TexLive。其他几台安装了 Ubuntu 14.10 和 Arch Linux。

在我的文档中我使用arrows.meta库。现在我被一个文档困住了,它无法在我的一台机器(14.04 版)上编译。

有没有办法,我可以让 latex 忽略所有有问题的定义。我想要的是一些东西(也许是几行代码来注释)来启用和禁用 TikZ 的新功能,而无需更改实际图像的源文件?目前使用 arrows.meta 提示的图像有 9 张,而且这个数字可能会增加。所以,更改图像的来源不是解决问题的办法。

\documentclass[tikz]{standalone}
\usepackage[T1]{fontenc}        % font encoding
\usepackage[utf8]{inputenc}     % input encoding
\usepackage{lmodern}            % fonts

\usepackage{tikz,pgfplots}      % provides TikZ


\usetikzlibrary{arrows}
%\usetikzlibrary{arrows.meta}

%\newcommand{\Stealth}{\stealth}    % does not work

\begin{document}

\begin{tikzpicture}
    \draw[-Stealth] (0,0) to (1,1);
\end{tikzpicture}

\end{document}

答案1

最好的解决方案确实是更新 TeX 发行版。这将省去以后的麻烦,而且新arrows.meta库还提供了许多不错的功能。

但是,如果升级不是一种选择:下面的条件代码将检查pgf加载的版本是否为 3.0.0 或更高版本(日期为 2013/12/18 或之后)。如果是,我们加载arrows.meta-Stealth可以照常使用。如果不是,则将调用的箭头提示别名为库提供的Stealth旧提示。stealtharrows

最终结果是,如果 TikZ/PGF 3.0.0 可用,则会使用,如果不可用,则会Stealth回退到,而无需对绘图代码进行任何修改。stealth

限制:此代码将无法成功处理用引入的箭头样式修饰符或其他选项(例如诸如-{Stealth[width=6pt]}) 。arrows.meta

\documentclass[tikz]{standalone}

\usepackage[T1]{fontenc}    % font encoding
\usepackage[utf8]{inputenc} % input encoding
\usepackage{lmodern}        % fonts

\usepackage{tikz}           % provides TikZ
\usetikzlibrary{arrows}

\makeatletter
\@ifpackagelater{pgf}{2013/12/18}{
  \usetikzlibrary{arrows.meta}
}{
  \pgfarrowsdeclarealias{Stealth}{Stealth}{stealth}{stealth}
}
\makeatother

\begin{document}
\begin{tikzpicture}
  \draw[-Stealth] (0,0) to (1,1);
\end{tikzpicture}
\end{document}

相关内容