我有许多(长)文档,我想从中提取所有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
首先检查文档,查看输入文件必须满足的选项和条件。