如何用 pylatex 定义全局样式?

如何用 pylatex 定义全局样式?

我最近一直在玩 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}

相关内容