我最近一直在玩 pylatex,我试图定义一种全局样式,以便我的文档的所有图片都可以使用这种样式。在此示例中,名为“my_element”的对象具有特定的样式。例如:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc,shapes.multipart,chains,arrows}
\begin{document}
\begin{tikzpicture}[my_elem/.style={rectangle split, rectangle split parts=2,
draw, rectangle split horizontal}, >=stealth, start chain]
\node[my_elem,on chain] (A) {12};
\end{tikzpicture}
\end{document}
但是当我尝试使用 pylatex 时,它一直失败:
from pylatex import (Document, TikZ, TikZNode,
Command, Package,
TikZDraw, TikZCoordinate,
TikZUserPath, TikZOptions, UnsafeCommand)
# create document
doc = Document()
doc.preamble.append(Command('usetikzlibrary', 'calc,shapes.multipart,chains,arrows'))
# Here I'm having some difficulties defining the style for my_elem
mdf_style_definition = UnsafeCommand('\\my_elem',
arguments={'style': ['rectangle split']})
with doc.create(TikZ(options=TikZOptions(mdf_style_definition.dumps_as_content()))) as pic:
node_chain = TikZNode(text=str(12),
handle='A',
options=TikZOptions('my_elem',
'on chain'))
pic.append(node_chain)
doc.generate_pdf('my_solution', clean_tex=False)
有什么建议如何使用 pylatex 定义这种风格?
答案1
如果你看看生成的.tex
文件,你会看到
\begin{tikzpicture}[\\my_elem{style=['rectangle split']}]%
这显然是错误的。这让我意识到使用UnsafeCommand
可能是错误的。TikZ 样式不是宏,语法完全不同。
看一下 PyLaTeX 网站,似乎没有定义 TikZ 样式的类。 简单有效的方法是直接在 中写入样式定义TikZOptions
:
with doc.create(TikZ(options=TikZOptions('my_elem/.style={rectangle split}','start chain'))) as pic:
我想如果你想要一个TikZstyle
类,pylatex
你必须自己定义它,或者在https://github.com/JelteF/PyLaTeX并希望开发人员能够实现它。
完整的 Python 代码及其.tex
生成的文件。
from pylatex import (Document, TikZ, TikZNode,
Command, Package,
TikZDraw, TikZCoordinate,
TikZUserPath, TikZOptions, UnsafeCommand)
# create document
doc = Document()
doc.preamble.append(Command('usetikzlibrary', 'calc,shapes.multipart,chains,arrows'))
with doc.create(TikZ(options=TikZOptions('my_elem/.style={rectangle split}','start chain'))) as pic:
node_chain = TikZNode(text=str(12),
handle='A',
options=TikZOptions('my_elem',
'on chain'))
pic.append(node_chain)
doc.generate_tex('my_solution')
\documentclass{article}%
\usepackage[T1]{fontenc}%
\usepackage[utf8]{inputenc}%
\usepackage{lmodern}%
\usepackage{textcomp}%
\usepackage{lastpage}%
\usepackage{tikz}%
%
\usetikzlibrary{calc,shapes.multipart,chains,arrows}%
%
\begin{document}%
\normalsize%
\begin{tikzpicture}[my_elem/.style={rectangle split},start chain]%
\node[my_elem,on chain] (A) {12};%
\end{tikzpicture}%
\end{document}