-
Notifications
You must be signed in to change notification settings - Fork 0
/
lithie-boxes.tex
466 lines (371 loc) · 30.4 KB
/
lithie-boxes.tex
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
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
\errorcontextlines 999999
\documentclass[ngerman]{article}
\usepackage[a4paper,total={18cm,25.5cm}]{geometry}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{microtype,hyperref,array,enumitem,booktabs}
\usepackage[main=ngerman,english]{babel}
\addto\captionsngerman{\renewcommand{\tablename}{Tabelle}\renewcommand{\tableautorefname}{\tablename}}
\usepackage[hyperref,enumitem,addons]{color-palettes}
\usepackage[cpalette,upshape,numinpar]{sopra-listings}
\solLoadLanguage{latex}
\usepackage[lockhigh,cpalette]{lithie-boxes}
\LoadBoxStyle{limerence}
\libxLimerenceNormalSize% unmodded sf
\UsePalette{Peach}
\usepackage{imakeidx}
\newcommand{\idxname}{Befehlsübersicht}
\makeindex[title=\idxname,columns=2,columnsep=0.75cm]
\def\say#1{\glqq{}#1\grqq{}}
\def\cmd#1{\texttt{\paletteA{\textbackslash#1}}}
\def\cmdlink#1{\phantomsection\label{cmd:#1}\cmd{#1}}
\def\cmdref#1{\hyperref[cmd:#1]{\cmd{#1}}}
\def\env#1{\texttt{\paletteB{#1}}}
\def\envlink#1{\phantomsection\label{env:#1}\env{#1}}
\def\envref#1{\hyperref[env:#1]{\env{#1}}}
\def\optstar{\textit{\(\langle\,\)\T{\paletteA{*}}\(\rangle\)}}
\def\arg#1{\textit{\paletteB{#1}}}
\def\manArg#1{\texttt{\{\,\arg{#1}\,\}}}
\def\optArg#1{\texttt{[\,\arg{#1}\,]}}
\def\cusArg#1#2#3{\texttt{#1\,\arg{#2}\,#3}}
\def\secref#1{\hyperref[#1]{\ref*{#1} \nameref*{#1}}}
\long\def\imp#1{\emph{\paletteD{#1}}}
\def\packageOption#1{\T{\normalcolor#1}}
\def\packagelink#1{\phantomsection\label{po:#1}\index{#1?\protect\packageref{#1}}\packageref{#1}}
\def\packageref#1{\hyperref[po:#1]{\packageOption{#1}}}
\newenvironment{command}[3][v1.0]{\leavevmode\\[-\baselineskip]\hspace*{-1.75em}\index{#2?\cmdref{#2}}\cmdlink{#2}$\,$#3\hfill{}\texttt{#1}\nopagebreak\smallskip\\*}{\bigskip\par{}}
\newenvironment{environment}[3][v1.0]{\leavevmode\\[-\baselineskip]\hspace*{-1.75em}\index{#2?\envref{#2}\textsuperscript{\,\textsf{(env)}}}\envlink{#2}$\,$#3\hfill{}\texttt{#1}\nopagebreak\smallskip\\*}{\bigskip\par{}}
\setlength{\parindent}{0pt}
\setlength{\parskip}{0.35\baselineskip plus 0.15\baselineskip minus 0.05\baselineskip}
\title{\textsf{\paletteD{\{}\paletteA{lithie-boxes}\paletteD{\}}}}
\author{Florian Sihler}
\date{\today}
\newlistof{codeliste}{lcode}{Alle Codeboxen}%
\RegisterBox{%
list name=codeliste,%
list men=lcode,%
custom list=true,
has emblem=true,%
in code=\noindent,%
emblem=\protect\faCode,%
box color=purple,%
use style=libx@box@Definition%
}{}{code}{Code}{cde}%
\renewcommand*{\thefootnote}{$\langle${\arabic{footnote}}$\rangle$}
\renewcommand*{\thempfootnote}{$\langle${\alph{mpfootnote}}$\rangle$}
\begin{document}
\maketitle
\begin{abstract}
Dieses Paket ist die eigenständige, (immens) verbesserte und polierte Variante des Box-Mechanismus des \href{https://github.com/EagleoutIce/LILLY}{Lilly-Frameworks}. Die Namen einiger Bezeichner innerhalb dieses Dokuments hängen von der konfigurierten Sprache ab. Da dieses Dokument in deutscher Sprache gefasst wurde, sind die hier angegebenen Standardbezeichner auch jeweils in deutscher Sprache gesetzt. Das Paket bietet eine Unterstützung für \href{https://github.com/EagleoutIce/color-palettes}{color-palettes}, die Quellcode-Ausschnitte in diesem Dokument wurden mit \T{sopra-listings} aus der \href{https://github.com/EagleoutIce/sopra-collection}{sopra-collection} gesetzt.
\end{abstract}
\tableofcontents
\section{Ein Schnelleinstieg}
Bevor die genauere Betrachtung der Boxmechanik ansteht, ist hier eine Kurzübersicht über die Verwendung. Grundlegend werden durch das Paket sieben Boxen geladen, deren Bezeichner und derer Textsatz von der konfigurierten Sprache abhängen\footnote{Unterstützt werden die englische und die deutsche Sprache}.
Die Sprache beeinflusst selbst den Bezeichner der Umgebungen. Diese können durch die \hyperref[sec:packetoptions]{Paketoptionen} allerdings auch unabhängig von der Ausgabe-Sprache generiert werden.
Wie bereits zu Beginn erwähnt, wird im Rahmen der Dokumentation die deutsche Sprache verwendet, die englischen Pendants
sind jeweils angemerkt.
\subsection{Die Boxen}
Betrachten wir die Darstellung einer Definition durch \envref{definition}:
\begin{latex}
\begin{definition}[Referenztitel]{Ich bin eine Definition}
\label{def:example}Dies ist der Text innerhalb der Definition.
\end{definition}
Ein Verweis auf \autoref{def:example}. Eine tolle \boxref{def:example}.
\end{latex}
Die Struktur ist hierbei für alle Boxen dieselbe. Wir der \arg{Referenztitel} nicht angegebenen, so wird der \say{lange} Titel gewählt (analog zu Befehlen wie \cmd{section}). Das Ergebnis des eben gezeigten Listings ist das Folgende (Linien zur Trennung eingefügt)\footnote{Der Befehl \cmd{autoref} entstammt dem Paket \T{hyperref} welches nicht geladen werden oder sein muss um die Boxen zu verwenden. Für weitere Befehle siehe \cmdref{boxref} oder \cmdref{boxnameref}.}: \\
\rule{\linewidth}{.5pt}%
\begin{definition}[Referenztitel]{Ich bin eine Definition}
\label{def:example}Dies ist der Text innerhalb der Definition.
\end{definition}
Ein Verweis auf \autoref{def:example}. Eine tolle \boxref{def:example}.\\
\rule{\linewidth}{.5pt}\\
Ebenso gibt es die Boxen \envref{bemerkung}, \envref{satz}, \envref{beispiel}, \envref{lemma}, \envref{beweis} und \envref{zusammenfassung}. Jede dieser Boxen besitzt eine Variante mit Sternchen in der sie als wichtig hervorgehoben wird:
\begin{latex}
\begin{satz*}[Supersatz]{Ein Beispielsatz}
Ich bin ein Beispielsatz.
\end{satz*}
\end{latex}
Das Ergebnis ist das Folgende:
\begin{satz*}[Supersatz]{Ein Beispielsatz}
Ich bin ein Beispielsatz.
\end{satz*}
Eine Auflistung aller Boxen gibt es mittels des Befehls \cmd{listof<enboxpl>} wobei \T{enboxpl} den englischen Plural des Boxtitels bezeichnet\footnote{Der Befehl ändert sich auch nicht durch eine andere Sprache oder Optionen, da Bezeichner wie \cmd{listofbemerkungen} sehr seltsam wirken.}. So ist die Ausgabe von \cmdref{listofdefinitions} exemplarisch \hyperref[mrk:listofdefs]{am Ende} aufgeführt.
\subsection{Stile}
Die Gestaltung der Boxen kann durch Stile verändert werden.
Diese können über \cmdref{LoadBoxStyle} geladen und geändert werden. Es können eigene Stile definiert werden (\cmd{libx@UpdateAllBoxStyles}). In diesem Dokument ist der
Stil \T{limerence} geladen. Der Standard-Stil \T{default} muss nicht manuell geladen
werden, erlaubt es aber den Stil im Dokument zu ändern:
{
\LoadBoxStyle{default}%
\begin{definition*}{Definition im standard Stil}
Ich fasse Fässer zusammen.
\end{definition*}
}
Die Stile können durch normale \LaTeX-Gruppen begrenzt werden. Nach dem Verlassen wird der letzte Stil wiederhergestellt:
\begin{definition}{Wieder eine normale Definition}
Back to normal.
\end{definition}
Darüber hinaus besitzt jede Box eine \say{Plain}-Variante (diese kann und wird auch vom jeweiligen Stil geändert). Für mehr Informationen über die Verwendung siehe \cmdref{SetBoxPlain} oder die \hyperref[sec:packetoptions]{Paketoption} \packageref{autostyle}.
\subsection{Nummerierung}
Die Nummerierung der Boxen kann durch \hyperref[sec:packetoptions]{Paketoptionen} kontrolliert werden. So sorgt \packageref{lockhigh} zum Beispiel dafür, dass die Nummerierung sich an der höheren Gliederungsebene im Dokument orientiert.
Diese Option wird auch in dieser Dokumentation verwendet. Mit \packageref{nolock} können diese Sperren deaktiviert werden.
\subsection{Hinweis zu den Listen}
Das Paket schiebt ein paar Abstraktionen zwischen dem Setzen einer Box und dem Eintrag in die Liste. Dies sorgt dafür, dass auch im Falle von \say{schwebenden} (floating) Boxen die Reihenfolge im \LaTeX-Code eingehalten wird.
\section{Nutzerbefehle}
\subsection{Die Standardboxen}
Hinweis für die Beispiele: Die Dokumentation macht \emph{nicht} von der \hyperref[sec:packetoptions]{Paketoptionen} \packageref{autostyle} gebrauch. Die Farben werden allerdings durch die Palette \say{\CurrentPalette}.
\begin{bemerkung*}(after=\bigskip){Bezüglich des Klammerarguments}
\label{bem:optbracekey}Jede Box unterstützt auch das Argument \arg{Boxargs}. Dieses ist ebenfalls optional, erlaubt es aber weitere Argumente an die zugrundeliegende Box zu übergeben!
Möchte man zum Beispiel eine Floating-zusammenfassung haben, so genügt:
% TODO: LaTeX Plain
\begin{latex}
\begin{zusammenfassung}(float){Ich bin eine fliegende Zusammen!**!fassung}
Dies ist der Text einer fliegenden Zusammen!**!fassung.
\end{zusammenfassung}
\end{latex}
Die Ausgabe findet sich in \boxref{zsf:floatingex}.
Möchte man in einem Zweispaltigen Dokument eine Definition die beide Spalten überspannt so gilt es einfach \T{float*} anstelle von \T{float} zu verwenden\footnote{Wichtig! Wie auch die Dokumentation von \href{https://www.ctan.org/pkg/tcolorbox}{tcolorbox} darauf hinweist, ist im Falle einer wirklich über beide Spalten gehende Box auch noch \T{width=\cmd{textwidth}} anzufügen.}. Über \T{floatplacement} oder \T{float=htbp}, können Platzierungshinweise analog zum optionalen Argument bei Umgebungen wie \env{figure} angegeben werden. Für mehr Informationen empfiehlt sich die Dokumentation von \href{https://www.ctan.org/pkg/tcolorbox}{tcolorbox}.
Natürlich kann so auch ein Referenztitel übergeben werden:
\begin{latex}
\begin{zusammenfassung}(float*=b, width=\textwidth)[Und ich der Referenztitel]
{Ich bin auch eine fliegende Zusammen!**!fassung}
Dies ist der Text einer fliegenden Zusammen!**!fassung.
\end{zusammenfassung}
\end{latex}
Für das Ergebnis siehe hier: \boxref{zsf:floatingex2}.
Wichtige Anmerkung: Der Schlüssel \T{hypertarget} sollte nur mit äußerster Vorsicht modifiziert werden, da er für interne Mechaniken des Pakets verwendet werden!
\end{bemerkung*}
\begin{zusammenfassung}(float,floatplacement=t){Ich bin eine fliegende Zusammenfassung}
\label{zsf:floatingex}Dies ist der Text einer fliegenden Zusammenfassung.
\end{zusammenfassung}
\begin{zusammenfassung}(float*=b, width=\textwidth)[Und ich der Referenztitel]
{Ich bin auch eine fliegende Zusammenfassung}
\label{zsf:floatingex2}Dies ist der Text einer fliegenden Zusammenfassung.
\end{zusammenfassung}
\makeatletter
% #1 eng id #2 ger id #3 eng name % #4 eng plural #5 internal style % #6 file ending
% #7 full title
\def\PresentBoxEnv#1#2#3#4#5#6#7{%
\edef\libx@boxid{#2}%
\begin{environment}{\@nameuse{@libx@#1@envname}}{\label{env:#3}\cusArg{(}{Boxargs}{)}\optArg{Referenztitel}\manArg{Titel}}
\index{#3?\envref{#3}\textsuperscript{\,\textsf{(eng. $\rightarrow$ \@nameuse{@libx@#1@envname})}}}%
Setzt eine \say{\libx@get{Title}}-Box.
Kommandos im Titel müssen robust sein.
Wird kein \arg{Referenztitel} angegeben, so wird der \arg{Titel} als Referenztitel für Querverweise verwendet. Die gesternte Variante
der Umgebung wird durch das Emblem \say{\libx@box@get{#2@s}{Emblem}} von den
normalen Boxen abgesetzt. Die Bedeutung von \arg{Boxargs} wird in \boxref*{bem:optbracekey} erklärt.
Die englische Umgebung trägt den Namen \T{#3}. Der Bezeichner für \cmd{autoref} befindet sich
in \cmdlink{#4name} (\@nameuse{#4name}), die Liste aller Beispiele kann durch \cmdlink{listof#4} gesetzt werden. Der Titel der Liste befindet sich in \cmd{#4listname} (\@nameuse{#4listname}).\par{}
Der interne Stil der Box trägt den Bezeichner \T{#5}, die interne Id ist \T{#2}, die Datei aller Boxen dieses Typs trägt das Suffix \T{#6}.
Beispiel:
\begin{\@nameuse{@libx@#1@envname}}{Trooper-Box für #7}
Ich bin eine Beispiel-Box-Fox. Für die \say{\libx@get{Title}}-Box. Ach ja und ich bin Text um zu Erzwingen, dass ein Zeilenumbruch in der Box stattfindet und man auch sieht wie sich das mit nem Zeilenumbruch so verhält.
\end{\@nameuse{@libx@#1@envname}}
\end{environment}
}
\makeatother
\PresentBoxEnv{def}{def}{definition}{definitions}{Definition}{ldefs}{Definition}
\PresentBoxEnv{rem}{bem}{remark}{remarks}{Remark}{lrem}{Bemerkung}
\PresentBoxEnv{the}{sat}{theorem}{theorems}{Theorem}{ltheo}{Satz}
\PresentBoxEnv{exa}{bei}{example}{examples}{Example}{lexa}{Beispiel}
\PresentBoxEnv{lem}{lem}{lemma}{lemmas}{Lemma}{llem}{Lemma}
\PresentBoxEnv{pro}{bew}{proof}{proofs}{Proof}{lpro}{Beweis}
\PresentBoxEnv{sum}{zsf}{summary}{summaries}{Summary}{lsum}{Zusammenfassung}
\subsection{Referenzen}
Um eine Unabhängigkeit vom Befehl \cmd{autoref} zu erzielen gibt es im Folgenden Referenzbefehle die in der Lage sind, die selbe Ausgabe zu erzeugen. Diese sind allerdings nicht von den \cmd{<Box>name}-Befehlen beeinflusst\footnote{\def\definitionsname{Walter}Das heißt, dass eine um-definition von \cmdref{definitionsname} die Ausgabe von \cmd{autoref} verändert, aber nicht die von \cmdref{boxref}. Beispiel (\cmdref{definitionsname} wurde auf \say{\definitionsname} geändert): \autoref{def:example} (\cmd{autoref}), \boxref*{def:example} (\cmdref{boxref}).}.
\begin{command}{boxref}{\optstar\manArg{anchor}}
Erzeugt einen Querverweis analog zu \cmd{nameref} oder \cmd{ref}. Angezeigt wird
der Boxbezeichner samt Nummer wie auch des Titels: \T{\cmd{boxref}\{def:example\}} erzeugt: \say{\boxref{def:example}}. Mit dem Stern wird allerdings nur die Kurzform ausgegeben (gleicht \cmd{autoref}). So ergibt \T{\cmd{boxref*}\{def:example\}} die Ausgabe: \say{\boxref*{def:example}}.
Der Befehl ist robust.
\end{command}
\begin{command}{boxnameref}{\optstar\manArg{anchor}}
Erzeugt einen Querverweis analog zu \cmd{nameref} oder \cmd{ref}. Nach aktuellem Stand entspricht die Variante ohne Stern der von \cmdref{boxref}. Mit Stern ergibt sich allerdings nur noch der eigentliche Titel \T{\cmd{boxnameref*}\{def:example\}} der Box als Ausgabe: \say{\boxnameref*{def:example}}.
Der Befehl ist robust.
\end{command}
\subsection{Verändern bestehender Boxen}
Die folgenden Befehle sind in sofern noch unvollständig, als dass sie es (noch) nicht erlauben, alle Eigenschaften einer Box zu modifizieren. Sie bieten (hauptsächlich) ein freundliches Interface internen Befehle \cmd{libx@update@boxdata} und \cmd{libx@update@boxif}.
Hinweis: Die eigentliche Signatur mancher Befehle mag hier (was optionale Argumente angeht) von der präsentierten Abweichen. Dies liegt daran,
dass manche Optionen für die Zukunft bereits eingebaut wurden, ohne dass
sie einen Zweck erfüllen oder abgesichert wurden (Beispiel: \cmdref{SetBoxPlain}).
\begin{command}{SetBoxPlain}{\optstar\manArg{Boxbezeichner}}
Sorgt dafür, dass die Box in der \say{Plain}-Variante gesetzt wird. Interessant ist, dass die \say{gesternte} Box-Variante unabhängig von der normalen auf Plain gesetzt werden kann (und umgekehrt). Liefert man aber den optionalen Stern für \cmd{SetBoxPlain}, so wird die Variante für beide Umgebungen aktualisiert. Betrachten wir ein Beispiel:
\SetBoxPlain{definition}%
\begin{definition}{Ich bin die Plaine-Ihräine}
Und ich bin der Text der das Böxoli ziert.\par{}
Ich bin die Sonne, die Wonne, der Glanz, da um mich tanzt; die Welt in der Hand und es trifft sich zum
Schank; ach dann und wann ein jed-wed jeder der Lächeln noch kann.
\end{definition}
\SetBoxPlain[]{definition}%
Wie leicht sichtbar ist, wird im geladenen Stil (\CurrentBoxStyle) ein Endsymbol gesetzt um zu signalisieren, dass die Box hier vorbei ist.
Möchte man wieder zur \say{normalen} Variante so ist dies aktuell möglich, in dem man ein leeres optionales Argument übergibt. Also:
\T{\cmd{SetBoxPlain}[]\{definition\}} (als Beispiel).
\end{command}
\begin{command}{SetBoxesPlain}{\optstar\manArg{Boxliste}}
Dieser Befehl arbeitet analog zu \cmdref{SetBoxPlain}, erlaubt es aber mittels Kommata separiert, mehrere Boxbezeichner zu übergeben. Für jeden einzelnen wird dann \cmdref{SetBoxPlain} entsprechend ausgeführt.
\end{command}
\begin{command}{SetBoxDisabled}{\optstar\manArg{true/false}\manArg{Boxbezeichner}}
Sorgt dafür, dass die Box nicht gesetzt wird. Interessant ist, dass die \say{gesternte} Box-Variante unabhängig von der normalen auf versteckt werden kann (und umgekehrt). Liefert man aber den optionalen Stern für \cmd{SetBoxDisabled}, so werden beide Umgebungen versteckt.
Möchte man die Boxen wieder anzeigen so genügt das Übergeben von \T{true}\footnote{Natürlich wirkt das nicht intuitiv, \T{true} zu übergeben, damit die Box wieder angezeigt wird. Dies kann sich in kommenden Versionen noch ändern.}: \T{\cmd{SetBoxDisabled}[true]\{definition\}}.
\end{command}
\begin{command}{SetBoxesDisabled}{\optstar\manArg{true/false}\manArg{Boxliste}}
Dieser Befehl arbeitet analog wie \cmdref{SetBoxesPlain} zu \cmdref{SetBoxPlain}, erlaubt es aber mittels Kommata separiert, mehrere Boxbezeichner zu übergeben. Für jeden einzelnen wird dann \cmdref{SetBoxDisabled} entsprechend ausgeführt.
\end{command}
\begin{command}{SetBoxColor}{\optstar\manArg{Boxbezeichner}\manArg{Farbe}}
Ändert die Farbe der angegebenen Box. Interessant ist, dass die \say{gesternte} Box-Variante unabhängig von der normalenverändert werden kann (und umgekehrt). Liefert man aber den optionalen Stern für \cmd{SetBoxPlain}, so wird die Farbe für beide Umgebungen aktualisiert.
Setzen wir zum Beispiel die Farbe der Definitionen auf ein knalliges gift-grün:
{\makeatletter\xdef\oldcol{\libx@box@get{def}{BoxColor}}
\SetBoxColor{definition}{lime}
\begin{definition}{Beispieldefinition}
Hilfe ich bin ein verzauberter Giftzwerg!
\end{definition}
\SetBoxColor{definition}{\oldcol}%
}
\end{command}
\subsection{Stile}
\begin{command}{LoadBoxStyle}{\manArg{Bezeichner}}
Lädt eine Datei mit der Bezeichnung: {\makeatletter\say{\T{\arg{Bezeichner}{\libx@loadstyle@ending}}}}. Gesucht wird an den \cmd{input}-Pfaden.
\end{command}
\begin{command}{CurrentBoxStyle}{}
Dieses Makro sollte nicht neu definiert werden.
Es enthält den Bezeichner des aktuell geladenen Stils (\CurrentBoxStyle).
\end{command}
\begin{command}[v1.1]{RefreshBoxStyle}{}
Lädt den \cmdref{CurrentBoxStyle} noch einmal. Kann dazu verwendet werden um nachträglich definierte Boxen mit einzugliedern.
\end{command}
\subsection{Eigene Boxen definieren}
Hinweis: das definieren eigener Boxen ist aktuell noch etwas umständlich, sofern man \say{abgefahrene Sachen} machen will (wie der Block am Ende eines Beweises; siehe \envref{beweis}). In diesem Fall kann aktuell nur der Quellcode des Pakets selbst als Beispiel herhalten.
\begin{command}{RegisterBox}{\manArg{Boxkeys}\manArg{Tikzkeys}\manArg{Boxname}\manArg{Titel}\manArg{GroupId}}
Erzeugt eine neue Box mit den entsprechenden Parametern. Die (wichtigsten) gültigen Parameter für \arg{Boxkeys} sind \autoref{tbl:boxkeys} zu entnehmen. Die \arg{Tikzkeys} erlauben es beliebige Ti\textit{k}z-Kommandos an die Box zu übergeben.
Der \arg{Boxname} bezeichnet den späteren Namen der Umgebung, durch die die Box erzeugt werden soll.
Der \arg{Titel} bezeichnet nicht den Titel der jeweiligen Box, sondern
das Präfix (wie \T{Definition}).
Die \arg{GroupId} muss ein eindeutiger (am Besten möglichst kurzer) Bezeichner sein, der intern für die Persistierung und Handhabung der
Box verwendet wird.
\imp{Eine Boxdefinition muss in der Präambel erfolgen um ungewünschte Seiteneffekte zu vermeiden!}
Betrachten wir einmal ein Beispiel, wie eine Box erzeugt werden kann\footnote{Dieses Beispiel ist im Verhältnis zu den anderen Boxen etwas einfacher gehalten}. Da wir noch nicht wissen, wie mit \cmdref{RegisterNewDefaultStyle} eigene Stile definiert werden können, verwenden wir hier den Stil der Definition.
\begin{latex}[morekeywords={[1]{\\RegisterBox,\\newlistof,\\protect}}]
\newlistof{codeliste}{lcode}{Alle Codeboxen}%
\RegisterBox{%
list name=codeliste,%
list men=lcode,%
has emblem=true,%
in code=\noindent,%
emblem=\protect!**!\faCode,%
box color=purple,%
use style=libx@box@Definition}%
{}{code}{Code}{cde}%
\end{latex}
Setzen wir doch mal unsere Code-Box (für die Umgebung \env{java} ist das Paket \T{sopra-listings} aus der \href{https://github.com/EagleoutIce/sopra-collection}{sopra-collection} vonnöten):
\begin{latex}[morekeywords={[3]{code}}]
\begin{code}{Ich bin eine Codebox!}
Super Code nicht wahr?
\begin{java}
System.out.println("Hallo Welt!");
\end{java}
\end{code}
\end{latex}
Wir erhalten:
\begin{code}{Ich bin eine Codebox!}
Super Code nicht wahr?
\begin{java}
System.out.println("Hallo Welt!");
\end{java}
\end{code}
Wir haben also den Nummer der Definition benutzt, sind aber nicht in der Liste eingetragen, da wir unseren eigenen verwenden! Dafür können wir nun mit
\cmd{listofcodeliste} die Liste aller Codeboxen anzeigen:
\listofcodeliste%
\end{command}
\begin{table}[tbhp]
\renewcommand{\arraystretch}{1.5}%
\centering\begin{tabular}{>{\ttfamily}p{0.15\linewidth}>{\ttfamily}p{0.075\linewidth}>{\ttfamily}p{0.1\linewidth}p{0.57\linewidth}}
\toprule
Schlüssel & Typ & Default & Beschreibung \\
\midrule
box color & color & black & Die Farbe der Box. Muss einige gültige Farbe sein. \\
pre code & code & & (\LaTeX-)Code der vor dem Beginn der Box ausgeführt werden soll. \\
in code & code & & (\LaTeX-)Code der innerhalb der Box vor dem Beginn des eigentlichen Inhalts (aber nach dem Titel) ausgeführt werden soll. \\
out code & code & & (\LaTeX-)Code der vor dem Verlassen der Box ausgeführt werden soll (aber nach dem eigentlichen Inhalt). \\
post code & code & & (\LaTeX-)Code der nach dem Ende der Box ausgeführt werden soll. \\
use style & style & & Der durch \cmdref{RegisterNewDefaultStyle} definierte Stil. Dies kann auch einer der bereits bestehenden Stile sein. Auch wenn der Parameter optional erscheint, so ist er dennoch verpflichtend. Es gilt zu beachten, dass der Stil auch die (volle) Kontrolle über den Zähler besitzt. \\
emblem & code & & Das zu setzende Emblem (wird zum Beispiel bei der gesternten Variante von \envref{definition} als \cmd{faStar} gesetzt.). Der Code sollte durch \cmd{protect} abgesichert werden, wenn es sich um problematische Makros handelt. \\
has emblem & bool & false & Eigentliche Flagge, die angibt ob das Emblem auch gesetzt werden soll. Dies sorgt auch dafür, dass in den Listen Platz für ein Emblem gehalten wird. So wird zum Beispiel dafür gesorgt, dass die Einrückung auch für Definitionen auch ohne Emblem korrekt ist.\\
custom list & bool & true & Gibt an ob sich die Box in einer Liste registrieren soll. Ist dieser Wert auf \say{wahr}, so ist es unabdingbar \T{list name}, \T{list text} und \T{list men} zu setzen und mit den Informationen der zugrundeliegenden Liste zu füllen. \\
list name & text & & Der Name der zugrundeliegenden Liste (muss extra mit z.B. \cmd{newlistof} aus dem Paket \T{tocloft} definiert werden). Es können auch bestehende Listen verwendet werden. \\
list men & text & & Die Dateibezeichnung der Liste. Die Regeln gelten analog zu \T{list name}. \\
\bottomrule
\end{tabular}
\caption[Optionen für die Boxkeys in \cmdref{RegisterBox}.]{Optionen für die Boxkeys in \cmdref{RegisterBox}. Hier sind nur die wichtigsten Schlüssel aufgeführt. Manch andere wie \T{name} werden durch andere Befehle bereits gesetzt.}
\label{tbl:boxkeys}
\end{table}
\begin{command}{RegisterNewDefaultStyle}{\manArg{Name}\manArg{Options}}
Erzeugt einen neuen Stil der zum Beispiel von \cmdref{RegisterBox} verwendet werden kann. Die \arg{Options} bezeichnen weitere tcolorbox-Argumente. Erzeugt wird der Stil \T{libx@box@\arg{Name}}.
\end{command}
\subsection{Weitere Befehle}
\begin{command}{libxlistofheading}{\manArg{Command}}
Dieser Befehl ist nur dann von Relevanz wenn die Koma-Script-Kompatibilität aktiv ist (sonst gibt er eine Warnung aus und bleibt ohne Bedeutung). Er erlaubt es den Titel eines \cmd{listof<enboxpl>}-Befehls zu konfigurieren. Die Standardkonfiguration ist die Folgende:
\begin{latex*}[morekeywords={[5]{\\libxlistofheading}},morekeywords={[2]{\\@mkboth}}]
\libxlistofheading{\section*{#1\@mkboth{#1}{#1}}}%
\end{latex*}
Hierbei wird \T{\#1} automatisch durch den jeweiligen Titel ersetzt. Möchte man also nun einfach, dass die Listen sich als \cmd{subsection} auch im \cmd{tableofcontents} registrieren und davor noch \say{Hallo Welt} schreiben, so wäre folgender Befehl möglich:
\begin{latex*}[morekeywords={[5]{\\libxlistofheading}}]
\libxlistofheading{\subsection{#1} Hallo Welt}%
\end{latex*}
Ein Beispiel dazu lässt sich in der \T{example.pdf} finden, die sich \href{https://media.githubusercontent.com/media/EagleoutIce/lithie-boxes/gh-pages/example.pdf}{hier} befinden sollte.
\end{command}
% TODO: geladenen Pakete/abhängigkeiten?
\section{Paketoptionen}
\label{sec:packetoptions}Das Paket erlaubt einige Optionen zur Konfiguration.
Die Dokumentation wurde mit den Folgenden Optionen geladen:
\begin{latex*}[morekeywords={[5]{\\LoadBoxStyle}},add to literate={lithie-boxes}{{\paletteD{lithie-boxes}}}3]
\usepackage[lockhigh,cpalette]{lithie-boxes}
\LoadBoxStyle{limerence}
\end{latex*}
\paragraph{Nummerierungskontrolle}
Mit den Optionen \packagelink{lockhigh} und \packagelink{locklow} kann konfiguriert werden, wie die Nummerierung
des Dokuments von statten geht. Hierbei verwendet \packageref{lockhigh} die jeweils höhere Hierarchieebene\footnote{Also wenn vorhanden: \cmd{chapter}, sonst \cmd{section}.} und \packagelink{locklow} die jeweils niedrigere\footnote{Ist also \cmd{chapter} vorhanden, wird \cmd{section} gewählt, sonst wird \cmd{subsection} gewählt.}. Derartige Nummerierungen können mit der Option \packagelink{nolock}
deaktiviert werden (diese Option ist auch der Standard). In diesem Dokument wird \packageref{lockhigh} verwendet.
\paragraph{Box-Varianten}
Standardmäßig werden alle Boxen in der normalen Variante gesetzt. Die Paketoption \packagelink{autostyle} sorgt allerdings dafür, dass automatisch einige Boxen mit der \cmdref{SetBoxPlain}-Routine konfiguriert werden um einen schöneren Fokus zu legen. Die \packageref{autostyle}-Option aktiviert auch gleichzeitig die im Folgenden beschriebene Option \packageref{cpallete}. Die \packagelink{noautostyle}-Option deaktiviert die Mechanik (lässt \packageref{cpalette} aber unverändert).
\paragraph{Farben}
Mit der Option \packagelink{cpalette} muss das Paket \href{https://github.com/EagleoutIce/color-palettes}{color-palettes} \emph{zuvor} geladen werden.
Die Option (welche in der Dokumentation ebenfalls aktiv ist) sorgt dafür, dass die Boxfarben sich
an der jeweiligen Palette orientieren. Im Gegensatz zu einer Stil-Änderung beeinflusst die Option
allerdings nur die Optionen, die vom Paket mitgeliefert werden.
Die Option kann mit \packagelink{nocpalette} deaktiviert werden.
\paragraph{Umgebungsbezeichner}
Standardmäßig orientieren sich die Bezeichner der Umgebungen an der Sprache.
Dies kann aber problematisch sein, wenn man sich entweder an eine Sprache gewöhnt oder die Sprache
im Dokument einfach ändert.
Die Option \packagelink{germanenv} sorgt dafür, dass die Umgebungen unabhängig von der Ausgabesprache die
Bezeichner in deutscher Sprache erhalten. Analog verfährt die Option \packagelink{englishenv} mit der englischen Sprache für die Umgebungen.
Die Option \packagelink{autoenv} wechselt wieder zur Standardkonfiguration, welche den Namen anhand der Dokumentsprache herausfindet\footnote{Wichtig: Es ist die konfigurierte Sprache zum Ladezeitpunkt des Pakets von Relevanz. Es empfiehlt sich also Pakete wie \T{babel} vor diesem Paket zu laden, wenn man von der automatischen Spracherkennung Gebrauch machen möchte.}.
\paragraph{Koma-Script}
Das Paket versucht automatisch zu erkennen ob das Koma-Script geladen wird und dann entsprechende Maßnahmen zu ergreifen um bestmöglich kompatibel zu sein (mock von \T{tocloft}, \ldots).
Sollte die Erkennung allerdings Schieflaufen oder zu ungewollten Problemen führen (oder andere Pakete ohnehin einige Optionen vernichten), so kann mit \packagelink{nokoma} die Anwendung der Kompatibilitätsmaßnahmen deaktiviert werden.
Analog lassen sie sich mit \packagelink{koma} erzwingen.
\paragraph{Sprache}
Für Übersetzungen verwendet dieses Paket die Hilfe von \href{https://ctan.org/pkg/translator}{translator}, welches die
Sprache aus dem Befehl \cmd{languagename} extrahiert. Je nach Installation kann es allerdings sein, dass die Sprache falsch erkannt wird\footnote{Dies sollte nicht geschehen, wenn die gewünschte Sprache der Dokumentklasse selbst übergeben wird.}! In diesem Fall erzwingt \packagelink{german} das Setzen in deutscher Sprache (dies beeinflusst \packageref{autoenv}, hat aber keinen Einfluss auf die Umgebungsnamen wenn diese mit \packageref{englishenv} auf Englisch gezwungen werden) und analog \packagelink{english} das Setzen in englischer Sprache (mit denselben Wechselwirkungen mit \packageref{autoenv} und \packageref{englishenv}). Die Option \packageref{autolang} ist der Standard und versucht die Sprache aus \cmd{languagename} zu extrahieren\footnote{Das Paket \href{https://ctan.org/pkg/iflang}{iflang} wird nicht verwendet.}.
\paragraph{Textfluss}
Der Paketautor\footnote{Das bin ich :P}, hat eine große Freude an rechteckigen Paragraphen. Diese können aber vor allem in Boxen zu einem schlechteren Textfluss beitragen, weswegen die Option \packagelink{noparfill} (Standard) derartige Vorkehrungen \say{zunichte} macht. Möchte man dennoch derartige Optionen so genügt es, die Option \packagelink{parfill} anzugeben\footnote{Hinweis: Simpel gesagt setzt \packageref{noparfill} nur das in \cmd{@@libx@noparfill} hinterlegte Makro.}. Ebenso funktionieren \packagelink{parskip} und \packagelink{noparskip} für den Abstand bei Paragraphen.
\paragraph{Bestehende Umgebungen}
Manche Pakete definieren bereits Umgebungen welche den Namen von Boxumgebungen tragen, was dann natürlich
zu Konflikten führt. Mit der Option \packagelink{overwrite} wird das Paket die bestehenden Umgebungen
überschreiben (und keinen Fehler ausgeben, wenn noch keine Umgebung mit dem Namen existiert. In diesem Fall wird einfach eine neue erstellt). Dieses Verhalten kann mit \packagelink{nooverwrite} unterdrückt werden.
\section{Versionierung}
\subsection{Version 1.0}
Initiale Version mit den Boxen \envref{definition}, \envref{bemerkung}, \envref{satz}, \envref{beispiel}, \envref{lemma}, \envref{beweis} und \envref{zusammenfassung}. Auch
Befehle wie \cmdref{boxref} und \cmdref{LoadBoxStyle} wurden eingeführt.
\subsection{Version 1.1}
Ein paar kleine Verbesserungen wie ein Befehl \cmdref{RefreshBoxStyle} wurden vorgenommen.
Limerence kann nun die Titelschriftgröße mit \cmd{libxLimerenceNormalSize} und \cmd{libxLimerenceSmallerSize} ändern.
\clearpage\appendix
\phantomsection\addcontentsline{toc}{section}{\idxname}
\printindex
\addcontentsline{toc}{section}{Beispielhafte Listen}
\phantomsection\label{mrk:listofdefs}%
\listofdefinitions
\listoftheorems
\listofremarks
\listofsummaries
\end{document}