Repository navigation
Expand file tree
/
Copy pathexample.tex
More file actions
368 lines (324 loc) · 17.1 KB
/
Copy pathexample.tex
File metadata and controls
368 lines (324 loc) · 17.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
%% example.tex
%% Copyright 2026 Hannah Kirkland
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
% of this license or (at your option) any later version.
% The latest version of this license is in
% https://www.latex-project.org/lppl.txt
% and version 1.3c or later is part of all distributions of LaTeX
% version 2008 or later.
%
% This work has the LPPL maintenance status `maintained'.
%
% The Current Maintainer of this work is Hannah Kirkland.
%
% This work consists of the files plotweaver.cls, plotweaver-boxes.sty,
% plotweaver-character-sheet.sty, plotweaver-colors.sty,
% plotweaver-icons.sty, plotweaver-mistborn.sty, plotweaver-stormlight.sty,
% plotweaver-timeline.sty, character-sheet.tex, character-sheet.pdf,
% example.tex, example.pdf, plotweaver.tex, plotweaver.pdf, nomodan.png,
% and README.md.
\documentclass[article,stormlight,timeline,statblock]{plotweaver}
\usepackage{plotweaver-mistborn}
\usepackage[colorlinks=true]{hyperref}
\usepackage{graphicx}
\usepackage[base]{babel}
\usetikzlibrary{chains, backgrounds}
\pgfdeclarelayer{foreground}
\pgfdeclarelayer{lines}
\pgfsetlayers{background,lines,main,foreground}
\usepackage{wrapfig}
\setlength{\intextsep}{0.25em}
\usepackage{subcaption}
\usepackage{lipsum}
\title{Plotweaver \LaTeX~Document Class}
\author{}
\date{}
\begin{document}
\maketitle
This file serves as a tutorial and example for how to use the \texttt{plotweaver} document class to typeset homebrew content in the style of Plotweaver RPG and Cosmere RPG games.
\section{Introduction}
The \texttt{plotweaver} document class is a free and open source resource which uses \LaTeX~to emulate the style of the Plotweaver RPG and Cosmere RPG rule books. This allows you to focus on writing and creating content without the hassle of formatting each document. To use this document class, you will need to have \LaTeX~installed, which can be downloaded at the \href{https://www.latex-project.org/}{official \LaTeX~project website}. If you're not familiar with \LaTeX, a full installation is recommended. Another non-local option is to upload the class and package files to an online \LaTeX~editor such as Overleaf. Please note that online editors may or may not be free. Regardless of installation choice, you will need to use Lua\LaTeX~as the compiler.
The philosophy of this document class and its accompanying packages is to be as simple to use as possible while remaining as modular and flexible as possible. It is also still under active development, particularly with respect to the talent tree boxes. Contributions are welcome on this project's \href{https://github.com/teawizardry/plotweaver}{GitHub repository}.
This work is licensed under the \href{https://latex-project.org/lppl/lppl-1-3c/}{LaTeX Project Public License (LPPL) version 1.3c}, with the exception of icons specific to Plotweaver RPG, Cosmere RPG, and the Cosmere. This is unofficial fan content, created and shared for non-commercial use. It has not been reviewed by Dragonsteel Entertainment, LLC or Brotherwise Games, LLC.
\section{Example Usage}
For full documentation, please see \texttt{plotweaver.pdf}. For an example of how to use this document class to generate character sheets, please see \texttt{character-sheet.tex}.
\subsection{Character Sheets}
You can make a character sheet using the \texttt{MakeCharacterSheet} command if \texttt{character-sheet} is passed into the document class options. It will calculate derived attributes for you, and you can set it to use the terminology for Stormlight Archive or Mistborn instead of the generic Plotweaver terms. See \texttt{character-sheet.tex} for an example of how to use this command. In the future, I intend to make the sheet more customizable.
\subsection{Color Schemes}
You can switch color schemes by passing an option to the document class. The default is \texttt{stormlight}. You can also use \texttt{mistborn} or \texttt{ariandor}. You can also define your own color schemes.
\subsection{Icons}
Icons for activations and plot die are specified with \texttt{forever}, \texttt{freeAction}, \texttt{action}, \texttt{doubleAction},
\texttt{tripleAction}, \texttt{reaction}, \texttt{opportunity}, and \texttt{complication}. They look like this:
\begin{center}
\forever \freeAction \action \doubleAction \tripleAction \reaction \opportunity \complication
\end{center}
The complication commands can take a number or be left blank. Numbers look like this: \complication[2]. You can also make larger complication symbols with \texttt{complicationDice}:
\begin{center}
\complicationDice\space \complicationDice[2] \complicationDice[4]
\end{center}
Icons are also provided for the metals (both allomantic and feruchemical) in Mistborn and the radiant orders (along with their corresponding surges) in Stormlight Archive. Examples can be seen in Table~\ref{tab:icons}. The matching set of icons will be loaded with the chosen color scheme, but you can also manually load each icon package.
\begin{figure}[h]
\captionsetup[subfigure]{labelformat=empty}
\captionsetup{labelformat=empty}
\centering
\caption{Samples of the Mistborn and Stormlight icons.}
\begin{subfigure}{0.45\textwidth}
\caption{Mistborn Symbols}
\begin{plotable}{ccl}
Steel & Terris & Meaning \\
\alLerasium & \feLerasium & Lerasium (A)\\
\alIron & \feIron & Iron (B)\\
\alUnknownC & \feUnknownC & Unknown C (C)\\
\alCopper & \feCopper & Copper (D)\\
\alTin & \feTin & Tin (E)\\
\alMalatium & \feMalatium & Malatium (F)\\
\alCadmium & \feCadmium & Cadmium (G)\\
\alUnknownH & \feUnknownH & Unknown H (H)\\
\alUnknownJ & \feUnknownJ & Unknown J (J)\\
\alBendalloy & \feBendalloy & Bendalloy (K)\\
\alZinc & \feZinc & Zinc (L)\\
\alGold & \feGold & Gold (M)\\
\alElectrum & \feElectrum & Electrum (N)\\
\alPewter & \fePewter & Pewter (O)\\
\alSteel & \feSteel & Steel (P)\\
\alBrass & \feBrass & Brass (R)\\
\alDuralumin & \feDuralumin & Duralumin (S)\\
\alBronze & \feBronze & Bronze (T)\\
\alAtium & \feAtium & Atium (V)\\
\alChromium & \feChromium & Chromium (W)\\
\alUnknownX & \feUnknownX & Unknown X (X)\\
\alNicrosil & \feNicrosil & Nicrosil (Y)\\
\alAluminum & \feAluminum & Aluminum (Z)\\
\alEttmetal & \feEttmetal & Ettmetal\\
\alZero & -- & Zero (0)\\
\end{plotable}
\end{subfigure}%
\hfil
\begin{subfigure}{0.45\textwidth}
\caption{Stormlight Symbols}
\begin{plotable}{cccl}
\Block[c]{1-2}{Surges} & & \Block[c]{1-2}{Radiant Order} & \\
\adhesion & \gravitation & \windrunner & Windrunners\\
\gravitation & \division & \skybreaker & Skybreakers\\
\division & \abrasion & \dustbringer & Dustbringers\\
\abrasion & \progression & \edgedancer & Edgedancers\\
\progression & \illumination & \truthwatcher & Truthwatchers\\
\illumination & \transformation & \lightweaver & Lightweavers\\
\transformation & \transportation & \elsecaller & Elsecallers\\
\transportation & \cohesion & \willshaper & Willshapers\\
\cohesion & \tension & \stoneward & Stonewards\\
\tension & \adhesion & \bondsmith & Bondsmiths\\
\end{plotable}
\end{subfigure}
\label{tab:icons}
\end{figure}
\subsection{Feature Boxes}
Three feature boxes are specified using \texttt{tcolorbox}. They are \texttt{featureBox}, \texttt{leftBox}, \texttt{rightBox}, \texttt{calloutBox}, \texttt{altcalloutBox}, and \texttt{paperBox}. You can also use the command \texttt{\textbackslash statBox} to nicely align a left and right box. These boxes support upper and lower content, but you don't have to specify both.
\subsection{Lists}
Lists can be made using the \texttt{itemize} environment. They will automatically use the matching color scheme.
\begin{itemize}[align=left]
\item Item 1
\item Item 2
\item Item 3
\end{itemize}
\begin{description}
\item[Hanging Subheading:] You can also use the \texttt{description} environment to create short subheadings with a hanging indent. See the \texttt{enumitem} package documentation for more details.
\end{description}
\subsection{Statblocks}
Statblocks can be made using the \texttt{\textbackslash MakeStatBlock} command. Similar to the character sheet command, you pass in the attributes, features, and actions for the statblock as key-value pairs. This command currently does not calculate derived attributes, as those tend to not follow the derivation formulae as strictly. You can also change the number of columns in the statblock. Thanks to \texttt{cosmicducks} for contributing this command!
% If you don't want any entry to appear (eg. deflect, Opportunities and Complications) leave that field empty
% Numbers / field entries used here are for purely illustrative purposes, I haven't worked out whether they make sense
% For safety, anything field which contains a comma should have {} around it, eg. {Heavy Weaponry +9, Thievery +5} as below
% Empty fields can be left blank or as {}
\begin{center}
\MakeStatBlock{
% Number of columns, will default to 2. Set to 1 if in multicols{2} environment.
numCols = ,
% Name of character
name = Example Character,
% Character tier rank
tier = 2,
% Character role (Minion, Rival, Boss)
role = Boss,
% Character Size (Small, Medium, Large, Huge, Gargantuan)
size = Gargantuan,
% Character type (Humanoid, Animal, Swarm, Essence, Entity, etc.)
type = Animal,
% Character health (enter in format 'XX (YY-ZZ)')
health = 40 (20-60),
% Character Focus
focus = 5,
% Character Essence/Investiture
essence = 5,
% Character Strength
strength = 5,
% Character Speed
speed = 3,
% Character Intellect
intellect = 2,
% Character Willpower
willpower = 3,
% Character Awareness
awareness = 3,
% Character Presence
presence = 2,
% Character Physical Defense
physDef = 18,
% Character Mental/Cognitive Defense
cogDef = 15,
% Character Spiritual Defense
spiDef = 15,
% Character Deflect
deflect = ,
% Character Movement Speed
movement = 30 ft.,
% Character Sense Range
senses = 20 ft. (sight),
% Character Immunities (eg. Pierce, Immobilised)
immunities = ,
% Physical Skills
physSkills = {Heavy Weaponry +9, Thievery +5},
% Cognitive / Mental Skills
cogSkills = {Discipline +5},
% Spiritual Skills
spiSkills = {Insight +7, Perception +7},
% Surge Skills would go here
surgeSkills = {},
% Metallic Art Skills go here
maSkills = {Allomancy +6 (3 ranks; Tin)},
% Any known languages go here
languages = {},
% Features need to be entered as you want them to display. Default text display uses cstextcolor.
features = {
\textcolor{cscolor}{\textbf{Example feature.}} Feature text goes here.
},
% Actions need to be entered as you want them to display. Default text display uses cstextcolor.
actions = {
\textcolor{cscolor}{\freeAction \textbf{Example Action.}} Action text goes here.
},
% Opportunities and Complications need to be entered as you want them to display. Default text display uses cstextcolor.
oandcs = {}
}
\end{center}
\subsection{Tables}
Tables can be created using \texttt{plotable}. This uses \texttt{nicematrix} under the hood. Like usual, you can refer to Table~\ref{tab:example} with a label.
\begin{table}
\caption{Example Table}
\begin{plotable}{llll}
Heading 1 & Heading 2 & Heading 3 & Heading 4 \\
Lipsum & Lorem ipsum dolor sit amet, consectetur adipiscing elit. & 1234 & 5678 \\
Lipsum & Lorem ipsum dolor sit amet, consectetur adipiscing elit. & 1234 & 5678 \\
Lipsum & Lorem ipsum dolor sit amet, consectetur adipiscing elit. & 1234 & 5678 \\
Lipsum & Lorem ipsum dolor sit amet, consectetur adipiscing elit. & 1234 & 5678 \\
\end{plotable}
\lowercaption{This is a caption that is placed below the table}
\label{tab:example}
\end{table}
\subsection{Talent Paths}
TikZ is used to make the talent paths. You can add a photo as the background, if desired. See the \hyperref[fig:talent-tree]{talent path page} for a sample talent path.
\begin{center}
\noindent
\begin{tcolorbox}[featureBox, title={Feature Box}]
\lipsum[1][1-7]
\tcblower
\tcbsubtitle{Sub Feature}
\lipsum[1][1-3]
\end{tcolorbox}
\statBox{Stat One}{
\normalsize These boxes can have different content...
}%
{Stat Two}{
\normalsize ...and still end up the same height! Even when one is multiple lines.
}
\begin{tcolorbox}[calloutBox, title={Callout Box}]
This is a callout box. It will be as wide as the text (i.e., \texttt{\textbackslash linewidth}) unless you pass a width to the \texttt{tcolorbox} environment.
\end{tcolorbox}
\vspace{\baselineskip}
\end{center}
You can also have a callout box that will float next to the text. To do this, you need to use the \texttt{wrapfig} package. Set the width in the \texttt{wrapfigure} environment and then let the \texttt{tcolorbox} fill the total width.
\begin{wrapfigure}{r}{0.45\textwidth}
\begin{tcolorbox}[altcalloutBox, title={Alt Callout Box}, nobeforeafter]
\lipsum[1][1-4]
\end{tcolorbox}
\end{wrapfigure}
\lipsum[1]
\vspace{0.5\baselineskip}
\begin{tcolorbox}[paperBox, title={Torn Paper Box}]
\lipsum[1]
\end{tcolorbox}
\vspace{\baselineskip}
\begin{tcolorbox}[paperBox, title={The Borders of Subsequent Boxes Match}]
\lipsum[2]
\end{tcolorbox}
\clearpage
\begin{figure*}
\begin{center}
\begin{tikzpicture}
[node distance=1em and -4em,
start chain=going below, overlay, remember picture, background rectangle/.style={fill=cscolor}, show background rectangle]
\node (kt) [fill=none] at (0,0) {
\keyTalent{Key Talent}{
This is how you make a Key Talent.
}
};
\node (ta1) [talent, below left = of kt] {
\talent{\forever Forever}{
This is how you make a Talent box.
}
};
\node (ta2) [talent, below = of ta1] {
\talent{\freeAction Free Action}[Prerequisite: Statistic +2]{
You can also specify a prerequisite for a Talent.
}
};
\node (ta3) [talent, below = of ta2] {
\talent{\action Action}{
You can specify complications with a number \complication[2] or with no numbers \complication. You can also make dice style complications like this \complicationDice[4]
}
};
\node (tb1) [talent, below right = of kt] {
\talent{\doubleAction Double Action}{
You can also specify when \opportunity opportunities happen.
}
};
\node (tb2) [talent, below = of tb1] {
\talent{\tripleAction Triple Action}{
To make a Talent Tree, first specify all of the Talent nodes.
}
};
\node (tb3) [talent, below = of tb2] {
\talent{\reaction Reaction}{
Then, you can use lines to connect the nodes.
}
};
% Connectors
\begin{pgfonlayer}{lines}
\draw [connector] (kt.west) ++(0.15,0) -| (ta1);
\draw [connector] (ta1) -- (ta2);
\draw [connector] (ta2) -- (ta3);
\draw [connector] (kt.east) ++(-0.25,0) -| (tb1);
\draw [connector] (tb1) -- (tb2);
\draw [connector] (tb2) -- (tb3);
\draw [connector] (tb2.west) -| ++(-1.25,0) |- (ta3.east);
\end{pgfonlayer}
\end{tikzpicture}
\end{center}
\label{fig:talent-tree}
\end{figure*}
\null\newpage
\subsection{Timelines}
Timelines can be created using the \texttt{timeline} environment if \texttt{timeline} is passed into the document class options. You can pass in arguments to determine the spacing between major and minor ticks with \texttt{major tick pattern} and adjust the overall scale with \texttt{scale}. Within the timeline environment, the start and end years are specified with the \texttt{era} command. Specific events are added aftwards with the \texttt{event} command. This allows for multiple eras to be chained together in a single timeline.
\begin{figure}
\begin{timeline}[major tick pattern=5, scale=0.2]
\era{start=1700, end=1760, prefix=XX}
\event{year=1702}{An important event happened here.}
\event{year=1750, prefix={The Beginning of an Era --- }}{Prefixes give different colored headings.}
\event{year=1757}{Another important event happened here.}
\end{timeline}
\end{figure}
\section{A Note on Compilation Times}
For basic document, the compilation time with this document class should be fairly low. I have tried to keep all of the icon definitions separated off into their own setting specific packages to help with compilation times. The character sheet command is in its own separate package for that same reason. Slower compilation times are expected for documents that make heavy use of all of the various design elements provided. I have experimented with \texttt{memoize}, but it has compatibility issues with \texttt{tcolorbox} and requires additional setup on the user end. I have also experimented with \texttt{tikzexternalize}, but found its compilation times to be slower than without externalization.
There are a few other packages and strategies I may explore once this package is in a more mature state. If someone else has a successful strategy for improving compilation times, I am all ears. Otherwise, there are some caching strategies that can be implemented on the user end, though those are beyond the scope of my own documentation.
\end{document}