提取使用提取环境的包和宏

提取使用提取环境的包和宏

我有许多(长)文档,我想从中提取所有tikzpicture环境到一个单独的文件中。

extract包似乎是正确的起点,但存在一个问题:不仅在 tex 文件中extract查找环境实例tikzpicture,而且(当然)在任何扩展的内容中查找环境实例。

示例文档

下面的代码tikzpicture中有一个,还有一个tikzcd环境(调用一个tikzpicture)。

\documentclass{article}
\usepackage[active,generate=testoutput,extract-env={tikzpicture}]{extract}
\usepackage{tikz,tikz-cd}
\usepackage{amsmath}

\begin{document}

\begin{tikzpicture}
\draw (0,0) rectangle (1,1);
\end{tikzpicture}

\[
\begin{tikzcd}[sep=huge]
Z  & n,m \arrow{r}{+ \text{ in }Z} \arrow[swap]{d}{\sigma} & n+m \arrow{d}{\sigma} \\
K  & n^*,m^* \arrow[swap]{r}{+ \text{ in }K} & (n+m)^* = n^*+m^*
\end{tikzcd}
\]
\end{document}

如果取消注释该行,则无法顺利编译extract,从而导致环境出现各种问题tikzcd。创建的输出文件如下所示:

\documentclass{article}
\begin{document}

\begin{tikzpicture}
\draw (0,0) rectangle (1,1);
\end{tikzpicture}

\begin{tikzpicture}[/tikz/commutative diagrams/.cd,every diagram,sep=huge]\ifx \arrow \tikzcd@arrow \pgfutil@packageerror {tikz-cd}{Diagrams cannot be nested}{}\fi \let \arrow \tikzcd@arrow \let \ar \tikzcd@arrow \def \rar {\tikzcd@xar {r}}\def \lar {\tikzcd@xar {l}}\def \dar {\tikzcd@xar {d}}\def \uar {\tikzcd@xar {u}}\def \urar {\tikzcd@xar {ur}}\def \ular {\tikzcd@xar {ul}}\def \drar {\tikzcd@xar {dr}}\def \dlar {\tikzcd@xar {dl}}\global \let \tikzcd@savedpaths \pgfutil@empty \matrix [/tikz/matrix of \iftikzcd@mathmode math \fi nodes,/tikz/every cell/.append code={\tikzcdset {every cell}},/tikz/commutative diagrams/.cd,every matrix]\bgroup 
Z  & n,m \arrow{r}{+ \text{ in }Z} \arrow[swap]{d}{\sigma} & n+m \arrow{d}{\sigma} \\
K  & n^*,m^* \arrow[swap]{r}{+ \text{ in }K} & (n+m)^* = n^*+m^*
\end{tikzpicture}

如果我们修改原始 tex 文件中的代码,以便extract使用该行调用该包

\usepackage[active,generate=testoutput,extract-env={tikzpicture,tikzcd}]{extract}

它不起作用,但方式略有不同(尽管相关)。

下列当然可以:

\usepackage[active,generate=testoutput,extract-env={tikzcd}]{extract}

...但这并不能提取正常的 tikzpictures。

如果只是tikzcd环境造成了麻烦,我几乎肯定可以用更原始的 tikz 图形替换它。

不幸的是,我使用的类文件有许多预定义的环境,这些tikzpicture环境使用这些环境在事物(定理、练习、诸如此类的东西)周围绘制漂亮的框,而这些也会造成麻烦。

文档因为该extract包有一些关于条件等的详细信息,但似乎没有办法解决这个问题(除了重新编写 Python 脚本,我不愿意这样做)。有什么建议吗?

答案1

如果你只是想提取一些图片,抛开所有的辅助tikzpicture环境,你可以对你想要提取的图片使用不同的名称。

\documentclass{article}
\usepackage[active,generate=testoutput,extract-env={xtikzpicture}]{extract}
\usepackage{tikz,tikz-cd}
\usepackage{amsmath}

\newenvironment{xtikzpicture}{\begin{tikzpicture}}{\end{tikzpicture}}

\begin{document}

\begin{xtikzpicture}
\draw (0,0) rectangle (1,1);
\end{xtikzpicture}

\[
\begin{tikzcd}[sep=huge]
Z  & n,m \arrow{r}{+ \text{ in }Z} \arrow[swap]{d}{\sigma} & n+m \arrow{d}{\sigma} \\
K  & n^*,m^* \arrow[swap]{r}{+ \text{ in }K} & (n+m)^* = n^*+m^*
\end{tikzcd}
\]
\end{document}

testoutput.tex文件将

%%
%% This is file, `testoutput.tex',
%% generated with the extract package.
%%
%% Generated on :  2020/01/31,17:03
%% From source  :  extik.tex
%% Using options:  active,generate=testoutput,extract-env={xtikzpicture}
%%
\documentclass{article}

\begin{document}

\begin{xtikzpicture}
\draw (0,0) rectangle (1,1);
\end{xtikzpicture}

\end{document}

无论如何,您都需要编辑生成的文件,以使其可用。

答案2

另一种回应是ltximg 脚本自动化这一过程,创建独立所有的文件(和图像)tikzpicture

ltximg脚本可以执行以下操作:

$ ltximg  --subenv --imgdir=mypics  --prefix=tkz -o test-out test.tex

现在,您将拥有一个新文档test-out.tex,其中的tikzpicture环境已转换为图像(.pdf),并且您还将拥有每个 tikzpicture环境独立文件和一个test-all.tex仅包含全部的文件tikzpicture

如果您的输入文件是test.tex

\documentclass{article}
\usepackage{tikz,tikz-cd}
\usepackage{amsmath}

\begin{document}

\begin{tikzpicture}
\draw (0,0) rectangle (1,1);
\end{tikzpicture}

\[
\begin{tikzcd}[sep=huge]
Z  & n,m \arrow{r}{+ \text{ in }Z} \arrow[swap]{d}{\sigma} & n+m \arrow{d}{\sigma} \\
K  & n^*,m^* \arrow[swap]{r}{+ \text{ in }K} & (n+m)^* = n^*+m^*
\end{tikzcd}
\]
\end{document}

test-out.tex文件将如下所示:

\documentclass{article}
\usepackage{tikz,tikz-cd}
\usepackage{amsmath}
\graphicspath{{mypics/}}
\usepackage{grfext}
\PrependGraphicsExtensions*{.pdf}
\begin{document}

\includegraphics[scale=1]{test-tkz-1}

\[
\begin{tikzcd}[sep=huge]
Z  & n,m \arrow{r}{+ \text{ in }Z} \arrow[swap]{d}{\sigma} & n+m \arrow{d}{\sigma} \\
K  & n^*,m^* \arrow[swap]{r}{+ \text{ in }K} & (n+m)^* = n^*+m^*
\end{tikzcd}
\]
\end{document}

还有独立文件test-tkz-1.tex,位于./mypics,将如下所示:

\documentclass{article}
\usepackage{tikz,tikz-cd}
\usepackage{amsmath}

\pagestyle{empty}
\begin{document}
\begin{tikzpicture}
\draw (0,0) rectangle (1,1);
\end{tikzpicture}
\end{document}

如果您只需要创建独立您可以使用的文件:

$ ltximg  --subenv --imgdir=mypics --prefix=tkz --norun test.tex

首先检查文档,查看输入文件必须满足的选项和条件。

相关内容