我对这个社区创建的 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 和其他人开发的系统。pgf
tikZ
doc/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 库来计算机科学此网站上有足够多的问题和答案来启动它。