テーブルと\tikzexternalize

テーブルと\tikzexternalize

普通はやらないことかもしれないが、外部化を使ってテーブルにいくつかのtikz画像を配置する必要がある。

\documentclass{report}
\usepackage{tabu}
\usepackage{tikz}
\usetikzlibrary{external}
\tikzexternalize
%\tikzexternaldisable
%
\begin{filecontents}{A.tikz}
  \begin{tikzpicture}
    \draw (0,0) rectangle (2,2);
  \end{tikzpicture}
\end{filecontents}
\begin{filecontents}{B.tikz}
  \begin{tikzpicture}
    \draw (0,0) rectangle (2,2);
  \end{tikzpicture}
\end{filecontents}

%
\begin{document}
\begin{table}
\begin{tabu}{cc}
    \tikzsetnextfilename{A}
    \input{A.tikz}
    &
    \tikzsetnextfilename{B}
    \input{B.tikz}    
\end{tabu}
\end{table}

\end{document}

tikzexternal を無効にすると動作します。何か提案はありますか?

答え1

これは の「機能」ですtabu。コードをたどると、書き込み操作から実際の結果が得られないまま、試験的なタイプセッティングを実行するために、意図的に書き込みを無効にしていることがわかります (他の操作の中でも特に)。これには、\write18TikZ が外部化を行うために必要な を無効にすることも含まれます。したがって、「tabuは無効」というのが私が言える最善のことです。何をしたいのかを示す別の質問をしてください。そうすれば、 を使用しない方法を見つけようとしますtabu


技術に詳しい人にとって、問題は

\def\tabu@nowrite #1#{{\afterassignment}\toks@}

\letこれは、試しにタイプセッティングを実行するためのプリミティブの代わりです\write。 ご覧のとおり、これは単に引数を\write使い捨てのトークに取得するだけです。

関連情報