制作 tikz/pgf 库的教程

制作 tikz/pgf 库的教程

我对这个社区创建的 tikz/pgf 库印象深刻http://launchpad.net/tex-sx

我也想创建自己的,但不知道从哪里开始。我曾尝试对我链接到的包进行逆向工程,但发现它们太复杂了,根本无法知道发生了什么。

我之前曾问过有哪些教程/方法可以教新手如何开发 tikz/pgf 库,但我正在编辑我的问题以考虑到 Andrew Stacey 的建议:

我想编写一个 tikz 包。对于有一定经验的人,您会回到过去告诉初学的自己什么呢?

答案1

由于没有针对您所问问题的教程,我将尽力在此提供一个简短的教程来回答这个问题,并希望其他更有经验的用户能够提供更多信息。要正确理解包tikZ/pgf/库的开发,必须区分问题的不同方面。

编写 LaTeX 包

编写 LaTeX 包是一个相当简单的过程。只需使用扩展名保存文件.sty并包含几行强制代码:

   \NeedsTeXFormat{LaTeX2e}
   \ProvidesPackage{tower}[2012/02/03 v1.0a Draw towers package]
      ....
   \endinput

更全面的指南请参见分类指南并且此网站上也有很多信息。

用文学风格编写你的包

如果您浏览大多数包或类的代码,您会发现文档与文件中的代码一起提供(和包.dtx除外,但稍后会详细介绍)。 使这种写作方法成为可能的是Frank Mittelbach、David Carlisle 和其他人开发的系统。pgftikZdoc/docstrip文档软件可以自动生成定义索引、命令使用索引和更改日志列表。

doc 系统对于维护和记录大型 TeX 源(例如 LaTeX2e 代码)非常有用。使用 doc 系统编写的 LaTeX 类和包可以通过两种方式处理:它们可以通过 LaTeX 运行,以生成文档;它们也可以通过 文档条,以生成.cls.sty文件。

一个基本的模板,您只需简单地输入代码即可找到用户手册 tex-sx

PGF/TikZ 库

大多数套餐tex-sx是包而不是库。pgf库是具有特定扩展名的文件tikzlibrary<filename>.code.tex。它们不是以 加载\usepackage{...},而是以 或类似的形式加载\usetikzlibrary{...}

使用这种方法有两个优点。首先,它以更易于管理的层次结构组织代码;其次,可以透明地使用底层加载机制来加载 LaTeX、TeX Plain 或 ConTeXt 格式的代码。

其他软件包作者也按照相同的风格设计自己的库加载机制。一个值得研究的好例子就是软件包tcolorbox。下面的摘录显示,库只是定义代码,加载时会设置正确的路径。提供了一些列表管理代码来跟踪选项、软件包的可用库和错误捕获。

 \def\tcblibrary@documentation@loaded{}
 \def\tcb@optionlist{}
 \def\tcbuselibrary#1{\tcbset{library/.cd,#1}}
 \def\tcb@add@library#1#2{%
    \tcbset{library/#1/.code={\@ifundefined{tcblibrary@#1@loaded}{\input #2}{}}}%
    \DeclareOption{#1}{\edef\tcb@optionlist{\tcb@optionlist,#1}}%
  }
 \tcb@add@library{listings}{tcblistings.code.tex}
 \tcb@add@library{theorems}{tcbtheorems.code.tex}
 \tcb@add@library{documentation}{tcbdocumentation.code.tex}

编写 tex-sx 包

这些软件包中的大多数最初都是问题的答案,后来经过改进并作为软件包发布。当前列表中有一些非常令人印象深刻的软件包。如果你想做出贡献,这很容易,最好的开始就是过来聊天并与像 Andrew Stacey 这样的人交谈,他是启动该项目的关键人物,Andrew 或其他贡献者之一可以提供宝贵的建议。

最后要说的是,大多数 pgf 系列大型软件包都不是用.dtx文件编写的,而是使用pgfmanual软件包的变体。这样,示例就可以在用户文档中排版和执行,同时还能提供与pgf/tikz样式手册一致的感觉和外观。

套餐建议

非常需要一个好的 TikZ 库来计算机科学此网站上有足够多的问题和答案来启动它。

相关内容