TikZ 外部化和 nicematrix 包

TikZ 外部化和 nicematrix 包

如何将 TikZ 外部库与 nicematrix 包结合使用?

我尝试将外部库与 nicematrix 包(2018 年 8 月 12 日版本)结合使用,以提高编译速度。但它没有按预期工作。

这是一个最小的例子:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{external}
%\tikzexternalize % activate!
\usepackage{nicematrix}
\begin{document}

% Test 1
\begin{flalign}
    \begin{bNiceMatrix}
    0 & \Cdots & 0 \\\Vdots & & \Vdots \\0 & \Cdots & 0
    \end{bNiceMatrix}
\end{flalign}

% Test 2
\begin{flalign}
\begin{tikzpicture}[baseline,inner sep = 0pt]
\node {$
    \begin{bNiceMatrix}
    0 & \Cdots & 0 \\\Vdots & & \Vdots \\0 & \Cdots & 0
    \end{bNiceMatrix}
$};
\end{tikzpicture}
\end{flalign}

% Test 3
\begin{flalign}
\begin{tikzpicture}[baseline,inner sep = 0pt]
\node {$
    \begin{pNiceArrayRC}{CC}%
    C_1 & C_2 \\1 & 2 & L_1\\4 & 5 & L_2\\
    \end{pNiceArrayRC}
$};
\end{tikzpicture}
\end{flalign}

\end{document}

测试结果如下:

  • 非外部,测试 1:没有问题。
  • 非外部,测试 2:没有问题。结果与测试 1 相同。
  • 非外部,测试3:没有问题。
  • 外部,测试 1:错误。
    • Line 1: Extra }, or forgotten $. ...nt }]\bgroup \box_use:N \l_tmpa_box \egroup
  • 外部,测试 2:没有错误,但输出不符合预期。
  • 外部,测试 3:错误。
    • Package tikz Error: Sorry, the system call 'pdflatex -shell-escape -halt-on-e

将 nicematrix 嵌入 tikz 图片并不能真正解决问题。这可能是由于嵌套的 tikz 图片造成的(请参阅 pgfmanual 50.2)。

有人知道如何解决这个问题吗?

答案1

由于扩展nicematrix使用 Tikz 和选项overlay以及remember picture来绘制虚线,因此无法将 Tikz 外部化与这些元素一起使用。事实上,在 2.1 之前的版本中,当我们尝试将外部化与 一起使用时,我们甚至会遇到 TeX 错误nicematrix

在 2018/09/18 的 2.1.1 版本(可在 CTAN 中使用)中,环境中的外部化过程现已停用nicematrix。当然,唯一的好处是在文档中包含其他有趣的 Tikz 图片进行外部化。

答案2

我找到了一个使用该软件包的解决方案standalone,它解决了这个问题并提高了速度。以下是该解决方案的简短描述。

为每个矩阵创建一个单独的独立文件。

% matrix_N.tex
\documentclass{standalone}
\usepackage{nicematrix}
\begin{document}%
\ensuremath{<code of matrix>}%
\end{document}

然后将独立文件包含在主文档中:

% main.tex
\documentclass{article}
\usepackage[mode=buildnew]{standalone}
\usepackage{nicematrix}
\begin{document}

% Test 1
\begin{flalign}
[S]&=\tikz[baseline]{\node[anchor=center]{\includestandalone{Test1}};}
\end{flalign}

% Test 3
\begin{flalign}
[S]&=\tikz[baseline]{\node[anchor=center,yshift=1em]{\includestandalone{Test3}};}
\end{flalign}

\end{document}

问题/限制:

  • 方程式对齐不完美(手动调整)
  • 不支持标签和引用
  • 手动控制主文档和图形(字体等)的一致性
  • 注意,如果独立图形需要多次编译才能正确显示。请编译mode=build直到图形正确,然后更改mode=buildnew或保存具有新修改日期的独立文件并编译直到图形正确。

当然,这个解决方案并不局限于nicematrix包,可以普遍使用。例如,如果tikz无法进行外部化。

答案3

从源代码来看:

\group_begin:
\tikzset{every~picture/.style = {overlay,
 remember~picture,
 name~prefix = nm-\int_use:N \g_@@_env_int-}}

如您所见,该包使用overlay和绘制每个矩阵remember picture。因此,对于如何外部化它们的问题,简短的回答是:您不能。

带有图片overlay and remember picture通常需要两次编译。但是,外部化机制相当简单,开发人员决定不支持此功能,而不是试图产生未定义的东西。

您仍然可以选择外部化其他图片,但如果您使用许多nicematrix环境,我建议您在本地启用其他图片的外部化。

相关内容