Compare commits

...

7 Commits
v1.1.0 ... main

Author SHA1 Message Date
John Haverlack 9db4082835 Roadmap & License Update 2026-02-12 09:01:43 -09:00
John Haverlack 90d7564013 Font Fix 2026-02-12 08:49:58 -09:00
John Haverlack 8384c47f11 v1.2.3 2026-02-05 17:36:18 -09:00
John Haverlack da0e59bd22 v1.2.3: MathJax refactor 2026-02-05 16:02:15 -09:00
John Haverlack 5e0ffff98d v1.2.2 2026-02-05 15:41:34 -09:00
John Haverlack 7115de389f v1.2.1 2026-02-05 15:39:08 -09:00
John Haverlack 74b4efd2cf v1.2.0 2026-02-05 15:35:47 -09:00
129 changed files with 1966 additions and 3426 deletions

View File

@ -4,17 +4,21 @@
"type": "split", "type": "split",
"children": [ "children": [
{ {
"id": "f0990ffd7a67a2ec", "id": "2d8c08f76d34c644",
"type": "tabs", "type": "tabs",
"children": [ "children": [
{ {
"id": "9f4cd104c7d85619", "id": "24988c076d2f30d6",
"type": "leaf", "type": "leaf",
"state": { "state": {
"type": "empty", "type": "markdown",
"state": {}, "state": {
"file": "chapters/04_Design.md",
"mode": "source",
"source": false
},
"icon": "lucide-file", "icon": "lucide-file",
"title": "New tab" "title": "04_Design"
} }
} }
] ]
@ -264,33 +268,35 @@
"obsidian-kanban:Create new board": false "obsidian-kanban:Create new board": false
} }
}, },
"active": "9f4cd104c7d85619", "active": "24988c076d2f30d6",
"lastOpenFiles": [ "lastOpenFiles": [
"README.md", "conf/sedufgozC",
"conf/sedTQLO9w", "conf/sedQ287QU",
"chapters/02_Usage.md", "conf/sedq3LRZz",
"chapters/03_Features.md", "chapters/03_Features.md",
"chapters/Appendix.md", "conf/sedtBb3Os",
"conf/sedkKV6c0", "conf/sedRcZh0D",
"conf/sedAqcSmo", "conf/sed1CDdq2",
"conf/sedk8YBK0", "conf/sedzZKUYL",
"conf/sedzF3xOr", "conf/sedGlYwid",
"conf/sedtZNObL", "conf/sedB61nJB",
"chapters/AppendixB.md", "conf/sedkPk5Sn",
"chapters/Bibliography.md", "conf/seddNGzeb",
"chapters/AppendixA.md",
"conf/sed6ZdLUq",
"chapters/04_Design.md",
"chapters/01_Getting_Started.md", "chapters/01_Getting_Started.md",
"conf/sedBapyXA", "chapters/02_Usage.md",
"conf/sedYZ2rBJ", "chapters/Bibliography.md",
"conf/sedbEPwZC", "chapters/Index.md",
"chapters/00_Introduction.md", "chapters/00_Introduction.md",
"chapters/AppendixB.md",
"chapters/04_Design.md",
"package/README.md",
"README.md",
"chapters/Appendix.md",
"chapters/AppendixA.md",
"conf/frontmatter-docx.md", "conf/frontmatter-docx.md",
"templates/frontmatter-docx.md", "templates/frontmatter-docx.md",
"chapters/02_Features.md", "chapters/02_Features.md",
"chapters/Preface.md", "chapters/Preface.md",
"chapters/Index.md",
"chapters/Glossary.md", "chapters/Glossary.md",
"lib/img/unit-circle-with-tau.png", "lib/img/unit-circle-with-tau.png",
"lib/img/unit-circle-with-pi.png.png", "lib/img/unit-circle-with-pi.png.png",
@ -309,7 +315,6 @@
"build/basic-book-builder.md", "build/basic-book-builder.md",
"LICENSE.md", "LICENSE.md",
"pm/Book Action Items.md", "pm/Book Action Items.md",
"chapters/Unitfication.md", "chapters/Unitfication.md"
"chapters/03_Cylindrical_Spacetime.md"
] ]
} }

View File

@ -1,155 +1,7 @@
# Creative Commons Attribution-NoDerivatives 4.0 International MIT License
Creative Commons Corporation (“Creative Commons”) is not a law firm and does not provide legal services or legal advice. Distribution of Creative Commons public licenses does not create a lawyer-client or other relationship. Creative Commons makes its licenses and related information available on an “as-is” basis. Creative Commons gives no warranties regarding its licenses, any material licensed under their terms and conditions, or any related information. Creative Commons disclaims all liability for damages resulting from their use to the fullest extent possible. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
**Using Creative Commons Public Licenses** The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
Creative Commons public licenses provide a standard set of terms and conditions that creators and other rights holders may use to share original works of authorship and other material subject to copyright and certain other rights specified in the public license below. The following considerations are for informational purposes only, are not exhaustive, and do not form part of our licenses. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
* __Considerations for licensors:__ Our public licenses are intended for use by those authorized to give the public permission to use material in ways otherwise restricted by copyright and certain other rights. Our licenses are irrevocable. Licensors should read and understand the terms and conditions of the license they choose before applying it. Licensors should also secure all rights necessary before applying our licenses so that the public can reuse the material as expected. Licensors should clearly mark any material not subject to the license. This includes other CC-licensed material, or material used under an exception or limitation to copyright. [More considerations for licensors](http://wiki.creativecommons.org/Considerations_for_licensors_and_licensees#Considerations_for_licensors).
* __Considerations for the public:__ By using one of our public licenses, a licensor grants the public permission to use the licensed material under specified terms and conditions. If the licensors permission is not necessary for any reasonfor example, because of any applicable exception or limitation to copyrightthen that use is not regulated by the license. Our licenses grant only permissions under copyright and certain other rights that a licensor has authority to grant. Use of the licensed material may still be restricted for other reasons, including because others have copyright or other rights in the material. A licensor may make special requests, such as asking that all changes be marked or described. Although not required by our licenses, you are encouraged to respect those requests where reasonable. [More considerations for the public](http://wiki.creativecommons.org/Considerations_for_licensors_and_licensees#Considerations_for_licensees).
## Creative Commons Attribution-NoDerivatives 4.0 International Public License
By exercising the Licensed Rights (defined below), You accept and agree to be bound by the terms and conditions of this Creative Commons Attribution-NoDerivatives 4.0 International Public License ("Public License"). To the extent this Public License may be interpreted as a contract, You are granted the Licensed Rights in consideration of Your acceptance of these terms and conditions, and the Licensor grants You such rights in consideration of benefits the Licensor receives from making the Licensed Material available under these terms and conditions.
### Section 1 Definitions.
a. __Adapted Material__ means material subject to Copyright and Similar Rights that is derived from or based upon the Licensed Material and in which the Licensed Material is translated, altered, arranged, transformed, or otherwise modified in a manner requiring permission under the Copyright and Similar Rights held by the Licensor. For purposes of this Public License, where the Licensed Material is a musical work, performance, or sound recording, Adapted Material is always produced where the Licensed Material is synched in timed relation with a moving image.
b. __Copyright and Similar Rights__ means copyright and/or similar rights closely related to copyright including, without limitation, performance, broadcast, sound recording, and Sui Generis Database Rights, without regard to how the rights are labeled or categorized. For purposes of this Public License, the rights specified in Section 2(b)(1)-(2) are not Copyright and Similar Rights.
c. __Effective Technological Measures__ means those measures that, in the absence of proper authority, may not be circumvented under laws fulfilling obligations under Article 11 of the WIPO Copyright Treaty adopted on December 20, 1996, and/or similar international agreements.
d. __Exceptions and Limitations__ means fair use, fair dealing, and/or any other exception or limitation to Copyright and Similar Rights that applies to Your use of the Licensed Material.
e. __Licensed Material__ means the artistic or literary work, database, or other material to which the Licensor applied this Public License.
f. __Licensed Rights__ means the rights granted to You subject to the terms and conditions of this Public License, which are limited to all Copyright and Similar Rights that apply to Your use of the Licensed Material and that the Licensor has authority to license.
g. __Licensor__ means the individual(s) or entity(ies) granting rights under this Public License.
h. __Share__ means to provide material to the public by any means or process that requires permission under the Licensed Rights, such as reproduction, public display, public performance, distribution, dissemination, communication, or importation, and to make material available to the public including in ways that members of the public may access the material from a place and at a time individually chosen by them.
i. __Sui Generis Database Rights__ means rights other than copyright resulting from Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, as amended and/or succeeded, as well as other essentially equivalent rights anywhere in the world.
j. __You__ means the individual or entity exercising the Licensed Rights under this Public License. __Your__ has a corresponding meaning.
### Section 2 Scope.
a. ___License grant.___
1. Subject to the terms and conditions of this Public License, the Licensor hereby grants You a worldwide, royalty-free, non-sublicensable, non-exclusive, irrevocable license to exercise the Licensed Rights in the Licensed Material to:
A. reproduce and Share the Licensed Material, in whole or in part; and
B. produce and reproduce, but not Share, Adapted Material.
2. __Exceptions and Limitations.__ For the avoidance of doubt, where Exceptions and Limitations apply to Your use, this Public License does not apply, and You do not need to comply with its terms and conditions.
3. __Term.__ The term of this Public License is specified in Section 6(a).
4. __Media and formats; technical modifications allowed.__ The Licensor authorizes You to exercise the Licensed Rights in all media and formats whether now known or hereafter created, and to make technical modifications necessary to do so. The Licensor waives and/or agrees not to assert any right or authority to forbid You from making technical modifications necessary to exercise the Licensed Rights, including technical modifications necessary to circumvent Effective Technological Measures. For purposes of this Public License, simply making modifications authorized by this Section 2(a)(4) never produces Adapted Material.
5. __Downstream recipients.__
A. __Offer from the Licensor Licensed Material.__ Every recipient of the Licensed Material automatically receives an offer from the Licensor to exercise the Licensed Rights under the terms and conditions of this Public License.
B. __No downstream restrictions.__ You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, the Licensed Material if doing so restricts exercise of the Licensed Rights by any recipient of the Licensed Material.
6. __No endorsement.__ Nothing in this Public License constitutes or may be construed as permission to assert or imply that You are, or that Your use of the Licensed Material is, connected with, or sponsored, endorsed, or granted official status by, the Licensor or others designated to receive attribution as provided in Section 3(a)(1)(A)(i).
b. ___Other rights.___
1. Moral rights, such as the right of integrity, are not licensed under this Public License, nor are publicity, privacy, and/or other similar personality rights; however, to the extent possible, the Licensor waives and/or agrees not to assert any such rights held by the Licensor to the limited extent necessary to allow You to exercise the Licensed Rights, but not otherwise.
2. Patent and trademark rights are not licensed under this Public License.
3. To the extent possible, the Licensor waives any right to collect royalties from You for the exercise of the Licensed Rights, whether directly or through a collecting society under any voluntary or waivable statutory or compulsory licensing scheme. In all other cases the Licensor expressly reserves any right to collect such royalties.
### Section 3 License Conditions.
Your exercise of the Licensed Rights is expressly made subject to the following conditions.
a. ___Attribution.___
1. If You Share the Licensed Material, You must:
A. retain the following if it is supplied by the Licensor with the Licensed Material:
i. identification of the creator(s) of the Licensed Material and any others designated to receive attribution, in any reasonable manner requested by the Licensor (including by pseudonym if designated);
ii. a copyright notice;
iii. a notice that refers to this Public License;
iv. a notice that refers to the disclaimer of warranties;
v. a URI or hyperlink to the Licensed Material to the extent reasonably practicable;
B. indicate if You modified the Licensed Material and retain an indication of any previous modifications; and
C. indicate the Licensed Material is licensed under this Public License, and include the text of, or the URI or hyperlink to, this Public License.
For the avoidance of doubt, You do not have permission under this Public License to Share Adapted Material.
2. You may satisfy the conditions in Section 3(a)(1) in any reasonable manner based on the medium, means, and context in which You Share the Licensed Material. For example, it may be reasonable to satisfy the conditions by providing a URI or hyperlink to a resource that includes the required information.
3. If requested by the Licensor, You must remove any of the information required by Section 3(a)(1)(A) to the extent reasonably practicable.
### Section 4 Sui Generis Database Rights.
Where the Licensed Rights include Sui Generis Database Rights that apply to Your use of the Licensed Material:
a. for the avoidance of doubt, Section 2(a)(1) grants You the right to extract, reuse, reproduce, and Share all or a substantial portion of the contents of the database, provided You do not Share Adapted Material;
b. if You include all or a substantial portion of the database contents in a database in which You have Sui Generis Database Rights, then the database in which You have Sui Generis Database Rights (but not its individual contents) is Adapted Material; and
c. You must comply with the conditions in Section 3(a) if You Share all or a substantial portion of the contents of the database.
For the avoidance of doubt, this Section 4 supplements and does not replace Your obligations under this Public License where the Licensed Rights include other Copyright and Similar Rights.
### Section 5 Disclaimer of Warranties and Limitation of Liability.
a. __Unless otherwise separately undertaken by the Licensor, to the extent possible, the Licensor offers the Licensed Material as-is and as-available, and makes no representations or warranties of any kind concerning the Licensed Material, whether express, implied, statutory, or other. This includes, without limitation, warranties of title, merchantability, fitness for a particular purpose, non-infringement, absence of latent or other defects, accuracy, or the presence or absence of errors, whether or not known or discoverable. Where disclaimers of warranties are not allowed in full or in part, this disclaimer may not apply to You.__
b. __To the extent possible, in no event will the Licensor be liable to You on any legal theory (including, without limitation, negligence) or otherwise for any direct, special, indirect, incidental, consequential, punitive, exemplary, or other losses, costs, expenses, or damages arising out of this Public License or use of the Licensed Material, even if the Licensor has been advised of the possibility of such losses, costs, expenses, or damages. Where a limitation of liability is not allowed in full or in part, this limitation may not apply to You.__
c. The disclaimer of warranties and limitation of liability provided above shall be interpreted in a manner that, to the extent possible, most closely approximates an absolute disclaimer and waiver of all liability.
### Section 6 Term and Termination.
a. This Public License applies for the term of the Copyright and Similar Rights licensed here. However, if You fail to comply with this Public License, then Your rights under this Public License terminate automatically.
b. Where Your right to use the Licensed Material has terminated under Section 6(a), it reinstates:
1. automatically as of the date the violation is cured, provided it is cured within 30 days of Your discovery of the violation; or
2. upon express reinstatement by the Licensor.
For the avoidance of doubt, this Section 6(b) does not affect any right the Licensor may have to seek remedies for Your violations of this Public License.
c. For the avoidance of doubt, the Licensor may also offer the Licensed Material under separate terms or conditions or stop distributing the Licensed Material at any time; however, doing so will not terminate this Public License.
d. Sections 1, 5, 6, 7, and 8 survive termination of this Public License.
### Section 7 Other Terms and Conditions.
a. The Licensor shall not be bound by any additional or different terms or conditions communicated by You unless expressly agreed.
b. Any arrangements, understandings, or agreements regarding the Licensed Material not stated herein are separate from and independent of the terms and conditions of this Public License.
### Section 8 Interpretation.
a. For the avoidance of doubt, this Public License does not, and shall not be interpreted to, reduce, limit, restrict, or impose conditions on any use of the Licensed Material that could lawfully be made without permission under this Public License.
b. To the extent possible, if any provision of this Public License is deemed unenforceable, it shall be automatically reformed to the minimum extent necessary to make it enforceable. If the provision cannot be reformed, it shall be severed from this Public License without affecting the enforceability of the remaining terms and conditions.
c. No term or condition of this Public License will be waived and no failure to comply consented to unless expressly agreed to by the Licensor.
d. Nothing in this Public License constitutes or may be interpreted as a limitation upon, or waiver of, any privileges and immunities that apply to the Licensor or You, including from the legal processes of any jurisdiction or authority.
> Creative Commons is not a party to its public licenses. Notwithstanding, Creative Commons may elect to apply one of its public licenses to material it publishes and in those instances will be considered the “Licensor.” Except for the limited purpose of indicating that material is shared under a Creative Commons public license or as otherwise permitted by the Creative Commons policies published at [creativecommons.org/policies](http://creativecommons.org/policies), Creative Commons does not authorize the use of the trademark “Creative Commons” or any other trademark or logo of Creative Commons without its prior written consent including, without limitation, in connection with any unauthorized modifications to any of its public licenses or any other arrangements, understandings, or agreements concerning use of licensed material. For the avoidance of doubt, this paragraph does not form part of the public licenses.
>
> Creative Commons may be contacted at creativecommons.org

View File

@ -4,9 +4,9 @@
| --- | --- | | --- | --- |
| **Author** | John Haverlack | | **Author** | John Haverlack |
| **Copyright** | 2026 John Haverlack | | **Copyright** | 2026 John Haverlack |
| **License** | CC BY-ND 4.0 | | **License** | MIT |
| **Version** | 1.1.0 | | **Version** | v1.2.4 |
| **Date** | 2026-02-05 | | **Date** | 2026-02-12 |
This is a basic book (article) builder template based on a Pandoc build process in conjunction with a number of other tools to generate PDF, DOCX, ODT, HTML, LaTeX, Markdown, and Epub book formats all from a single set of Markdown source content in an Obsidian vault. This is a basic book (article) builder template based on a Pandoc build process in conjunction with a number of other tools to generate PDF, DOCX, ODT, HTML, LaTeX, Markdown, and Epub book formats all from a single set of Markdown source content in an Obsidian vault.
@ -51,12 +51,22 @@ make odt
## Getting Started ## Getting Started
Download PDF or HTML version of the b3 book. Which self documents how to use this template: Download PDF or HTML version of the b3 book. Which self documents how to use this template:
- [basic-book-builder.pdf ](build/basic-book-builder.pdf) - [basic-book-builder.pdf ](build/pdf/basic-book-builder.pdf)
- [basic-book-builder.html](build/basic-book-builder.html) - [basic-book-builder.html](build/html/basic-book-builder.html)
### Clone Repo
```
git clone https://github.com/jehaverlack/basic-book-builder.git
```
```
cd basic-book-builder
```
### Setup Build Environment ### Setup Build Environment
> NOTE: For Debian based systems. > NOTE: b3 has only been tested on Debian based systems.
``` ```
scripts/setup-linux-deb.sh scripts/setup-linux-deb.sh
@ -89,3 +99,17 @@ cd <PATH_TO_PROJECT>
4. Build your book 4. Build your book
# Roadmap
## Documentation
- [ ] Zotero Integration
## Bugs
- [ ] TBD
## Features
- [ ] Windows Build Environment Support
- [ ] Build Workflow Scripts
- [ ] DocX Formatting
- [ ] ODT Formatting

Binary file not shown.

View File

@ -51,7 +51,7 @@
<!-- Title Page --> <!-- Title Page -->
<h1 class="titlepage" style="margin-top:3em; font-size:2.4em; text-align:center;">Basic Book Builder</h1> <h1 class="titlepage" style="margin-top:3em; font-size:2.4em; text-align:center;">Basic Book Builder</h1>
<h2 style="text-align:center; font-weight:normal;">A Pandoc build process for books, docs and articles</h2> <h2 style="text-align:center; font-weight:normal;">A Pandoc build process for books, docs and articles.</h2>
<div style="text-align:center; margin:2em 0;"> <div style="text-align:center; margin:2em 0;">
<img src="lib/img/UAF-ACEP.png" alt="Cover illustration" style="max-width:350px;"> <img src="lib/img/UAF-ACEP.png" alt="Cover illustration" style="max-width:350px;">
@ -64,12 +64,12 @@
<div style="text-align:left; margin-top:5em;"> <div style="text-align:left; margin-top:5em;">
<h2>Basic Book Builder</h2> <h2>Basic Book Builder</h2>
<i>A Pandoc build process for books, docs and articles</i> <i>A Pandoc build process for books, docs and articles.</i>
<table style="margin-top:2em; width:50%; border-collapse:collapse;"> <table style="margin-top:2em; width:50%; border-collapse:collapse;">
<tbody> <tbody>
<tr><td style="font-weight:bold;">Author</td><td>John Haverlack</td></tr> <tr><td style="font-weight:bold;">Author</td><td>John Haverlack</td></tr>
<tr><td style="font-weight:bold;">Version</td><td>1.1.0</td></tr> <tr><td style="font-weight:bold;">Version</td><td>1.2.3</td></tr>
<tr><td style="font-weight:bold;">Date</td><td>2026-02-05</td></tr> <tr><td style="font-weight:bold;">Date</td><td>2026-02-05</td></tr>
<tr><td style="font-weight:bold;">Affiliation</td><td>Alaska Center for Energy and Power</td></tr> <tr><td style="font-weight:bold;">Affiliation</td><td>Alaska Center for Energy and Power</td></tr>
<tr><td style="font-weight:bold;">Institution</td><td>University of Alaska Fairbanks</td></tr> <tr><td style="font-weight:bold;">Institution</td><td>University of Alaska Fairbanks</td></tr>
@ -130,31 +130,25 @@ window.MathJax = {
<nav id="TOC" role="doc-toc"> <nav id="TOC" role="doc-toc">
<h2 id="toc-title">Contents</h2> <h2 id="toc-title">Contents</h2>
<ul> <ul>
<li><a href="#introduction" id="toc-introduction">Introduction</a></li> <li><a href="#introduction" id="toc-introduction">Introduction</a>
<ul>
<li><a href="#workflow" id="toc-workflow">Workflow</a></li>
</ul></li>
<li><a href="#getting-started" id="toc-getting-started">Getting <li><a href="#getting-started" id="toc-getting-started">Getting
Started</a> Started</a>
<ul> <ul>
<li><a href="#cloning-the-basic-book-builder" <li><a href="#clone-the-basic-book-builder"
id="toc-cloning-the-basic-book-builder">Cloning the Basic Book id="toc-clone-the-basic-book-builder">Clone the Basic Book
Builder</a></li> Builder</a></li>
<li><a href="#setting-up-build-environment" <li><a href="#setting-up-build-environment"
id="toc-setting-up-build-environment">Setting Up Build id="toc-setting-up-build-environment">Setting Up Build Environment</a>
Environment</a></li> <ul>
<li><a href="#non-deb-systems" id="toc-non-deb-systems">Non deb
systems</a></li>
</ul></li>
<li><a href="#testing" id="toc-testing">Testing</a></li> <li><a href="#testing" id="toc-testing">Testing</a></li>
<li><a href="#creating-a-new-project" <li><a href="#creating-a-new-project"
id="toc-creating-a-new-project">Creating a New Project</a> id="toc-creating-a-new-project">Creating a New Project</a></li>
<ul>
<li><a href="#zotero-configuration-optional"
id="toc-zotero-configuration-optional">Zotero Configuration
(Optional)</a></li>
</ul></li>
</ul></li>
<li><a href="#usage" id="toc-usage">Usage</a>
<ul>
<li><a href="#creating-a-project" id="toc-creating-a-project">Creating a
Project</a></li>
<li><a href="#editing-content" id="toc-editing-content">Editing
Content</a></li>
<li><a href="#building" id="toc-building">Building</a> <li><a href="#building" id="toc-building">Building</a>
<ul> <ul>
<li><a href="#pdf" id="toc-pdf">PDF</a></li> <li><a href="#pdf" id="toc-pdf">PDF</a></li>
@ -175,6 +169,8 @@ Page</a></li>
Illustration</a></li> Illustration</a></li>
<li><a href="#dedication" id="toc-dedication">Dedication</a></li> <li><a href="#dedication" id="toc-dedication">Dedication</a></li>
</ul></li> </ul></li>
<li><a href="#table-of-contents" id="toc-table-of-contents">Table of
Contents</a></li>
<li><a href="#chapters" id="toc-chapters">Chapters</a></li> <li><a href="#chapters" id="toc-chapters">Chapters</a></li>
<li><a href="#appendixes" id="toc-appendixes">Appendixes</a></li> <li><a href="#appendixes" id="toc-appendixes">Appendixes</a></li>
<li><a href="#glossary" id="toc-glossary">Glossary</a></li> <li><a href="#glossary" id="toc-glossary">Glossary</a></li>
@ -190,7 +186,8 @@ Integration</a></li>
<li><a href="#obsidian-citations" id="toc-obsidian-citations">Obsidian <li><a href="#obsidian-citations" id="toc-obsidian-citations">Obsidian
Citations</a></li> Citations</a></li>
</ul></li> </ul></li>
<li><a href="#mathjax-equations" id="toc-mathjax-equations">Mathjax <li><a href="#images" id="toc-images">Images</a></li>
<li><a href="#latex-equations" id="toc-latex-equations"><em>LaTeX</em>
Equations</a> Equations</a>
<ul> <ul>
<li><a href="#left-justified-inline" id="toc-left-justified-inline">Left <li><a href="#left-justified-inline" id="toc-left-justified-inline">Left
@ -202,19 +199,26 @@ Markdown</a>
<ul> <ul>
<li><a href="#call-outs" id="toc-call-outs">Call-outs</a></li> <li><a href="#call-outs" id="toc-call-outs">Call-outs</a></li>
</ul></li> </ul></li>
</ul></li> <li><a href="#advanced" id="toc-advanced">Advanced</a>
<li><a href="#appendix-a-build-environment-notes"
id="toc-appendix-a-build-environment-notes">Appendix A: Build
Environment Notes</a>
<ul> <ul>
<li><a href="#installing-pre-requisites" <li><a href="#changing-fonts" id="toc-changing-fonts">Changing
id="toc-installing-pre-requisites">Installing Pre-Requisites</a> Fonts</a></li>
<ul> <li><a href="#adding-filters" id="toc-adding-filters">Adding
<li><a href="#required" id="toc-required">Required</a></li> Filters</a></li>
<li><a href="#optional" id="toc-optional">Optional</a></li>
</ul></li> </ul></li>
<li><a href="#editing-the-configuration" </ul></li>
id="toc-editing-the-configuration">Editing the Configuration</a></li> <li><a href="#design" id="toc-design">Design</a>
<ul>
<li><a href="#directory-structure"
id="toc-directory-structure">Directory Structure</a></li>
<li><a href="#configuration-files"
id="toc-configuration-files">Configuration Files</a>
<ul>
<li><a href="#pandoc-main-config" id="toc-pandoc-main-config">Pandoc
Main Config</a></li>
</ul></li>
<li><a href="#build-workflow" id="toc-build-workflow">Build
Workflow</a></li>
</ul></li> </ul></li>
<li><a href="#glossary-1" id="toc-glossary-1">Glossary</a></li> <li><a href="#glossary-1" id="toc-glossary-1">Glossary</a></li>
<li><a href="#bibliography-1" <li><a href="#bibliography-1"
@ -222,13 +226,31 @@ id="toc-bibliography-1">Bibliography</a></li>
</ul> </ul>
</nav> </nav>
<h1 id="introduction">Introduction</h1> <h1 id="introduction">Introduction</h1>
<p>This is a basic book (or article / document) builder template based <p>This is a <strong>basic book builder</strong> template is based on a
on a Pandoc<span class="citation" data-cites="PandocIndex">(<a Pandoc<span class="citation" data-cites="PandocIndex">(<a
href="#ref-PandocIndex" role="doc-biblioref"><em>Pandoc - Index</em>, href="#ref-PandocIndex" role="doc-biblioref"><em>Pandoc - Index</em>,
n.d.</a>)</span> build process in conjunction with a number of other n.d.</a>)</span> + Makefile build process in conjunction Obsidian to
tools to generate PDF, HTML, LaTex, Markdown, ODT, DOCX, and Epub book edit content and Zotero to manage citation, to generate multiple format
output formats from a single set Markdown source content , which can of the document including:</p>
optionally be edited as an Obsidian vault.</p> <ul>
<li>PDF</li>
<li>HTML</li>
<li><em>LaTeX</em></li>
<li>Markdown</li>
<li>ODT</li>
<li>DOCX</li>
<li>Epub</li>
</ul>
<h3 id="workflow">Workflow</h3>
<ol type="1">
<li>Create a new project</li>
<li>Initialize <code>metadata.yaml</code> with title, copyright, author,
etc.</li>
<li>Customize <code>input-files:</code> in <code>pandoc.yaml</code></li>
<li>Edit <code>chapters</code> Markdown “conent” files using
Obidian</li>
<li>Build your document</li>
</ol>
<p>This <strong>basic book builder</strong><span class="citation" <p>This <strong>basic book builder</strong><span class="citation"
data-cites="JehaverlackBasicbookbuilderPandoca">(<a data-cites="JehaverlackBasicbookbuilderPandoca">(<a
href="#ref-JehaverlackBasicbookbuilderPandoca" href="#ref-JehaverlackBasicbookbuilderPandoca"
@ -238,8 +260,7 @@ class="citation" data-cites="JohnHaverlackACEP">(<a
href="#ref-JohnHaverlackACEP" role="doc-biblioref"><em>John href="#ref-JohnHaverlackACEP" role="doc-biblioref"><em>John
<span>Haverlack</span> <span>ACEP</span></em>, n.d.</a>)</span></p> <span>Haverlack</span> <span>ACEP</span></em>, n.d.</a>)</span></p>
<h1 id="getting-started">Getting Started</h1> <h1 id="getting-started">Getting Started</h1>
<h2 id="cloning-the-basic-book-builder">Cloning the Basic Book <h2 id="clone-the-basic-book-builder">Clone the Basic Book Builder</h2>
Builder</h2>
<div class="callout-cli"> <div class="callout-cli">
<p><strong>Clone the repository</strong></p> <p><strong>Clone the repository</strong></p>
<pre><code>git clone https://github.com/jehaverlack/basic-book-builder.git</code></pre> <pre><code>git clone https://github.com/jehaverlack/basic-book-builder.git</code></pre>
@ -251,56 +272,56 @@ Builder</h2>
<h2 id="setting-up-build-environment">Setting Up Build Environment</h2> <h2 id="setting-up-build-environment">Setting Up Build Environment</h2>
<div class="callout-caution"> <div class="callout-caution">
<p><strong>~Debian Linux</strong></p> <p><strong>~Debian Linux</strong></p>
<p> This script only support Debian based Linux system (Debian, Ubunutu, <p> This script only support Debian based Linux system (e.g Debian,
Zorin, etc) This script has not been widely tested across platforms</p> Ubuntu, Zorin). And this script will install several ATP packages on
your system.</p>
</div> </div>
<div class="callout-danger">
<p><strong>Warning</strong></p>
<p> This script <strong>has not</strong> been widely tested across many
platforms</p>
</div>
<p>To initialize your systems build environment run:</p>
<div class="callout-cli"> <div class="callout-cli">
<p><strong>Setup Build Environment</strong></p> <p><strong>Setup Build Environment</strong></p>
<pre><code>./scripts/setup-linux-deb.sh</code></pre> <pre><code>./scripts/setup-linux-deb.sh</code></pre>
</div> </div>
<h3 id="non-deb-systems">Non deb systems</h3>
<p>For more information on setting up the build environment for your <p>For more information on setting up the build environment for your
system see Appendix A.</p> system see: <strong>TBD: NEEDS DOCUMENTED</strong>.</p>
<h2 id="testing">Testing</h2> <h2 id="testing">Testing</h2>
<p>If you can build all format for the <strong>Basic Book Build</strong> <p>Once you have set up your build environment, you test by building the
then you have a working build environment.</p> <strong>basic book builder</strong>.</p>
<div class="callout-cli"> <div class="callout-cli">
<p><strong>Testing Build Environment</strong></p> <p><strong>Testing Build Environment</strong></p>
<pre><code>make all</code></pre> <pre><code>make all</code></pre>
</div> </div>
<h2 id="creating-a-new-project">Creating a New Project</h2> <h2 id="creating-a-new-project">Creating a New Project</h2>
<h3 id="zotero-configuration-optional">Zotero Configuration <div class="callout-proposed">
(Optional)</h3> <p><strong>Tip</strong></p>
<h1 id="usage">Usage</h1> <p> You do not want to edit your new project document in the
<h2 id="creating-a-project">Creating a Project</h2> <code>basic-book-builder</code> directory. You will want to create a
<p>To create a new Project based on the Basic Book Builder template:</p> <strong>new project</strong> for your document based on this
<ol type="1"> template.</p>
<li>Run the new-project.sh script.</li> </div>
</ol> <div class="callout-cli">
<pre><code>./scripts/new-project.sh &lt;PATH_TO_PROJECT&gt;</code></pre> <p><strong>Create a new project</strong></p>
<ul> <pre><code>./scripts/new-project.sh &lt;NEW_PROJECT_DIR&gt;</code></pre>
<li><PATH_TO_PROJECT> should be outside of the </div>
<strong>basic-book-builder</strong> directory</li> <pre><code>cd &lt;NEW_PROJECT_DIR&gt;</code></pre>
</ul> <p>Update your project configuration:</p>
<pre><code>cd &lt;PATH_TO_PROJECT&gt;</code></pre> <ol type="1">
<p>Update:</p> <li>Edit: <code>metadata.yaml</code>, for title, author, etc</li>
<ol type="1"> <li>Edit: <code>templates/pandoc.yaml</code></li>
<li><code>metadata.yaml</code></li> <li>Open: <code>&lt;NEW_PROJECT_DIR&gt;</code> with Obsidian, and edit
<li><code>templates/pandoc.yaml</code></li> <code>chapters</code> documents.</li>
</ol> <li>Build: <code>make pdf</code></li>
<div class="callout-info"> </ol>
<p><strong>Suggestion</strong></p> <div class="callout-warning">
<p> Create a git repository to version control your new <p><strong>Warning</strong></p>
<PATH_TO_PROJECT> content.</p> <p> <code>&lt;NEW_PROJECT_DIR&gt;</code> should be outside of the
<strong>basic-book-builder</strong> directory</p>
</div> </div>
<h2 id="editing-content">Editing Content</h2>
<p>Edit your source content Markdown under the <code>chapters</code>
directory.</p>
<p><strong>Optional</strong></p>
<ul>
<li>Open your <code>&lt;PATH_TO_PROJECT&gt;</code> directory as an
Obsidian vault.</li>
<li>Edit your Markdown with Obsidian</li>
</ul>
<h2 id="building">Building</h2> <h2 id="building">Building</h2>
<h3 id="pdf">PDF</h3> <h3 id="pdf">PDF</h3>
<pre><code>make pdf</code></pre> <pre><code>make pdf</code></pre>
@ -326,31 +347,30 @@ work.</p>
<p>To build all supported formats</p> <p>To build all supported formats</p>
<pre><code>make all</code></pre> <pre><code>make all</code></pre>
<h1 id="features">Features</h1> <h1 id="features">Features</h1>
<p>The basic book builder template integrates feature from many systems
including Pandoc, MathJax, Obsidian, and Zotero. The following list
covers these features from a functional point of view.</p>
<h2 id="metadata">Metadata</h2> <h2 id="metadata">Metadata</h2>
<p>Metadata for the project is managed in <code>metadata.yaml</code>. <p>Metadata for the project is managed in <code>metadata.yaml</code>.
Edit this file to make global changes to variables for your document. Edit this file to make <strong>global changes</strong> to variables for
Changes here will propagate to all format builds.</p> your document. Definitions in <code>metadata.yaml</code> will propagate
to all format builds.</p>
<h2 id="front-matter">Front-matter</h2> <h2 id="front-matter">Front-matter</h2>
<p>Front matter content is manged in:</p> <p>Front-Matter documents control the Title Page, Metadata and other
pages before the Title of Contents. Front matter content is manged in
these files:</p>
<ul> <ul>
<li><code>templates/frontmatter.tex</code></li> <li><code>templates/frontmatter.tex</code></li>
<li><code>templates/frontmatter.html</code></li> <li><code>templates/frontmatter.html</code></li>
<li><code>templates/frontmatter-md.html</code></li> <li><code>templates/frontmatter-md.html</code></li>
</ul> </ul>
<div class="callout-caution"> <p>Unfortunately when you edit one, you need to edit the respective
<p><strong>Tip</strong></p>
<p> Unfortunately when you edit one, you need to edit the respective
changes to the other front-matter formats. ### Title Page</p> changes to the other front-matter formats. ### Title Page</p>
</div>
<p>Edit the <strong>Front-matter</strong> files to modify the formatting <p>Edit the <strong>Front-matter</strong> files to modify the formatting
of the Title Page.</p> of the Title Page. Youll need to modify the HTML / LaTex code.</p>
<div class="callout-caution">
<p><strong>Tip</strong></p>
<p> Youll need to modify the HTML / LaTex.</p>
</div>
<h3 id="meta-data-page">Meta Data Page</h3> <h3 id="meta-data-page">Meta Data Page</h3>
<p>Edit the <strong>Front-matter</strong> files to modify the 2nd page <p>Edit the <strong>Front-matter</strong> files to modify the 2nd page
Metadata format.</p> Metadata format and fields to display.</p>
<h3 id="cover-illustration">Cover Illustration</h3> <h3 id="cover-illustration">Cover Illustration</h3>
<p>Edit the <strong>Front-matter</strong> files to optionally un-comment <p>Edit the <strong>Front-matter</strong> files to optionally un-comment
the Cover Art Acknowledgement.</p> the Cover Art Acknowledgement.</p>
@ -361,13 +381,20 @@ the Cover Art Acknowledgement.</p>
<p>Edit the <strong>Front-matter</strong> files to modify un-comment the <p>Edit the <strong>Front-matter</strong> files to modify un-comment the
Book Dedication.</p> Book Dedication.</p>
<ul> <ul>
<li>This is disabled by default ## Table of Contents</li> <li>This is disabled by default</li>
</ul> </ul>
<h2 id="table-of-contents">Table of Contents</h2>
<p>The table of contents is auto generated. But can be disabled in
<code>template\pandoc.yaml</code> by setting: -
<code>toc: false</code></p>
<h2 id="chapters">Chapters</h2> <h2 id="chapters">Chapters</h2>
<p>Chapter Markdown source files are located in the <p>Chapter Markdown source files are located in the
<code>chapters</code> directory. Edit the <code>chapters</code> directory. To edit which chapter files are
<code>template\pandoc.yaml</code> file to control which chapter markdown included the document:</p>
files are in what order.</p> <ul>
<li>Edit the <code>input-file:</code> section of the
<code>template\pandoc.yaml</code></li>
</ul>
<h2 id="appendixes">Appendixes</h2> <h2 id="appendixes">Appendixes</h2>
<p>TBD</p> <p>TBD</p>
<h2 id="glossary">Glossary</h2> <h2 id="glossary">Glossary</h2>
@ -382,14 +409,38 @@ files are in what order.</p>
<p>TBD</p> <p>TBD</p>
<h3 id="obsidian-citations">Obsidian Citations</h3> <h3 id="obsidian-citations">Obsidian Citations</h3>
<p>TBD</p> <p>TBD</p>
<h2 id="mathjax-equations">Mathjax Equations</h2> <h2 id="images">Images</h2>
<p>TBD</p> <p>You can use basic Markdown Images</p>
<pre><code>![ACEP](lib/img/ACEPLogo.png)</code></pre>
<figure>
<img src="lib/img/ACEPLogo.png" alt="ACEP" />
<figcaption aria-hidden="true">ACEP</figcaption>
</figure>
<h2 id="latex-equations"><em>LaTeX</em> Equations</h2>
<p>You can embed LaTeX equations directly in your Markdown pages.</p>
<h3 id="left-justified-inline">Left Justified / Inline</h3> <h3 id="left-justified-inline">Left Justified / Inline</h3>
<p>TBD</p> <p>To left justify <em>LaTex</em> surround the code inside single
<code>$</code>:</p>
<div class="callout-code">
<p><strong>Left Justified Equation</strong></p>
<pre><code>$x = \frac{1}{2}$</code></pre>
</div>
<p><span class="math inline">$x = \frac{1}{2}$</span></p>
<div class="callout-code">
<p><strong>Inline</strong></p>
<pre><code>Or inline, $x = \frac{1}{2}$, in a sentence.</code></pre>
</div>
<p>Or inline, <span class="math inline">$x = \frac{1}{2}$</span>, in a
sentence.</p>
<h3 id="centered">Centered</h3> <h3 id="centered">Centered</h3>
<p>TBD</p> <p>To center justify <em>LaTex</em> surround the code inside double
<code>$$</code>:</p>
<div class="callout-code">
<p><strong>Centered Equation</strong></p>
<pre><code>$$x = \frac{1}{2}$$</code></pre>
</div>
<p><span class="math display">$$x = \frac{1}{2}$$</span></p>
<h2 id="custom-markdown">Custom Markdown</h2> <h2 id="custom-markdown">Custom Markdown</h2>
<p>TBD</p>
<h3 id="call-outs">Call-outs</h3> <h3 id="call-outs">Call-outs</h3>
<p>A few call-out box styles have been custom added to easily highlight <p>A few call-out box styles have been custom added to easily highlight
certain types of content.</p> certain types of content.</p>
@ -417,17 +468,6 @@ A blue box</code></pre>
<hr /> <hr />
<div class="callout-code"> <div class="callout-code">
<p><strong>Markdown Example</strong></p> <p><strong>Markdown Example</strong></p>
<pre><code>[!info] Info Box
Same as a blue box</code></pre>
</div>
<p>Will render:</p>
<div class="callout-info">
<p><strong>Info Box</strong></p>
<p> Same as a blue box</p>
</div>
<hr />
<div class="callout-code">
<p><strong>Markdown Example</strong></p>
<pre><code>[!speculative] Purple Call-out Title <pre><code>[!speculative] Purple Call-out Title
A purple box</code></pre> A purple box</code></pre>
</div> </div>
@ -493,7 +533,8 @@ fi</code></pre>
A command line example A command line example
&#39;&#39;&#39; &#39;&#39;&#39;
$ ls $ ls
build chapters conf filters lib LICENSE.md Makefile metadata.yaml &gt;README.md scripts templates build chapters conf filters lib LICENSE.md Makefile
metadata.yaml &gt;README.md scripts templates
&#39;&#39;&#39;</code></pre> &#39;&#39;&#39;</code></pre>
</div> </div>
<p>Will render:</p> <p>Will render:</p>
@ -501,118 +542,126 @@ build chapters conf filters lib LICENSE.md Makefile metadata.yaml &gt;RE
<p><strong>Command line</strong></p> <p><strong>Command line</strong></p>
<p> A command line example</p> <p> A command line example</p>
<pre><code>$ ls <pre><code>$ ls
build chapters conf filters lib LICENSE.md Makefile metadata.yaml README.md scripts templates</code></pre> build chapters conf filters lib LICENSE.md Makefile
metadata.yaml README.md scripts templates</code></pre>
</div> </div>
<p>Appendix A</p> <h2 id="advanced">Advanced</h2>
<h1 id="appendix-a-build-environment-notes">Appendix A: Build <h3 id="changing-fonts">Changing Fonts</h3>
Environment Notes</h1> <p>It is possible to change fonts by editing
<h2 id="installing-pre-requisites">Installing Pre-Requisites</h2> <code>templates/pandoc.yaml</code>, and
<code>templates\styles.css</code>, but you will have to make sure you
have the proper fonts installed on your system first.</p>
<h3 id="adding-filters">Adding Filters</h3>
<p>Custom filters can be created. This is complicated and typically
needs done in 3 places for:</p>
<ul>
<li>obsidian</li>
<li><em>LaTeX</em></li>
<li>HTML</li>
</ul>
<h1 id="design">Design</h1>
<h2 id="directory-structure">Directory Structure</h2>
<p>The <strong>basic-book-builder</strong> directory tree.</p>
<pre><code>basic-book-builder
├── build
│   ├── docx
│   ├── html
│   │   ├── conf
│   │   └── lib
│   │   ├── diag
│   │   ├── img
│   │   └── mathjax
│   ├── latex
│   ├── odt
│   └── pdf
├── chapters
├── conf
├── filters
├── lib
│   ├── citations
│   ├── diag
│   ├── img
│   └── mathjax
├── scripts
│   └── tmp
└── templates</code></pre>
<h2 id="configuration-files">Configuration Files</h2>
<p>The <strong>basic-book-builder</strong> configuration files, scripts,
and build files.</p>
<pre><code>../basic-book-builder
├── chapters
├── conf
├── filters
│   ├── callouts-html.lua
│   └── callouts.lua
├── lib
│   ├── diag
│   ├── img
│   └── zotero.bib
├── Makefile
├── metadata.yaml
├── scripts
│   ├── new-project.sh
│   ├── replace-metadata.sh
│   ├── setup-linux-deb.sh
│   └── tmp
└── templates
├── docx.yaml
├── epub_template.html
├── epub.yaml
├── frontmatter-docx.md
├── frontmatter.html
├── frontmatter-md.html
├── frontmatter.tex
├── header.tex
├── html.yaml
├── latex.yaml
├── markdown.yaml
├── odt.yaml
├── pandoc.yaml
├── pdf.yaml
├── style.css
└── style_epub.css
</code></pre>
<div class="callout-caution"> <div class="callout-caution">
<p><strong>Not Cross-platform Tested</strong></p> <p><strong>About conf</strong></p>
<p> For Debian / ZorinOS and likely Ubuntu based systems.</p> <p> NEVER: edit file directly in <code>conf</code>. They will be
overwritten by the build process. ### Metadata</p>
</div> </div>
<h3 id="required">Required</h3> <p>Update the <code>metadata.yaml</code> file to globally configure your
<h4 id="pandoc">Pandoc</h4> document title and other metadata. Edit this file to control your
<ul> document title, author, etc.</p>
<li>https://pandoc.org/</li> <h3 id="pandoc-main-config">Pandoc Main Config</h3>
<li><a <p>Update the <code>input-files:</code> section of
href="https://github.com/jgm/pandoc/releases/tag/3.8.2.1">Download</a></li> <code>templates/pandoc.yaml</code> to control what chapter source files
</ul> are in which order in your document.</p>
<blockquote> <pre><code># pandoc.yaml
<p><code>sudo apt install https://github.com/jgm/pandoc/releases/download/3.8.2.1/pandoc-3.8.2.1-1-amd64.deb</code></p> input-files:
</blockquote> # - chapters/Preface.md
<h4 id="code-editor">Code Editor</h4> - chapters/00_Introduction.md
<div class="callout-established"> - chapters/01_Getting_Started.md
<p><strong>Code Editor</strong></p> - chapters/02_Usage.md
<p> <a href="https://vscodium.com/">VSCodium</a> is recommend for - chapters/03_Features.md
privacy (telemetry/tracking) reasons - https://vscodium.com/</p> - chapters/Appendix.md
</div> - chapters/AppendixA.md
<p>But any text editor will work. #### make</p> # - chapters/AppendixB.md
<pre><code>sudo apt install make</code></pre> - chapters/Glossary.md
<h4 id="jq-and-yq">jq and yq</h4> - chapters/Index.md
<pre><code>sudo apt install jq yq</code></pre> - chapters/Bibliography.md</code></pre>
<h4 id="texlive">texlive</h4> <h2 id="build-workflow">Build Workflow</h2>
<blockquote> <p>For a PDF Build:</p>
<p><code>sudo apt install texlive texlive-xetex texlive-latex-extra texlive-fonts-recommended texlive-fonts-extra</code></p> <pre><code>make pdf</code></pre>
</blockquote> <p>will build dependencies on these file:</p>
<h4 id="mathjax">MathJax</h4> <ol type="1">
<ul> <li>Makefile</li>
<li>https://www.mathjax.org/</li> <li>conf/pandoc.yaml</li>
</ul> <li>conf/pdf.yaml</li>
<pre><code>wget https://registry.npmjs.org/mathjax/-/mathjax-3.2.2.tgz <li>lib/zotero.bib</li>
tar xzf mathjax-3.2.2.tgz <li>chapters/*.md</li>
mv package/es5/* lib/mathjax </ol>
rm -rf package mathjax-3.2.2.tgz</code></pre> <p>NOTE: the <code>Makefile</code> will copy
<div class="callout-caution"> <code>templates/*.yaml</code> to <code>conf/*.yaml</code>.
<p><strong>TODO</strong></p> <strong>Never</strong> edit <code>conf/*</code>directly.</p>
<p> This need to be rolled into a setup script.</p>
</div>
<h3 id="optional">Optional</h3>
<p>The following are not strictly requires to use this book builder
template.</p>
<h4 id="obsidian">Obsidian</h4>
<div class="callout-established">
<p><strong>Highly Recommended</strong></p>
<p> Editing book chapter content in Obsidian is a very productive means
for editing Markdown source content.</p>
</div>
<ul>
<li>https://obsidian.md/</li>
<li><a
href="https://github.com/obsidianmd/obsidian-releases/releases/download/v1.9.14/obsidian_1.9.14_amd64.deb">Deb
Package</a></li>
</ul>
<pre><code>sudo apt install https://github.com/obsidianmd/obsidian-releases/releases/download/v1.9.14/obsidian_1.9.14_amd64.deb</code></pre>
<h4 id="zotero">Zotero</h4>
<div class="callout-established">
<p><strong>Highly Recommended</strong></p>
<p> If you need to managed citations and references, Zotero integration
is highly recommended.</p>
</div>
<ul>
<li>https://www.zotero.org/</li>
</ul>
<pre><code>sudo cp ./scripts/deps/zotero.list /etc/apt/sources.list.d/</code></pre>
<pre><code>sudo apt update</code></pre>
<pre><code>sudo apt install zotero</code></pre>
<h5 id="better-bibtex-for-zotero">Better BibTex for Zotero</h5>
<p>Install the Better BibTex Plugin for Zotero - Zotero &gt; Tool &gt;
Plugins</p>
<h5 id="export-citations.bib">Export citations.bib</h5>
<ul>
<li>Zotero &gt; File &gt; Export Library &gt; Format: Better BibTeX</li>
<li><label><input type="checkbox" />Keep Updated</label></li>
<li><label><input type="checkbox" />Save to:
~/Documents/Lib/zotero.bib</label></li>
<li><label><input type="checkbox" />Symlink your
~/Documents/Lib/Citations.bib to
basic-book-builder/lib/zotero.bib</label></li>
</ul>
<h5 id="zotero-connector-browser-plugin">Zotero Connector Browser
Plugin</h5>
<ul>
<li>https://chromewebstore.google.com/detail/zotero-connector/ekhagklcjbdpajgpjgmbionohlpdbjgc</li>
</ul>
<p>Provides you the ability to auto add Web resources to your Zotero
citation database.</p>
<h4 id="lmodern">lmodern</h4>
<pre><code>sudo apt install lmodern</code></pre>
<h4 id="epubcheck">epubcheck</h4>
<pre><code>sudo apt install epubcheck</code></pre>
<h4 id="foliate">foliate</h4>
<p>An EPub Reader</p>
<ul>
<li>https://johnfactotum.github.io/foliate/</li>
</ul>
<pre><code>sudo apt install https://github.com/johnfactotum/foliate/releases/download/2.6.4/com.github.johnfactotum.foliate_2.6.4_all.deb</code></pre>
<h4 id="calibre">calibre</h4>
<p>An EPub Reader</p>
<ul>
<li>https://calibre-ebook.com</li>
</ul>
<pre><code>sudo apt install calibre</code></pre>
<h2 id="editing-the-configuration">Editing the Configuration</h2>
<h1 class="unnumbered" id="glossary-1">Glossary</h1> <h1 class="unnumbered" id="glossary-1">Glossary</h1>
<table> <table>
<colgroup> <colgroup>

View File

@ -22,133 +22,107 @@
\@writefile{lof}{\addvspace {10\p@ }} \@writefile{lof}{\addvspace {10\p@ }}
\@writefile{lot}{\addvspace {10\p@ }} \@writefile{lot}{\addvspace {10\p@ }}
\newlabel{introduction}{{1}{1}{Introduction}{chapter.1}{}} \newlabel{introduction}{{1}{1}{Introduction}{chapter.1}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {1.0.1}Workflow}{1}{subsection.1.0.1}\protected@file@percent }
\newlabel{workflow}{{1.0.1}{1}{Workflow}{subsection.1.0.1}{}}
\@writefile{toc}{\contentsline {chapter}{\numberline {2}Getting Started}{2}{chapter.2}\protected@file@percent } \@writefile{toc}{\contentsline {chapter}{\numberline {2}Getting Started}{2}{chapter.2}\protected@file@percent }
\@writefile{lof}{\addvspace {10\p@ }} \@writefile{lof}{\addvspace {10\p@ }}
\@writefile{lot}{\addvspace {10\p@ }} \@writefile{lot}{\addvspace {10\p@ }}
\newlabel{getting-started}{{2}{2}{Getting Started}{chapter.2}{}} \newlabel{getting-started}{{2}{2}{Getting Started}{chapter.2}{}}
\@writefile{toc}{\contentsline {section}{\numberline {2.1}Cloning the Basic Book Builder}{2}{section.2.1}\protected@file@percent } \@writefile{toc}{\contentsline {section}{\numberline {2.1}Clone the Basic Book Builder}{2}{section.2.1}\protected@file@percent }
\newlabel{cloning-the-basic-book-builder}{{2.1}{2}{Cloning the Basic Book Builder}{section.2.1}{}} \newlabel{clone-the-basic-book-builder}{{2.1}{2}{Clone the Basic Book Builder}{section.2.1}{}}
\@writefile{toc}{\contentsline {section}{\numberline {2.2}Setting Up Build Environment}{2}{section.2.2}\protected@file@percent } \@writefile{toc}{\contentsline {section}{\numberline {2.2}Setting Up Build Environment}{2}{section.2.2}\protected@file@percent }
\newlabel{setting-up-build-environment}{{2.2}{2}{Setting Up Build Environment}{section.2.2}{}} \newlabel{setting-up-build-environment}{{2.2}{2}{Setting Up Build Environment}{section.2.2}{}}
\@writefile{toc}{\contentsline {section}{\numberline {2.3}Testing}{2}{section.2.3}\protected@file@percent } \@writefile{toc}{\contentsline {subsection}{\numberline {2.2.1}Non deb systems}{2}{subsection.2.2.1}\protected@file@percent }
\newlabel{testing}{{2.3}{2}{Testing}{section.2.3}{}} \newlabel{non-deb-systems}{{2.2.1}{2}{Non deb systems}{subsection.2.2.1}{}}
\@writefile{toc}{\contentsline {section}{\numberline {2.3}Testing}{3}{section.2.3}\protected@file@percent }
\newlabel{testing}{{2.3}{3}{Testing}{section.2.3}{}}
\@writefile{toc}{\contentsline {section}{\numberline {2.4}Creating a New Project}{3}{section.2.4}\protected@file@percent } \@writefile{toc}{\contentsline {section}{\numberline {2.4}Creating a New Project}{3}{section.2.4}\protected@file@percent }
\newlabel{creating-a-new-project}{{2.4}{3}{Creating a New Project}{section.2.4}{}} \newlabel{creating-a-new-project}{{2.4}{3}{Creating a New Project}{section.2.4}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {2.4.1}Zotero Configuration (Optional)}{3}{subsection.2.4.1}\protected@file@percent } \@writefile{toc}{\contentsline {section}{\numberline {2.5}Building}{3}{section.2.5}\protected@file@percent }
\newlabel{zotero-configuration-optional}{{2.4.1}{3}{Zotero Configuration (Optional)}{subsection.2.4.1}{}} \newlabel{building}{{2.5}{3}{Building}{section.2.5}{}}
\@writefile{toc}{\contentsline {chapter}{\numberline {3}Usage}{4}{chapter.3}\protected@file@percent } \@writefile{toc}{\contentsline {subsection}{\numberline {2.5.1}PDF}{3}{subsection.2.5.1}\protected@file@percent }
\newlabel{pdf}{{2.5.1}{3}{PDF}{subsection.2.5.1}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {2.5.2}HTML}{4}{subsection.2.5.2}\protected@file@percent }
\newlabel{html}{{2.5.2}{4}{HTML}{subsection.2.5.2}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {2.5.3}DocX}{4}{subsection.2.5.3}\protected@file@percent }
\newlabel{docx}{{2.5.3}{4}{DocX}{subsection.2.5.3}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {2.5.4}ODT}{4}{subsection.2.5.4}\protected@file@percent }
\newlabel{odt}{{2.5.4}{4}{ODT}{subsection.2.5.4}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {2.5.5}Make All}{4}{subsection.2.5.5}\protected@file@percent }
\newlabel{make-all}{{2.5.5}{4}{Make All}{subsection.2.5.5}{}}
\@writefile{toc}{\contentsline {chapter}{\numberline {3}Features}{5}{chapter.3}\protected@file@percent }
\@writefile{lof}{\addvspace {10\p@ }} \@writefile{lof}{\addvspace {10\p@ }}
\@writefile{lot}{\addvspace {10\p@ }} \@writefile{lot}{\addvspace {10\p@ }}
\newlabel{usage}{{3}{4}{Usage}{chapter.3}{}} \newlabel{features}{{3}{5}{Features}{chapter.3}{}}
\@writefile{toc}{\contentsline {section}{\numberline {3.1}Creating a Project}{4}{section.3.1}\protected@file@percent } \@writefile{toc}{\contentsline {section}{\numberline {3.1}Metadata}{5}{section.3.1}\protected@file@percent }
\newlabel{creating-a-project}{{3.1}{4}{Creating a Project}{section.3.1}{}} \newlabel{metadata}{{3.1}{5}{Metadata}{section.3.1}{}}
\@writefile{toc}{\contentsline {section}{\numberline {3.2}Editing Content}{4}{section.3.2}\protected@file@percent } \@writefile{toc}{\contentsline {section}{\numberline {3.2}Front-matter}{5}{section.3.2}\protected@file@percent }
\newlabel{editing-content}{{3.2}{4}{Editing Content}{section.3.2}{}} \newlabel{front-matter}{{3.2}{5}{Front-matter}{section.3.2}{}}
\@writefile{toc}{\contentsline {section}{\numberline {3.3}Building}{4}{section.3.3}\protected@file@percent } \@writefile{toc}{\contentsline {subsection}{\numberline {3.2.1}Meta Data Page}{5}{subsection.3.2.1}\protected@file@percent }
\newlabel{building}{{3.3}{4}{Building}{section.3.3}{}} \newlabel{meta-data-page}{{3.2.1}{5}{Meta Data Page}{subsection.3.2.1}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {3.3.1}PDF}{4}{subsection.3.3.1}\protected@file@percent } \@writefile{toc}{\contentsline {subsection}{\numberline {3.2.2}Cover Illustration}{5}{subsection.3.2.2}\protected@file@percent }
\newlabel{pdf}{{3.3.1}{4}{PDF}{subsection.3.3.1}{}} \newlabel{cover-illustration}{{3.2.2}{5}{Cover Illustration}{subsection.3.2.2}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {3.3.2}HTML}{5}{subsection.3.3.2}\protected@file@percent } \@writefile{toc}{\contentsline {subsection}{\numberline {3.2.3}Dedication}{5}{subsection.3.2.3}\protected@file@percent }
\newlabel{html}{{3.3.2}{5}{HTML}{subsection.3.3.2}{}} \newlabel{dedication}{{3.2.3}{5}{Dedication}{subsection.3.2.3}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {3.3.3}DocX}{5}{subsection.3.3.3}\protected@file@percent } \@writefile{toc}{\contentsline {section}{\numberline {3.3}Table of Contents}{6}{section.3.3}\protected@file@percent }
\newlabel{docx}{{3.3.3}{5}{DocX}{subsection.3.3.3}{}} \newlabel{table-of-contents}{{3.3}{6}{Table of Contents}{section.3.3}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {3.3.4}ODT}{5}{subsection.3.3.4}\protected@file@percent } \@writefile{toc}{\contentsline {section}{\numberline {3.4}Chapters}{6}{section.3.4}\protected@file@percent }
\newlabel{odt}{{3.3.4}{5}{ODT}{subsection.3.3.4}{}} \newlabel{chapters}{{3.4}{6}{Chapters}{section.3.4}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {3.3.5}Make All}{5}{subsection.3.3.5}\protected@file@percent } \@writefile{toc}{\contentsline {section}{\numberline {3.5}Appendixes}{6}{section.3.5}\protected@file@percent }
\newlabel{make-all}{{3.3.5}{5}{Make All}{subsection.3.3.5}{}} \newlabel{appendixes}{{3.5}{6}{Appendixes}{section.3.5}{}}
\@writefile{toc}{\contentsline {chapter}{\numberline {4}Features}{6}{chapter.4}\protected@file@percent } \@writefile{toc}{\contentsline {section}{\numberline {3.6}Glossary}{6}{section.3.6}\protected@file@percent }
\newlabel{glossary}{{3.6}{6}{Glossary}{section.3.6}{}}
\@writefile{toc}{\contentsline {section}{\numberline {3.7}Index}{6}{section.3.7}\protected@file@percent }
\newlabel{index}{{3.7}{6}{Index}{section.3.7}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {3.7.1}Markdown Indexes}{6}{subsection.3.7.1}\protected@file@percent }
\newlabel{markdown-indexes}{{3.7.1}{6}{Markdown Indexes}{subsection.3.7.1}{}}
\@writefile{toc}{\contentsline {section}{\numberline {3.8}Bibliography}{6}{section.3.8}\protected@file@percent }
\newlabel{bibliography}{{3.8}{6}{Bibliography}{section.3.8}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {3.8.1}Zotero Integration}{6}{subsection.3.8.1}\protected@file@percent }
\newlabel{zotero-integration}{{3.8.1}{6}{Zotero Integration}{subsection.3.8.1}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {3.8.2}Obsidian Citations}{6}{subsection.3.8.2}\protected@file@percent }
\newlabel{obsidian-citations}{{3.8.2}{6}{Obsidian Citations}{subsection.3.8.2}{}}
\@writefile{toc}{\contentsline {section}{\numberline {3.9}Images}{7}{section.3.9}\protected@file@percent }
\newlabel{images}{{3.9}{7}{Images}{section.3.9}{}}
\@writefile{lof}{\contentsline {figure}{\numberline {3.1}{\ignorespaces ACEP}}{7}{figure.3.1}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\numberline {3.10}\emph {LaTeX} Equations}{7}{section.3.10}\protected@file@percent }
\newlabel{latex-equations}{{3.10}{7}{\texorpdfstring {\emph {LaTeX} Equations}{LaTeX Equations}}{section.3.10}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {3.10.1}Left Justified / Inline}{7}{subsection.3.10.1}\protected@file@percent }
\newlabel{left-justified-inline}{{3.10.1}{7}{Left Justified / Inline}{subsection.3.10.1}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {3.10.2}Centered}{7}{subsection.3.10.2}\protected@file@percent }
\newlabel{centered}{{3.10.2}{7}{Centered}{subsection.3.10.2}{}}
\@writefile{toc}{\contentsline {section}{\numberline {3.11}Custom Markdown}{8}{section.3.11}\protected@file@percent }
\newlabel{custom-markdown}{{3.11}{8}{Custom Markdown}{section.3.11}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {3.11.1}Call-outs}{8}{subsection.3.11.1}\protected@file@percent }
\newlabel{call-outs}{{3.11.1}{8}{Call-outs}{subsection.3.11.1}{}}
\@writefile{toc}{\contentsline {section}{\numberline {3.12}Advanced}{11}{section.3.12}\protected@file@percent }
\newlabel{advanced}{{3.12}{11}{Advanced}{section.3.12}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {3.12.1}Changing Fonts}{11}{subsection.3.12.1}\protected@file@percent }
\newlabel{changing-fonts}{{3.12.1}{11}{Changing Fonts}{subsection.3.12.1}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {3.12.2}Adding Filters}{11}{subsection.3.12.2}\protected@file@percent }
\newlabel{adding-filters}{{3.12.2}{11}{Adding Filters}{subsection.3.12.2}{}}
\@writefile{toc}{\contentsline {chapter}{\numberline {4}Design}{12}{chapter.4}\protected@file@percent }
\@writefile{lof}{\addvspace {10\p@ }} \@writefile{lof}{\addvspace {10\p@ }}
\@writefile{lot}{\addvspace {10\p@ }} \@writefile{lot}{\addvspace {10\p@ }}
\newlabel{features}{{4}{6}{Features}{chapter.4}{}} \newlabel{design}{{4}{12}{Design}{chapter.4}{}}
\@writefile{toc}{\contentsline {section}{\numberline {4.1}Metadata}{6}{section.4.1}\protected@file@percent } \@writefile{toc}{\contentsline {section}{\numberline {4.1}Directory Structure}{12}{section.4.1}\protected@file@percent }
\newlabel{metadata}{{4.1}{6}{Metadata}{section.4.1}{}} \newlabel{directory-structure}{{4.1}{12}{Directory Structure}{section.4.1}{}}
\@writefile{toc}{\contentsline {section}{\numberline {4.2}Front-matter}{6}{section.4.2}\protected@file@percent } \@writefile{toc}{\contentsline {section}{\numberline {4.2}Configuration Files}{12}{section.4.2}\protected@file@percent }
\newlabel{front-matter}{{4.2}{6}{Front-matter}{section.4.2}{}} \newlabel{configuration-files}{{4.2}{12}{Configuration Files}{section.4.2}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {4.2.1}Meta Data Page}{6}{subsection.4.2.1}\protected@file@percent } \@writefile{toc}{\contentsline {subsection}{\numberline {4.2.1}Pandoc Main Config}{13}{subsection.4.2.1}\protected@file@percent }
\newlabel{meta-data-page}{{4.2.1}{6}{Meta Data Page}{subsection.4.2.1}{}} \newlabel{pandoc-main-config}{{4.2.1}{13}{Pandoc Main Config}{subsection.4.2.1}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {4.2.2}Cover Illustration}{6}{subsection.4.2.2}\protected@file@percent } \@writefile{toc}{\contentsline {section}{\numberline {4.3}Build Workflow}{14}{section.4.3}\protected@file@percent }
\newlabel{cover-illustration}{{4.2.2}{6}{Cover Illustration}{subsection.4.2.2}{}} \newlabel{build-workflow}{{4.3}{14}{Build Workflow}{section.4.3}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {4.2.3}Dedication}{7}{subsection.4.2.3}\protected@file@percent }
\newlabel{dedication}{{4.2.3}{7}{Dedication}{subsection.4.2.3}{}}
\@writefile{toc}{\contentsline {section}{\numberline {4.3}Chapters}{7}{section.4.3}\protected@file@percent }
\newlabel{chapters}{{4.3}{7}{Chapters}{section.4.3}{}}
\@writefile{toc}{\contentsline {section}{\numberline {4.4}Appendixes}{7}{section.4.4}\protected@file@percent }
\newlabel{appendixes}{{4.4}{7}{Appendixes}{section.4.4}{}}
\@writefile{toc}{\contentsline {section}{\numberline {4.5}Glossary}{7}{section.4.5}\protected@file@percent }
\newlabel{glossary}{{4.5}{7}{Glossary}{section.4.5}{}}
\@writefile{toc}{\contentsline {section}{\numberline {4.6}Index}{7}{section.4.6}\protected@file@percent }
\newlabel{index}{{4.6}{7}{Index}{section.4.6}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {4.6.1}Markdown Indexes}{7}{subsection.4.6.1}\protected@file@percent }
\newlabel{markdown-indexes}{{4.6.1}{7}{Markdown Indexes}{subsection.4.6.1}{}}
\@writefile{toc}{\contentsline {section}{\numberline {4.7}Bibliography}{7}{section.4.7}\protected@file@percent }
\newlabel{bibliography}{{4.7}{7}{Bibliography}{section.4.7}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {4.7.1}Zotero Integration}{7}{subsection.4.7.1}\protected@file@percent }
\newlabel{zotero-integration}{{4.7.1}{7}{Zotero Integration}{subsection.4.7.1}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {4.7.2}Obsidian Citations}{8}{subsection.4.7.2}\protected@file@percent }
\newlabel{obsidian-citations}{{4.7.2}{8}{Obsidian Citations}{subsection.4.7.2}{}}
\@writefile{toc}{\contentsline {section}{\numberline {4.8}Mathjax Equations}{8}{section.4.8}\protected@file@percent }
\newlabel{mathjax-equations}{{4.8}{8}{Mathjax Equations}{section.4.8}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {4.8.1}Left Justified / Inline}{8}{subsection.4.8.1}\protected@file@percent }
\newlabel{left-justified-inline}{{4.8.1}{8}{Left Justified / Inline}{subsection.4.8.1}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {4.8.2}Centered}{8}{subsection.4.8.2}\protected@file@percent }
\newlabel{centered}{{4.8.2}{8}{Centered}{subsection.4.8.2}{}}
\@writefile{toc}{\contentsline {section}{\numberline {4.9}Custom Markdown}{8}{section.4.9}\protected@file@percent }
\newlabel{custom-markdown}{{4.9}{8}{Custom Markdown}{section.4.9}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {4.9.1}Call-outs}{8}{subsection.4.9.1}\protected@file@percent }
\newlabel{call-outs}{{4.9.1}{8}{Call-outs}{subsection.4.9.1}{}}
\@writefile{toc}{\contentsline {chapter}{\numberline {A}Appendix A: Build Environment Notes}{12}{appendix.A}\protected@file@percent }
\@writefile{lof}{\addvspace {10\p@ }}
\@writefile{lot}{\addvspace {10\p@ }}
\newlabel{appendix-a-build-environment-notes}{{A}{12}{Appendix A: Build Environment Notes}{appendix.A}{}}
\@writefile{toc}{\contentsline {section}{\numberline {A.1}Installing Pre-Requisites}{12}{section.A.1}\protected@file@percent }
\newlabel{installing-pre-requisites}{{A.1}{12}{Installing Pre-Requisites}{section.A.1}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {A.1.1}Required}{12}{subsection.A.1.1}\protected@file@percent }
\newlabel{required}{{A.1.1}{12}{Required}{subsection.A.1.1}{}}
\@writefile{toc}{\contentsline {subsubsection}{\numberline {A.1.1.1}Pandoc}{12}{subsubsection.A.1.1.1}\protected@file@percent }
\newlabel{pandoc}{{A.1.1.1}{12}{Pandoc}{subsubsection.A.1.1.1}{}}
\@writefile{toc}{\contentsline {subsubsection}{\numberline {A.1.1.2}Code Editor}{12}{subsubsection.A.1.1.2}\protected@file@percent }
\newlabel{code-editor}{{A.1.1.2}{12}{Code Editor}{subsubsection.A.1.1.2}{}}
\@writefile{toc}{\contentsline {subsubsection}{\numberline {A.1.1.3}jq and yq}{12}{subsubsection.A.1.1.3}\protected@file@percent }
\newlabel{jq-and-yq}{{A.1.1.3}{12}{jq and yq}{subsubsection.A.1.1.3}{}}
\@writefile{toc}{\contentsline {subsubsection}{\numberline {A.1.1.4}texlive}{12}{subsubsection.A.1.1.4}\protected@file@percent }
\newlabel{texlive}{{A.1.1.4}{12}{texlive}{subsubsection.A.1.1.4}{}}
\@writefile{toc}{\contentsline {subsubsection}{\numberline {A.1.1.5}MathJax}{13}{subsubsection.A.1.1.5}\protected@file@percent }
\newlabel{mathjax}{{A.1.1.5}{13}{MathJax}{subsubsection.A.1.1.5}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {A.1.2}Optional}{13}{subsection.A.1.2}\protected@file@percent }
\newlabel{optional}{{A.1.2}{13}{Optional}{subsection.A.1.2}{}}
\@writefile{toc}{\contentsline {subsubsection}{\numberline {A.1.2.1}Obsidian}{13}{subsubsection.A.1.2.1}\protected@file@percent }
\newlabel{obsidian}{{A.1.2.1}{13}{Obsidian}{subsubsection.A.1.2.1}{}}
\@writefile{toc}{\contentsline {subsubsection}{\numberline {A.1.2.2}Zotero}{13}{subsubsection.A.1.2.2}\protected@file@percent }
\newlabel{zotero}{{A.1.2.2}{13}{Zotero}{subsubsection.A.1.2.2}{}}
\@writefile{toc}{\contentsline {paragraph}{\numberline {A.1.2.2.1}Better BibTex for Zotero}{14}{paragraph.A.1.2.2.1}\protected@file@percent }
\newlabel{better-bibtex-for-zotero}{{A.1.2.2.1}{14}{Better BibTex for Zotero}{paragraph.A.1.2.2.1}{}}
\@writefile{toc}{\contentsline {paragraph}{\numberline {A.1.2.2.2}Export citations.bib}{14}{paragraph.A.1.2.2.2}\protected@file@percent }
\newlabel{export-citations.bib}{{A.1.2.2.2}{14}{Export citations.bib}{paragraph.A.1.2.2.2}{}}
\@writefile{toc}{\contentsline {paragraph}{\numberline {A.1.2.2.3}Zotero Connector Browser Plugin}{14}{paragraph.A.1.2.2.3}\protected@file@percent }
\newlabel{zotero-connector-browser-plugin}{{A.1.2.2.3}{14}{Zotero Connector Browser Plugin}{paragraph.A.1.2.2.3}{}}
\@writefile{toc}{\contentsline {subsubsection}{\numberline {A.1.2.3}lmodern}{14}{subsubsection.A.1.2.3}\protected@file@percent }
\newlabel{lmodern}{{A.1.2.3}{14}{lmodern}{subsubsection.A.1.2.3}{}}
\@writefile{toc}{\contentsline {subsubsection}{\numberline {A.1.2.4}epubcheck}{14}{subsubsection.A.1.2.4}\protected@file@percent }
\newlabel{epubcheck}{{A.1.2.4}{14}{epubcheck}{subsubsection.A.1.2.4}{}}
\@writefile{toc}{\contentsline {subsubsection}{\numberline {A.1.2.5}foliate}{14}{subsubsection.A.1.2.5}\protected@file@percent }
\newlabel{foliate}{{A.1.2.5}{14}{foliate}{subsubsection.A.1.2.5}{}}
\@writefile{toc}{\contentsline {subsubsection}{\numberline {A.1.2.6}calibre}{14}{subsubsection.A.1.2.6}\protected@file@percent }
\newlabel{calibre}{{A.1.2.6}{14}{calibre}{subsubsection.A.1.2.6}{}}
\@writefile{toc}{\contentsline {section}{\numberline {A.2}Editing the Configuration}{14}{section.A.2}\protected@file@percent }
\newlabel{editing-the-configuration}{{A.2}{14}{Editing the Configuration}{section.A.2}{}}
\gdef \LT@i {\LT@entry \gdef \LT@i {\LT@entry
{1}{86.68152pt}\LT@entry {1}{86.68152pt}\LT@entry
{1}{383.07349pt}} {1}{383.07349pt}}
\newlabel{glossary-1}{{A.2}{15}{Glossary}{appendix*.2}{}} \newlabel{glossary-1}{{4.3}{15}{Glossary}{chapter*.2}{}}
\@writefile{toc}{\contentsline {chapter}{Glossary}{15}{appendix*.2}\protected@file@percent } \@writefile{toc}{\contentsline {chapter}{Glossary}{15}{chapter*.2}\protected@file@percent }
\@writefile{toc}{\contentsline {chapter}{Index}{17}{appendix*.3}\protected@file@percent } \@writefile{toc}{\contentsline {chapter}{Index}{17}{chapter*.3}\protected@file@percent }
\bibcite{ref-JehaverlackBasicbookbuilderPandoca}{\citeproctext } \bibcite{ref-JehaverlackBasicbookbuilderPandoca}{\citeproctext }
\bibcite{ref-JohnHaverlackACEP}{\citeproctext } \bibcite{ref-JohnHaverlackACEP}{\citeproctext }
\bibcite{ref-PandocIndex}{\citeproctext } \bibcite{ref-PandocIndex}{\citeproctext }
\bibcite{ref-JehaverlackBasicbookbuilderPandoca}{\citeproctext } \newlabel{bibliography-1}{{4.3}{19}{Bibliography}{chapter*.4}{}}
\bibcite{ref-JohnHaverlackACEP}{\citeproctext } \@writefile{toc}{\contentsline {chapter}{Bibliography}{19}{chapter*.4}\protected@file@percent }
\bibcite{ref-PandocIndex}{\citeproctext } \newlabel{refs}{{4.3}{19}{Bibliography}{section*.5}{}}
\newlabel{bibliography-1}{{A.2}{19}{Bibliography}{appendix*.4}{}}
\@writefile{toc}{\contentsline {chapter}{Bibliography}{19}{appendix*.4}\protected@file@percent }
\newlabel{refs}{{A.2}{19}{Bibliography}{section*.5}{}}
\gdef \@abspage@last{24} \gdef \@abspage@last{24}

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@ -22,9 +22,9 @@
\usepackage{lmodern} \usepackage{lmodern}
\ifPDFTeX\else \ifPDFTeX\else
% xetex/luatex font selection % xetex/luatex font selection
\setmainfont[]{Noto Serif} \setmainfont[]{TeX Gyre Termes}
\setsansfont[]{Noto Sans} \setsansfont[]{TeX Gyre Heros}
\setmonofont[]{Noto Sans Mono} \setmonofont[]{TeX Gyre Cursor}
\fi \fi
% Use upquote if available, for straight quotes in verbatim environments % Use upquote if available, for straight quotes in verbatim environments
\IfFileExists{upquote.sty}{\usepackage{upquote}}{} \IfFileExists{upquote.sty}{\usepackage{upquote}}{}
@ -274,7 +274,7 @@
\fancypagestyle{plain}{% \fancypagestyle{plain}{%
\fancyhf{}% \fancyhf{}%
\fancyhead[C]{\leftmark} % Chapter title \fancyhead[C]{\leftmark} % Chapter title
\cfoot{Basic Book Builder: A Pandoc build process for books, docs and articles} % Book title \cfoot{Basic Book Builder: A Pandoc build process for books, docs and articles.} % Book title
\rfoot{\thepage} % Page number \rfoot{\thepage} % Page number
\renewcommand{\headrulewidth}{0pt} \renewcommand{\headrulewidth}{0pt}
\renewcommand{\footrulewidth}{0pt} \renewcommand{\footrulewidth}{0pt}
@ -288,7 +288,7 @@
\fancyhead[C]{\leftmark} % Chapter title (centered) \fancyhead[C]{\leftmark} % Chapter title (centered)
% Footer % Footer
\cfoot{Basic Book Builder: A Pandoc build process for books, docs and articles} % Book title \cfoot{Basic Book Builder: A Pandoc build process for books, docs and articles.} % Book title
\rfoot{\thepage} % Page number \rfoot{\thepage} % Page number
% Line rules % Line rules
@ -321,7 +321,7 @@
{\Huge\bfseries Basic Book Builder \par} {\Huge\bfseries Basic Book Builder \par}
\vspace{0.4cm} \vspace{0.4cm}
{\Large A Pandoc build process for books, docs and articles \par} {\Large A Pandoc build process for books, docs and articles. \par}
\vspace{1.2cm} \vspace{1.2cm}
\includegraphics[width=0.5\textwidth]{lib/img/UAF-ACEP.png} \includegraphics[width=0.5\textwidth]{lib/img/UAF-ACEP.png}
@ -338,14 +338,14 @@
{\Large\bfseries Basic Book Builder \par} {\Large\bfseries Basic Book Builder \par}
\vspace{0.2cm} \vspace{0.2cm}
{\normalsize\textit{A Pandoc build process for books, docs and articles}\par} {\normalsize\textit{A Pandoc build process for books, docs and articles.}\par}
\vspace{0.4cm} \vspace{0.4cm}
\renewcommand{\arraystretch}{1.3} % row spacing \renewcommand{\arraystretch}{1.3} % row spacing
\setlength{\tabcolsep}{8pt} % column padding \setlength{\tabcolsep}{8pt} % column padding
\begin{tabular}{@{}p{0.28\textwidth}p{0.65\textwidth}@{}} \begin{tabular}{@{}p{0.28\textwidth}p{0.65\textwidth}@{}}
\textbf{Author:} & John Haverlack \\ \textbf{Author:} & John Haverlack \\
\textbf{Version:} & 1.1.0 \\ \textbf{Version:} & 1.2.3 \\
\textbf{Date:} & 2026-02-05 \\ \textbf{Date:} & 2026-02-05 \\
\textbf{Affiliation:} & Alaska Center for Energy and Power \\ \textbf{Affiliation:} & Alaska Center for Energy and Power \\
\textbf{Institution:} & University of Alaska Fairbanks \\ \textbf{Institution:} & University of Alaska Fairbanks \\
@ -428,12 +428,46 @@ Licensed under the Creative Commons Attribution-NoDerivatives 4.0 International
\mainmatter \mainmatter
\chapter{Introduction}\label{introduction} \chapter{Introduction}\label{introduction}
This is a basic book (or article / document) builder template based on a This is a \textbf{basic book builder} template is based on a
Pandoc(\citeproc{ref-PandocIndex}{\emph{Pandoc - Index}, Pandoc(\citeproc{ref-PandocIndex}{\emph{Pandoc - Index},
n.d.})\index{Pandoc} build process in conjunction with a number of other n.d.})\index{Pandoc} + Makefile build process in conjunction Obsidian to
tools to generate PDF, HTML, LaTex, Markdown, ODT, DOCX, and Epub book edit content and Zotero to manage citation, to generate multiple format
output formats from a single set Markdown source content , which can of the document including:
optionally be edited as an Obsidian vault.
\begin{itemize}
\tightlist
\item
PDF
\item
HTML
\item
\emph{LaTeX}
\item
Markdown
\item
ODT
\item
DOCX
\item
Epub
\end{itemize}
\subsection{Workflow}\label{workflow}
\begin{enumerate}
\def\labelenumi{\arabic{enumi}.}
\tightlist
\item
Create a new project
\item
Initialize \texttt{metadata.yaml} with title, copyright, author, etc.
\item
Customize \texttt{input-files:} in \texttt{pandoc.yaml}
\item
Edit \texttt{chapters} Markdown ``conent'' files using Obidian
\item
Build your document
\end{enumerate}
This \textbf{basic book This \textbf{basic book
builder}(\citeproc{ref-JehaverlackBasicbookbuilderPandoca}{\emph{Jehaverlack/Basic-Book-Builder}, builder}(\citeproc{ref-JehaverlackBasicbookbuilderPandoca}{\emph{Jehaverlack/Basic-Book-Builder},
@ -443,8 +477,8 @@ Haverlack.(\citeproc{ref-JohnHaverlackACEP}{\emph{John {Haverlack}
\chapter{Getting Started}\label{getting-started} \chapter{Getting Started}\label{getting-started}
\section{Cloning the Basic Book \section{Clone the Basic Book
Builder}\label{cloning-the-basic-book-builder} Builder}\label{clone-the-basic-book-builder}
\begin{clibox}[Clone the repository] \begin{clibox}[Clone the repository]
\begin{verbatim} \begin{verbatim}
@ -464,10 +498,17 @@ cd basic-book-builder
Environment}\label{setting-up-build-environment} Environment}\label{setting-up-build-environment}
\begin{cautionbox}[~Debian Linux] \begin{cautionbox}[~Debian Linux]
This script only support Debian based Linux system (Debian, Ubunutu, This script only support Debian based Linux system (e.g Debian, Ubuntu,
Zorin, etc) This script has not been widely tested across platforms Zorin). And this script will install several ATP packages on your
system.
\end{cautionbox} \end{cautionbox}
\begin{dangerbox}[Warning]
This script \textbf{has not} been widely tested across many platforms
\end{dangerbox}
To initialize your systems build environment run:
\begin{clibox}[Setup Build Environment] \begin{clibox}[Setup Build Environment]
\begin{verbatim} \begin{verbatim}
./scripts/setup-linux-deb.sh ./scripts/setup-linux-deb.sh
@ -475,13 +516,15 @@ Zorin, etc) This script has not been widely tested across platforms
\end{clibox} \end{clibox}
\subsection{Non deb systems}\label{non-deb-systems}
For more information on setting up the build environment for your system For more information on setting up the build environment for your system
see Appendix A. see: \textbf{TBD: NEEDS DOCUMENTED}.
\section{Testing}\label{testing} \section{Testing}\label{testing}
If you can build all format for the \textbf{Basic Book Build} then you Once you have set up your build environment, you test by building the
have a working build environment. \textbf{basic book builder}.
\begin{clibox}[Testing Build Environment] \begin{clibox}[Testing Build Environment]
\begin{verbatim} \begin{verbatim}
@ -492,66 +535,43 @@ make all
\section{Creating a New Project}\label{creating-a-new-project} \section{Creating a New Project}\label{creating-a-new-project}
\subsection{Zotero Configuration \begin{proposedbox}[Tip]
(Optional)}\label{zotero-configuration-optional} You do not want to edit your new project document in the
\texttt{basic-book-builder} directory. You will want to create a
\textbf{new project} for your document based on this template.
\end{proposedbox}
\chapter{Usage}\label{usage} \begin{clibox}[Create a new project]
\begin{verbatim}
./scripts/new-project.sh <NEW_PROJECT_DIR>
\end{verbatim}
\section{Creating a Project}\label{creating-a-project} \end{clibox}
To create a new Project based on the Basic Book Builder template: \begin{verbatim}
cd <NEW_PROJECT_DIR>
\end{verbatim}
Update your project configuration:
\begin{enumerate} \begin{enumerate}
\def\labelenumi{\arabic{enumi}.} \def\labelenumi{\arabic{enumi}.}
\tightlist \tightlist
\item \item
Run the new-project.sh script. Edit: \texttt{metadata.yaml}, for title, author, etc
\item
Edit: \texttt{templates/pandoc.yaml}
\item
Open: \texttt{\textless{}NEW\_PROJECT\_DIR\textgreater{}} with
Obsidian, and edit \texttt{chapters} documents.
\item
Build: \texttt{make\ pdf}
\end{enumerate} \end{enumerate}
\begin{verbatim} \begin{warningbox}[Warning]
./scripts/new-project.sh <PATH_TO_PROJECT> \texttt{\textless{}NEW\_PROJECT\_DIR\textgreater{}} should be outside of
\end{verbatim} the \textbf{basic-book-builder} directory
\end{warningbox}
\begin{itemize}
\tightlist
\item
should be outside of the \textbf{basic-book-builder} directory
\end{itemize}
\begin{verbatim}
cd <PATH_TO_PROJECT>
\end{verbatim}
Update:
\begin{enumerate}
\def\labelenumi{\arabic{enumi}.}
\tightlist
\item
\texttt{metadata.yaml}
\item
\texttt{templates/pandoc.yaml}
\end{enumerate}
\begin{quote}
{[}!info{]} Suggestion Create a git repository to version control your
new content.
\end{quote}
\section{Editing Content}\label{editing-content}
Edit your source content Markdown under the \texttt{chapters} directory.
\textbf{Optional}
\begin{itemize}
\tightlist
\item
Open your \texttt{\textless{}PATH\_TO\_PROJECT\textgreater{}}
directory as an Obsidian vault.
\item
Edit your Markdown with Obsidian
\end{itemize}
\section{Building}\label{building} \section{Building}\label{building}
@ -602,15 +622,22 @@ make all
\chapter{Features}\label{features} \chapter{Features}\label{features}
The basic book builder template integrates feature from many systems
including Pandoc, MathJax, Obsidian, and Zotero. The following list
covers these features from a functional point of view.
\section{Metadata}\label{metadata} \section{Metadata}\label{metadata}
Metadata for the project is managed in \texttt{metadata.yaml}. Edit this Metadata for the project is managed in \texttt{metadata.yaml}. Edit this
file to make global changes to variables for your document. Changes here file to make \textbf{global changes} to variables for your document.
will propagate to all format builds. Definitions in \texttt{metadata.yaml} will propagate to all format
builds.
\section{Front-matter}\label{front-matter} \section{Front-matter}\label{front-matter}
Front matter content is manged in: Front-Matter documents control the Title Page, Metadata and other pages
before the Title of Contents. Front matter content is manged in these
files:
\begin{itemize} \begin{itemize}
\tightlist \tightlist
@ -622,22 +649,16 @@ Front matter content is manged in:
\texttt{templates/frontmatter-md.html} \texttt{templates/frontmatter-md.html}
\end{itemize} \end{itemize}
\begin{cautionbox}[Tip]
Unfortunately when you edit one, you need to edit the respective changes Unfortunately when you edit one, you need to edit the respective changes
to the other front-matter formats. \#\#\# Title Page to the other front-matter formats. \#\#\# Title Page
\end{cautionbox}
Edit the \textbf{Front-matter} files to modify the formatting of the Edit the \textbf{Front-matter} files to modify the formatting of the
Title Page. Title Page. You'll need to modify the HTML / LaTex code.
\begin{cautionbox}[Tip]
You'll need to modify the HTML / LaTex.
\end{cautionbox}
\subsection{Meta Data Page}\label{meta-data-page} \subsection{Meta Data Page}\label{meta-data-page}
Edit the \textbf{Front-matter} files to modify the 2nd page Metadata Edit the \textbf{Front-matter} files to modify the 2nd page Metadata
format. format and fields to display.
\subsection{Cover Illustration}\label{cover-illustration} \subsection{Cover Illustration}\label{cover-illustration}
@ -658,14 +679,26 @@ Dedication.
\begin{itemize} \begin{itemize}
\tightlist \tightlist
\item \item
This is disabled by default \#\# Table of Contents This is disabled by default
\end{itemize} \end{itemize}
\section{Table of Contents}\label{table-of-contents}
The table of contents is auto generated. But can be disabled in
\texttt{template\textbackslash{}pandoc.yaml} by setting: -
\texttt{toc:\ false}
\section{Chapters}\label{chapters} \section{Chapters}\label{chapters}
Chapter Markdown source files are located in the \texttt{chapters} Chapter Markdown source files are located in the \texttt{chapters}
directory. Edit the \texttt{template\textbackslash{}pandoc.yaml} file to directory. To edit which chapter files are included the document:
control which chapter markdown files are in what order.
\begin{itemize}
\tightlist
\item
Edit the \texttt{input-file:} section of the
\texttt{template\textbackslash{}pandoc.yaml}
\end{itemize}
\section{Appendixes}\label{appendixes} \section{Appendixes}\label{appendixes}
@ -695,22 +728,64 @@ TBD
TBD TBD
\section{Mathjax Equations}\label{mathjax-equations} \section{Images}\label{images}
TBD You can use basic Markdown Images
\begin{verbatim}
![ACEP](lib/img/ACEPLogo.png)
\end{verbatim}
\begin{figure}
\centering
\pandocbounded{\includegraphics[keepaspectratio,alt={ACEP}]{lib/img/ACEPLogo.png}}
\caption{ACEP}
\end{figure}
\section{\texorpdfstring{\emph{LaTeX}
Equations}{LaTeX Equations}}\label{latex-equations}
You can embed LaTeX equations directly in your Markdown pages.
\subsection{Left Justified / Inline}\label{left-justified-inline} \subsection{Left Justified / Inline}\label{left-justified-inline}
TBD To left justify \emph{LaTex} surround the code inside single
\texttt{\$}:
\begin{codebox}[Left Justified Equation]
\begin{verbatim}
$x = \frac{1}{2}$
\end{verbatim}
\end{codebox}
\(x = \frac{1}{2}\)
\begin{codebox}[Inline]
\begin{verbatim}
Or inline, $x = \frac{1}{2}$, in a sentence.
\end{verbatim}
\end{codebox}
Or inline, \(x = \frac{1}{2}\), in a sentence.
\subsection{Centered}\label{centered} \subsection{Centered}\label{centered}
TBD To center justify \emph{LaTex} surround the code inside double
\texttt{\$\$}:
\begin{codebox}[Centered Equation]
\begin{verbatim}
$$x = \frac{1}{2}$$
\end{verbatim}
\end{codebox}
\[x = \frac{1}{2}\]
\section{Custom Markdown}\label{custom-markdown} \section{Custom Markdown}\label{custom-markdown}
TBD
\subsection{Call-outs}\label{call-outs} \subsection{Call-outs}\label{call-outs}
A few call-out box styles have been custom added to easily highlight A few call-out box styles have been custom added to easily highlight
@ -748,22 +823,6 @@ A blue box
\begin{center}\rule{0.5\linewidth}{0.5pt}\end{center} \begin{center}\rule{0.5\linewidth}{0.5pt}\end{center}
\begin{codebox}[Markdown Example]
\begin{verbatim}
[!info] Info Box
Same as a blue box
\end{verbatim}
\end{codebox}
Will render:
\begin{quote}
{[}!info{]} Info Box Same as a blue box
\end{quote}
\begin{center}\rule{0.5\linewidth}{0.5pt}\end{center}
\begin{codebox}[Markdown Example] \begin{codebox}[Markdown Example]
\begin{verbatim} \begin{verbatim}
[!speculative] Purple Call-out Title [!speculative] Purple Call-out Title
@ -859,7 +918,8 @@ fi
A command line example A command line example
''' '''
$ ls $ ls
build chapters conf filters lib LICENSE.md Makefile metadata.yaml >README.md scripts templates build chapters conf filters lib LICENSE.md Makefile
metadata.yaml >README.md scripts templates
''' '''
\end{verbatim} \end{verbatim}
@ -872,208 +932,168 @@ A command line example
\begin{verbatim} \begin{verbatim}
$ ls $ ls
build chapters conf filters lib LICENSE.md Makefile metadata.yaml README.md scripts templates build chapters conf filters lib LICENSE.md Makefile
metadata.yaml README.md scripts templates
\end{verbatim} \end{verbatim}
\end{clibox} \end{clibox}
\appendix \section{Advanced}\label{advanced}
Appendix A \subsection{Changing Fonts}\label{changing-fonts}
\chapter{Appendix A: Build Environment It is possible to change fonts by editing
Notes}\label{appendix-a-build-environment-notes} \texttt{templates/pandoc.yaml}, and
\texttt{templates\textbackslash{}styles.css}, but you will have to make
sure you have the proper font's installed on your system first.
\section{Installing Pre-Requisites}\label{installing-pre-requisites} \subsection{Adding Filters}\label{adding-filters}
\begin{cautionbox}[Not Cross-platform Tested] Custom filters can be created. This is complicated and typically needs
For Debian / ZorinOS and likely Ubuntu based systems. done in 3 places for:
\begin{itemize}
\tightlist
\item
obsidian
\item
\emph{LaTeX}
\item
HTML
\end{itemize}
\chapter{Design}\label{design}
\section{Directory Structure}\label{directory-structure}
The \textbf{basic-book-builder} directory tree.
\begin{verbatim}
basic-book-builder
├── build
│   ├── docx
│   ├── html
│   │   ├── conf
│   │   └── lib
│   │   ├── diag
│   │   ├── img
│   │   └── mathjax
│   ├── latex
│   ├── odt
│   └── pdf
├── chapters
├── conf
├── filters
├── lib
│   ├── citations
│   ├── diag
│   ├── img
│   └── mathjax
├── scripts
│   └── tmp
└── templates
\end{verbatim}
\section{Configuration Files}\label{configuration-files}
The \textbf{basic-book-builder} configuration files, scripts, and build
files.
\begin{verbatim}
../basic-book-builder
├── chapters
├── conf
├── filters
│   ├── callouts-html.lua
│   └── callouts.lua
├── lib
│   ├── diag
│   ├── img
│   └── zotero.bib
├── Makefile
├── metadata.yaml
├── scripts
│   ├── new-project.sh
│   ├── replace-metadata.sh
│   ├── setup-linux-deb.sh
│   └── tmp
└── templates
├── docx.yaml
├── epub_template.html
├── epub.yaml
├── frontmatter-docx.md
├── frontmatter.html
├── frontmatter-md.html
├── frontmatter.tex
├── header.tex
├── html.yaml
├── latex.yaml
├── markdown.yaml
├── odt.yaml
├── pandoc.yaml
├── pdf.yaml
├── style.css
└── style_epub.css
\end{verbatim}
\begin{cautionbox}[About conf]
NEVER: edit file directly in \texttt{conf}. They will be overwritten by
the build process. \#\#\# Metadata
\end{cautionbox} \end{cautionbox}
\subsection{Required}\label{required} Update the \texttt{metadata.yaml} file to globally configure your
document title and other metadata. Edit this file to control your
document title, author, etc.
\subsubsection{Pandoc}\label{pandoc} \subsection{Pandoc Main Config}\label{pandoc-main-config}
\begin{itemize} Update the \texttt{input-files:} section of
\texttt{templates/pandoc.yaml} to control what chapter source files are
in which order in your document.
\begin{verbatim}
# pandoc.yaml
input-files:
# - chapters/Preface.md
- chapters/00_Introduction.md
- chapters/01_Getting_Started.md
- chapters/02_Usage.md
- chapters/03_Features.md
- chapters/Appendix.md
- chapters/AppendixA.md
# - chapters/AppendixB.md
- chapters/Glossary.md
- chapters/Index.md
- chapters/Bibliography.md
\end{verbatim}
\section{Build Workflow}\label{build-workflow}
For a PDF Build:
\begin{verbatim}
make pdf
\end{verbatim}
will build dependencies on these file:
\begin{enumerate}
\def\labelenumi{\arabic{enumi}.}
\tightlist \tightlist
\item \item
https://pandoc.org/ Makefile
\item \item
\href{https://github.com/jgm/pandoc/releases/tag/3.8.2.1}{Download} conf/pandoc.yaml
\end{itemize}
\begin{quote}
\texttt{sudo\ apt\ install\ https://github.com/jgm/pandoc/releases/download/3.8.2.1/pandoc-3.8.2.1-1-amd64.deb}
\end{quote}
\subsubsection{Code Editor}\label{code-editor}
\begin{establishedbox}[Code Editor]
\href{https://vscodium.com/}{VSCodium} is recommend for privacy
(telemetry/tracking) reasons - https://vscodium.com/
\end{establishedbox}
But any text editor will work. \#\#\#\# make
\begin{verbatim}
sudo apt install make
\end{verbatim}
\subsubsection{jq and yq}\label{jq-and-yq}
\begin{verbatim}
sudo apt install jq yq
\end{verbatim}
\subsubsection{texlive}\label{texlive}
\begin{quote}
\texttt{sudo\ apt\ install\ texlive\ texlive-xetex\ texlive-latex-extra\ texlive-fonts-recommended\ texlive-fonts-extra}
\end{quote}
\subsubsection{MathJax}\label{mathjax}
\begin{itemize}
\tightlist
\item \item
https://www.mathjax.org/ conf/pdf.yaml
\end{itemize}
\begin{verbatim}
wget https://registry.npmjs.org/mathjax/-/mathjax-3.2.2.tgz
tar xzf mathjax-3.2.2.tgz
mv package/es5/* lib/mathjax
rm -rf package mathjax-3.2.2.tgz
\end{verbatim}
\begin{cautionbox}[TODO]
This need to be rolled into a setup script.
\end{cautionbox}
\subsection{Optional}\label{optional}
The following are not strictly requires to use this book builder
template.
\subsubsection{Obsidian}\label{obsidian}
\begin{establishedbox}[Highly Recommended]
Editing book chapter content in Obsidian is a very productive means for
editing Markdown source content.
\end{establishedbox}
\begin{itemize}
\tightlist
\item \item
https://obsidian.md/ lib/zotero.bib
\item \item
\href{https://github.com/obsidianmd/obsidian-releases/releases/download/v1.9.14/obsidian_1.9.14_amd64.deb}{Deb chapters/*.md
Package} \end{enumerate}
\end{itemize}
\begin{verbatim} NOTE: the \texttt{Makefile} will copy \texttt{templates/*.yaml} to
sudo apt install https://github.com/obsidianmd/obsidian-releases/releases/download/v1.9.14/obsidian_1.9.14_amd64.deb \texttt{conf/*.yaml}. \textbf{Never} edit \texttt{conf/*}directly.
\end{verbatim}
\subsubsection{Zotero}\label{zotero}
\begin{establishedbox}[Highly Recommended]
If you need to managed citations and references, Zotero integration is
highly recommended.
\end{establishedbox}
\begin{itemize}
\tightlist
\item
https://www.zotero.org/
\end{itemize}
\begin{verbatim}
sudo cp ./scripts/deps/zotero.list /etc/apt/sources.list.d/
\end{verbatim}
\begin{verbatim}
sudo apt update
\end{verbatim}
\begin{verbatim}
sudo apt install zotero
\end{verbatim}
\paragraph{Better BibTex for Zotero}\label{better-bibtex-for-zotero}
Install the Better BibTex Plugin for Zotero - Zotero \textgreater{} Tool
\textgreater{} Plugins
\paragraph{Export citations.bib}\label{export-citations.bib}
\begin{itemize}
\tightlist
\item
Zotero \textgreater{} File \textgreater{} Export Library
\textgreater{} Format: Better BibTeX
\item[$\square$]
Keep Updated
\item[$\square$]
Save to: \textasciitilde/Documents/Lib/zotero.bib
\item[$\square$]
Symlink your \textasciitilde/Documents/Lib/Citations.bib to
basic-book-builder/lib/zotero.bib
\end{itemize}
\paragraph{Zotero Connector Browser
Plugin}\label{zotero-connector-browser-plugin}
\begin{itemize}
\tightlist
\item
https://chromewebstore.google.com/detail/zotero-connector/ekhagklcjbdpajgpjgmbionohlpdbjgc
\end{itemize}
Provides you the ability to auto add Web resources to your Zotero
citation database.
\subsubsection{lmodern}\label{lmodern}
\begin{verbatim}
sudo apt install lmodern
\end{verbatim}
\subsubsection{epubcheck}\label{epubcheck}
\begin{verbatim}
sudo apt install epubcheck
\end{verbatim}
\subsubsection{foliate}\label{foliate}
An EPub Reader
\begin{itemize}
\tightlist
\item
https://johnfactotum.github.io/foliate/
\end{itemize}
\begin{verbatim}
sudo apt install https://github.com/johnfactotum/foliate/releases/download/2.6.4/com.github.johnfactotum.foliate_2.6.4_all.deb
\end{verbatim}
\subsubsection{calibre}\label{calibre}
An EPub Reader
\begin{itemize}
\tightlist
\item
https://calibre-ebook.com
\end{itemize}
\begin{verbatim}
sudo apt install calibre
\end{verbatim}
\section{Editing the Configuration}\label{editing-the-configuration}
\backmatter \backmatter
@ -1186,18 +1206,6 @@ Https://www.uaf.edu/acep/about/our-team/john-haverlack.php.
\bibitem[\citeproctext]{ref-PandocIndex} \bibitem[\citeproctext]{ref-PandocIndex}
\emph{Pandoc - Index}. n.d. Https://pandoc.org/. \emph{Pandoc - Index}. n.d. Https://pandoc.org/.
\bibitem[\citeproctext]{ref-JehaverlackBasicbookbuilderPandoca}
\emph{Jehaverlack/Basic-Book-Builder: {A Pandoc} Workflow for Building
{PDF}, {HTML}, {EPUB}, and {LaTeX} Book Format.} n.d.
Https://github.com/jehaverlack/basic-book-builder.
\bibitem[\citeproctext]{ref-JohnHaverlackACEP}
\emph{John {Haverlack} \textbar{} {ACEP}}. n.d.
Https://www.uaf.edu/acep/about/our-team/john-haverlack.php.
\bibitem[\citeproctext]{ref-PandocIndex}
\emph{Pandoc - Index}. n.d. Https://pandoc.org/.
\end{CSLReferences} \end{CSLReferences}
\backmatter \backmatter

View File

@ -1,57 +1,46 @@
\contentsline {chapter}{\numberline {1}Introduction}{1}{chapter.1}% \contentsline {chapter}{\numberline {1}Introduction}{1}{chapter.1}%
\contentsline {subsection}{\numberline {1.0.1}Workflow}{1}{subsection.1.0.1}%
\contentsline {chapter}{\numberline {2}Getting Started}{2}{chapter.2}% \contentsline {chapter}{\numberline {2}Getting Started}{2}{chapter.2}%
\contentsline {section}{\numberline {2.1}Cloning the Basic Book Builder}{2}{section.2.1}% \contentsline {section}{\numberline {2.1}Clone the Basic Book Builder}{2}{section.2.1}%
\contentsline {section}{\numberline {2.2}Setting Up Build Environment}{2}{section.2.2}% \contentsline {section}{\numberline {2.2}Setting Up Build Environment}{2}{section.2.2}%
\contentsline {section}{\numberline {2.3}Testing}{2}{section.2.3}% \contentsline {subsection}{\numberline {2.2.1}Non deb systems}{2}{subsection.2.2.1}%
\contentsline {section}{\numberline {2.3}Testing}{3}{section.2.3}%
\contentsline {section}{\numberline {2.4}Creating a New Project}{3}{section.2.4}% \contentsline {section}{\numberline {2.4}Creating a New Project}{3}{section.2.4}%
\contentsline {subsection}{\numberline {2.4.1}Zotero Configuration (Optional)}{3}{subsection.2.4.1}% \contentsline {section}{\numberline {2.5}Building}{3}{section.2.5}%
\contentsline {chapter}{\numberline {3}Usage}{4}{chapter.3}% \contentsline {subsection}{\numberline {2.5.1}PDF}{3}{subsection.2.5.1}%
\contentsline {section}{\numberline {3.1}Creating a Project}{4}{section.3.1}% \contentsline {subsection}{\numberline {2.5.2}HTML}{4}{subsection.2.5.2}%
\contentsline {section}{\numberline {3.2}Editing Content}{4}{section.3.2}% \contentsline {subsection}{\numberline {2.5.3}DocX}{4}{subsection.2.5.3}%
\contentsline {section}{\numberline {3.3}Building}{4}{section.3.3}% \contentsline {subsection}{\numberline {2.5.4}ODT}{4}{subsection.2.5.4}%
\contentsline {subsection}{\numberline {3.3.1}PDF}{4}{subsection.3.3.1}% \contentsline {subsection}{\numberline {2.5.5}Make All}{4}{subsection.2.5.5}%
\contentsline {subsection}{\numberline {3.3.2}HTML}{5}{subsection.3.3.2}% \contentsline {chapter}{\numberline {3}Features}{5}{chapter.3}%
\contentsline {subsection}{\numberline {3.3.3}DocX}{5}{subsection.3.3.3}% \contentsline {section}{\numberline {3.1}Metadata}{5}{section.3.1}%
\contentsline {subsection}{\numberline {3.3.4}ODT}{5}{subsection.3.3.4}% \contentsline {section}{\numberline {3.2}Front-matter}{5}{section.3.2}%
\contentsline {subsection}{\numberline {3.3.5}Make All}{5}{subsection.3.3.5}% \contentsline {subsection}{\numberline {3.2.1}Meta Data Page}{5}{subsection.3.2.1}%
\contentsline {chapter}{\numberline {4}Features}{6}{chapter.4}% \contentsline {subsection}{\numberline {3.2.2}Cover Illustration}{5}{subsection.3.2.2}%
\contentsline {section}{\numberline {4.1}Metadata}{6}{section.4.1}% \contentsline {subsection}{\numberline {3.2.3}Dedication}{5}{subsection.3.2.3}%
\contentsline {section}{\numberline {4.2}Front-matter}{6}{section.4.2}% \contentsline {section}{\numberline {3.3}Table of Contents}{6}{section.3.3}%
\contentsline {subsection}{\numberline {4.2.1}Meta Data Page}{6}{subsection.4.2.1}% \contentsline {section}{\numberline {3.4}Chapters}{6}{section.3.4}%
\contentsline {subsection}{\numberline {4.2.2}Cover Illustration}{6}{subsection.4.2.2}% \contentsline {section}{\numberline {3.5}Appendixes}{6}{section.3.5}%
\contentsline {subsection}{\numberline {4.2.3}Dedication}{7}{subsection.4.2.3}% \contentsline {section}{\numberline {3.6}Glossary}{6}{section.3.6}%
\contentsline {section}{\numberline {4.3}Chapters}{7}{section.4.3}% \contentsline {section}{\numberline {3.7}Index}{6}{section.3.7}%
\contentsline {section}{\numberline {4.4}Appendixes}{7}{section.4.4}% \contentsline {subsection}{\numberline {3.7.1}Markdown Indexes}{6}{subsection.3.7.1}%
\contentsline {section}{\numberline {4.5}Glossary}{7}{section.4.5}% \contentsline {section}{\numberline {3.8}Bibliography}{6}{section.3.8}%
\contentsline {section}{\numberline {4.6}Index}{7}{section.4.6}% \contentsline {subsection}{\numberline {3.8.1}Zotero Integration}{6}{subsection.3.8.1}%
\contentsline {subsection}{\numberline {4.6.1}Markdown Indexes}{7}{subsection.4.6.1}% \contentsline {subsection}{\numberline {3.8.2}Obsidian Citations}{6}{subsection.3.8.2}%
\contentsline {section}{\numberline {4.7}Bibliography}{7}{section.4.7}% \contentsline {section}{\numberline {3.9}Images}{7}{section.3.9}%
\contentsline {subsection}{\numberline {4.7.1}Zotero Integration}{7}{subsection.4.7.1}% \contentsline {section}{\numberline {3.10}\emph {LaTeX} Equations}{7}{section.3.10}%
\contentsline {subsection}{\numberline {4.7.2}Obsidian Citations}{8}{subsection.4.7.2}% \contentsline {subsection}{\numberline {3.10.1}Left Justified / Inline}{7}{subsection.3.10.1}%
\contentsline {section}{\numberline {4.8}Mathjax Equations}{8}{section.4.8}% \contentsline {subsection}{\numberline {3.10.2}Centered}{7}{subsection.3.10.2}%
\contentsline {subsection}{\numberline {4.8.1}Left Justified / Inline}{8}{subsection.4.8.1}% \contentsline {section}{\numberline {3.11}Custom Markdown}{8}{section.3.11}%
\contentsline {subsection}{\numberline {4.8.2}Centered}{8}{subsection.4.8.2}% \contentsline {subsection}{\numberline {3.11.1}Call-outs}{8}{subsection.3.11.1}%
\contentsline {section}{\numberline {4.9}Custom Markdown}{8}{section.4.9}% \contentsline {section}{\numberline {3.12}Advanced}{11}{section.3.12}%
\contentsline {subsection}{\numberline {4.9.1}Call-outs}{8}{subsection.4.9.1}% \contentsline {subsection}{\numberline {3.12.1}Changing Fonts}{11}{subsection.3.12.1}%
\contentsline {chapter}{\numberline {A}Appendix A: Build Environment Notes}{12}{appendix.A}% \contentsline {subsection}{\numberline {3.12.2}Adding Filters}{11}{subsection.3.12.2}%
\contentsline {section}{\numberline {A.1}Installing Pre-Requisites}{12}{section.A.1}% \contentsline {chapter}{\numberline {4}Design}{12}{chapter.4}%
\contentsline {subsection}{\numberline {A.1.1}Required}{12}{subsection.A.1.1}% \contentsline {section}{\numberline {4.1}Directory Structure}{12}{section.4.1}%
\contentsline {subsubsection}{\numberline {A.1.1.1}Pandoc}{12}{subsubsection.A.1.1.1}% \contentsline {section}{\numberline {4.2}Configuration Files}{12}{section.4.2}%
\contentsline {subsubsection}{\numberline {A.1.1.2}Code Editor}{12}{subsubsection.A.1.1.2}% \contentsline {subsection}{\numberline {4.2.1}Pandoc Main Config}{13}{subsection.4.2.1}%
\contentsline {subsubsection}{\numberline {A.1.1.3}jq and yq}{12}{subsubsection.A.1.1.3}% \contentsline {section}{\numberline {4.3}Build Workflow}{14}{section.4.3}%
\contentsline {subsubsection}{\numberline {A.1.1.4}texlive}{12}{subsubsection.A.1.1.4}% \contentsline {chapter}{Glossary}{15}{chapter*.2}%
\contentsline {subsubsection}{\numberline {A.1.1.5}MathJax}{13}{subsubsection.A.1.1.5}% \contentsline {chapter}{Index}{17}{chapter*.3}%
\contentsline {subsection}{\numberline {A.1.2}Optional}{13}{subsection.A.1.2}% \contentsline {chapter}{Bibliography}{19}{chapter*.4}%
\contentsline {subsubsection}{\numberline {A.1.2.1}Obsidian}{13}{subsubsection.A.1.2.1}%
\contentsline {subsubsection}{\numberline {A.1.2.2}Zotero}{13}{subsubsection.A.1.2.2}%
\contentsline {paragraph}{\numberline {A.1.2.2.1}Better BibTex for Zotero}{14}{paragraph.A.1.2.2.1}%
\contentsline {paragraph}{\numberline {A.1.2.2.2}Export citations.bib}{14}{paragraph.A.1.2.2.2}%
\contentsline {paragraph}{\numberline {A.1.2.2.3}Zotero Connector Browser Plugin}{14}{paragraph.A.1.2.2.3}%
\contentsline {subsubsection}{\numberline {A.1.2.3}lmodern}{14}{subsubsection.A.1.2.3}%
\contentsline {subsubsection}{\numberline {A.1.2.4}epubcheck}{14}{subsubsection.A.1.2.4}%
\contentsline {subsubsection}{\numberline {A.1.2.5}foliate}{14}{subsubsection.A.1.2.5}%
\contentsline {subsubsection}{\numberline {A.1.2.6}calibre}{14}{subsubsection.A.1.2.6}%
\contentsline {section}{\numberline {A.2}Editing the Configuration}{14}{section.A.2}%
\contentsline {chapter}{Glossary}{15}{appendix*.2}%
\contentsline {chapter}{Index}{17}{appendix*.3}%
\contentsline {chapter}{Bibliography}{19}{appendix*.4}%

Binary file not shown.

Binary file not shown.

View File

@ -1,6 +1,24 @@
# Introduction # Introduction
This is a basic book (or article / document) builder template based on a Pandoc[@PandocIndex]\index{Pandoc} build process in conjunction with a number of other tools to generate PDF, HTML, LaTex, Markdown, ODT, DOCX, and Epub book output formats from a single set Markdown source content , which can optionally be edited as an Obsidian vault. This is a **basic book builder** template is based on a Pandoc[@PandocIndex]\index{Pandoc} + Makefile build process in conjunction Obsidian to edit content and Zotero to manage citation, to generate multiple format of the document including:
- PDF
- HTML
- *LaTeX*
- Markdown
- ODT
- DOCX
- Epub
### Workflow
1. Create a new project
2. Initialize `metadata.yaml` with title, copyright, author, etc.
3. Customize `input-files:` in `pandoc.yaml`
4. Edit `chapters` Markdown "conent" files using Obidian
5. Build your document
This **basic book builder**[@JehaverlackBasicbookbuilderPandoca] template has been curated by John Haverlack.[@JohnHaverlackACEP] This **basic book builder**[@JehaverlackBasicbookbuilderPandoca] template has been curated by John Haverlack.[@JohnHaverlackACEP]

View File

@ -1,6 +1,6 @@
# Getting Started # Getting Started
## Cloning the Basic Book Builder ## Clone the Basic Book Builder
> [!cli] Clone the repository > [!cli] Clone the repository
@ -18,35 +18,99 @@
> [!caution] ~Debian Linux > [!caution] ~Debian Linux
> This script only support Debian based Linux system (Debian, Ubunutu, Zorin, etc) > This script only support Debian based Linux system (e.g Debian, Ubuntu, Zorin). And this script will install several ATP packages on your system.
> This script has not been widely tested across platforms
> [!danger] Warning
This script **has not** been widely tested across many platforms
To initialize your systems build environment run:
> [!cli] Setup Build Environment > [!cli] Setup Build Environment
> ``` > ```
> ./scripts/setup-linux-deb.sh > ./scripts/setup-linux-deb.sh
> ``` > ```
For more information on setting up the build environment for your system see Appendix A. ### Non deb systems
For more information on setting up the build environment for your system see: **TBD: NEEDS DOCUMENTED**.
## Testing ## Testing
Once you have set up your build environment, you test by building the **basic book builder**.
If you can build all format for the **Basic Book Build** then you have a working build environment.
> [!cli] Testing Build Environment > [!cli] Testing Build Environment
> ``` > ```
> make all > make all
> ``` > ```
## Creating a New Project ## Creating a New Project
### Zotero Configuration (Optional) > [!proposed] Tip
> You do not want to edit your new project document in the `basic-book-builder` directory. You will want to create a **new project** for your document based on this template.
> [!cli] Create a new project
> ```
> ./scripts/new-project.sh <NEW_PROJECT_DIR>
> ```
```
cd <NEW_PROJECT_DIR>
```
Update your project configuration:
1. Edit: `metadata.yaml`, for title, author, etc
2. Edit: `templates/pandoc.yaml`
3. Open: `<NEW_PROJECT_DIR>` with Obsidian, and edit `chapters` documents.
4. Build: `make pdf`
> [!warning] Warning
> `<NEW_PROJECT_DIR>` should be outside of the **basic-book-builder** directory
## Building
### PDF
```
make pdf
```
> NOTE: Building the PDF also builds the **LaTeX** version of the book.
### HTML
```
make html
```
### DocX
```
make docx
```
> NOTE: DocX is a work in progress. Frontmatter and formatting need work.
### ODT
```
make odt
```
> NOTE: ODT is a work in progress. Frontmatter and formatting need work.
### Make All
To build all supported formats
```
make all
```

View File

@ -1,4 +1,4 @@
# Usage # Basic Usage
## Creating a Project ## Creating a Project

View File

@ -1,30 +1,27 @@
# Features # Features
The basic book builder template integrates feature from many systems including Pandoc, MathJax, Obsidian, and Zotero. The following list covers these features from a functional point of view.
## Metadata ## Metadata
Metadata for the project is managed in `metadata.yaml`. Edit this file to make global changes to variables for your document. Changes here will propagate to all format builds. Metadata for the project is managed in `metadata.yaml`. Edit this file to make **global changes** to variables for your document. Definitions in `metadata.yaml` will propagate to all format builds.
## Front-matter ## Front-matter
Front matter content is manged in: Front-Matter documents control the Title Page, Metadata and other pages before the Title of Contents. Front matter content is manged in these files:
- `templates/frontmatter.tex` - `templates/frontmatter.tex`
- `templates/frontmatter.html` - `templates/frontmatter.html`
- `templates/frontmatter-md.html` - `templates/frontmatter-md.html`
Unfortunately when you edit one, you need to edit the respective changes to the other front-matter formats.
> [!caution] Tip
Unfortunately when you edit one, you need to edit the respective changes to the other front-matter formats.
### Title Page ### Title Page
Edit the **Front-matter** files to modify the formatting of the Title Page. Edit the **Front-matter** files to modify the formatting of the Title Page. You'll need to modify the HTML / LaTex code.
> [!caution] Tip
> You'll need to modify the HTML / LaTex.
### Meta Data Page ### Meta Data Page
Edit the **Front-matter** files to modify the 2nd page Metadata format. Edit the **Front-matter** files to modify the 2nd page Metadata format and fields to display.
### Cover Illustration ### Cover Illustration
@ -34,15 +31,21 @@ Edit the **Front-matter** files to optionally un-comment the Cover Art Acknowled
### Dedication ### Dedication
Edit the **Front-matter** files to modify un-comment the Book Dedication. Edit the **Front-matter** files to modify un-comment the Book Dedication.
- This is disabled by default - This is disabled by default
## Table of Contents ## Table of Contents
The table of contents is auto generated. But can be disabled in `template\pandoc.yaml` by setting:
- `toc: false`
## Chapters ## Chapters
Chapter Markdown source files are located in the `chapters` directory. Edit the `template\pandoc.yaml` file to control which chapter markdown files are in what order. Chapter Markdown source files are located in the `chapters` directory. To edit which chapter files are included the document:
- Edit the `input-file:` section of the `template\pandoc.yaml`
## Appendixes ## Appendixes
@ -72,22 +75,58 @@ TBD
TBD TBD
## Mathjax Equations ## Images
TBD You can use basic Markdown Images
```
![ACEP](lib/img/ACEPLogo.png)
```
![ACEP](lib/img/ACEPLogo.png)
## *LaTeX* Equations
You can embed LaTeX equations directly in your Markdown pages.
### Left Justified / Inline ### Left Justified / Inline
TBD To left justify *LaTex* surround the code inside single `$`:
> [!code] Left Justified Equation
> ```
> $x = \frac{1}{2}$
> ```
$x = \frac{1}{2}$
> [!code] Inline
> ```
> Or inline, $x = \frac{1}{2}$, in a sentence.
> ```
Or inline, $x = \frac{1}{2}$, in a sentence.
### Centered ### Centered
TBD To center justify *LaTex* surround the code inside double `$$`:
> [!code] Centered Equation
> ```
> $$x = \frac{1}{2}$$
> ```
$$x = \frac{1}{2}$$
## Custom Markdown ## Custom Markdown
TBD
### Call-outs ### Call-outs
A few call-out box styles have been custom added to easily highlight certain types of content. A few call-out box styles have been custom added to easily highlight certain types of content.
@ -118,19 +157,6 @@ Will render:
--- ---
> [!code] Markdown Example
> ```
> [!info] Info Box
> Same as a blue box
> ```
Will render:
> [!info] Info Box
> Same as a blue box
---
> [!code] Markdown Example > [!code] Markdown Example
> ``` > ```
> [!speculative] Purple Call-out Title > [!speculative] Purple Call-out Title
@ -210,7 +236,8 @@ Will render:
> A command line example > A command line example
>''' >'''
>$ ls >$ ls
>build chapters conf filters lib LICENSE.md Makefile metadata.yaml >README.md scripts templates >build chapters conf filters lib LICENSE.md Makefile
>metadata.yaml >README.md scripts templates
> ''' > '''
> ``` > ```
@ -220,10 +247,24 @@ Will render:
> A command line example > A command line example
> ``` > ```
> $ ls > $ ls
> build chapters conf filters lib LICENSE.md Makefile metadata.yaml README.md scripts templates > build chapters conf filters lib LICENSE.md Makefile
> metadata.yaml README.md scripts templates
> ``` > ```
## Advanced
### Changing Fonts
It is possible to change fonts by editing `templates/pandoc.yaml`, and `templates\styles.css`, but you will have to make sure you have the proper font's installed on your system first.
### Adding Filters
Custom filters can be created. This is complicated and typically needs done in 3 places for:
- obsidian
- *LaTeX*
- HTML

View File

@ -2,6 +2,8 @@
## Directory Structure ## Directory Structure
The **basic-book-builder** directory tree.
``` ```
basic-book-builder basic-book-builder
├── build ├── build
@ -30,6 +32,7 @@ basic-book-builder
## Configuration Files ## Configuration Files
The **basic-book-builder** configuration files, scripts, and build files.
``` ```
../basic-book-builder ../basic-book-builder
@ -70,9 +73,11 @@ basic-book-builder
``` ```
> [!caution] About conf
> NEVER: edit file directly in `conf`. They will be overwritten by the build process.
### Metadata ### Metadata
Update the `metadata.yaml` file to globally configure your document title and other metadata. Update the `metadata.yaml` file to globally configure your document title and other metadata. Edit this file to control your document title, author, etc.
### Pandoc Main Config ### Pandoc Main Config
@ -92,46 +97,22 @@ input-files:
- chapters/Glossary.md - chapters/Glossary.md
- chapters/Index.md - chapters/Index.md
- chapters/Bibliography.md - chapters/Bibliography.md
from: markdown+yaml_metadata_block+raw_tex
standalone: true
metadata:
mainfont: "Noto Serif"
sansfont: "Noto Sans"
monofont: "Noto Sans Mono"
# mainfont: "Libertinus Serif"
# sansfont: "Libertinus Sans"
# monofont: "DejaVu Sans Mono"
date: "" # <-- forces maketitle to exist, but blank
link-citations: true
variables:
documentclass: book # options: report, book, article
fontsize: 12pt
geometry:
- margin=1in
toc: true # ✅ Pandoc-recognized variable
toc-depth: 3 # ✅ nested inside variables
toc-title: "Contents" # ✅ controls TOC heading
numbersections: true # ✅ correct key (not number-sections)
colorlinks: true # nice PDF hyperlinks
linkcolor: blue
graphics: true
float: false
figure-latex-placement: H
# suppress-chapter: true
resource-path:
- .
- lib/img
- lib/diag
citeproc: true
bibliography: lib/zotero.bi
``` ```
## Build Workflow ## Build Workflow
TBD For a PDF Build:
```
make pdf
```
will build dependencies on these file:
1. Makefile
2. conf/pandoc.yaml
3. conf/pdf.yaml
4. lib/zotero.bib
5. chapters/*.md
NOTE: the `Makefile` will copy `templates/*.yaml` to `conf/*.yaml`. **Never** edit `conf/*`directly.

View File

@ -60,36 +60,3 @@ To insert a Zotero Citation
- Alt + I (to insert citation) - Alt + I (to insert citation)
- Search for and select citation reference - Search for and select citation reference
## Usage: Building the Book
#### PDF
```
make pdf
```
#### HTML
```
make html
```
#### LaTex
```
make latex
```
#### Markdown
```
make markdown
```
#### EPub
> Note: This ePub configuration still needs tuning.
```
make epub
```

View File

@ -4,5 +4,3 @@
# Bibliography {-} # Bibliography {-}
::: {#refs .references}
:::

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
!function(){"use strict";var t,a,e,o={667:function(t,a){a.q=void 0,a.q="3.2.2"},669:function(t,a,e){var o=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(a,"__esModule",{value:!0}),a.ActionConfiguration=a.ActionMethods=void 0;var n=e(251),i=o(e(193)),r=e(871),u=o(e(360));a.ActionMethods={},a.ActionMethods.Macro=u.default.Macro,a.ActionMethods.Toggle=function(t,a){for(var e,o=[];"\\endtoggle"!==(e=t.GetArgument(a));)o.push(new i.default(e,t.stack.env,t.configuration).mml());t.Push(t.create("node","maction",o,{actiontype:"toggle"}))},a.ActionMethods.Mathtip=function(t,a){var e=t.ParseArg(a),o=t.ParseArg(a);t.Push(t.create("node","maction",[e,o],{actiontype:"tooltip"}))},new r.CommandMap("action-macros",{toggle:"Toggle",mathtip:"Mathtip",texttip:["Macro","\\mathtip{#1}{\\text{#2}}",2]},a.ActionMethods),a.ActionConfiguration=n.Configuration.create("action",{handler:{macro:["action-macros"]}})},955:function(t,a){MathJax._.components.global.isObject,MathJax._.components.global.combineConfig,MathJax._.components.global.combineDefaults,a.r8=MathJax._.components.global.combineWithMathJax,MathJax._.components.global.MathJax},251:function(t,a){Object.defineProperty(a,"__esModule",{value:!0}),a.Configuration=MathJax._.input.tex.Configuration.Configuration,a.ConfigurationHandler=MathJax._.input.tex.Configuration.ConfigurationHandler,a.ParserConfiguration=MathJax._.input.tex.Configuration.ParserConfiguration},871:function(t,a){Object.defineProperty(a,"__esModule",{value:!0}),a.parseResult=MathJax._.input.tex.SymbolMap.parseResult,a.AbstractSymbolMap=MathJax._.input.tex.SymbolMap.AbstractSymbolMap,a.RegExpMap=MathJax._.input.tex.SymbolMap.RegExpMap,a.AbstractParseMap=MathJax._.input.tex.SymbolMap.AbstractParseMap,a.CharacterMap=MathJax._.input.tex.SymbolMap.CharacterMap,a.DelimiterMap=MathJax._.input.tex.SymbolMap.DelimiterMap,a.MacroMap=MathJax._.input.tex.SymbolMap.MacroMap,a.CommandMap=MathJax._.input.tex.SymbolMap.CommandMap,a.EnvironmentMap=MathJax._.input.tex.SymbolMap.EnvironmentMap},193:function(t,a){Object.defineProperty(a,"__esModule",{value:!0}),a.default=MathJax._.input.tex.TexParser.default},360:function(t,a){Object.defineProperty(a,"__esModule",{value:!0}),a.default=MathJax._.input.tex.base.BaseMethods.default}},n={};function i(t){var a=n[t];if(void 0!==a)return a.exports;var e=n[t]={exports:{}};return o[t].call(e.exports,e,e.exports,i),e.exports}t=i(955),a=i(667),e=i(669),MathJax.loader&&MathJax.loader.checkVersion("[tex]/action",a.q,"tex-extension"),(0,t.r8)({_:{input:{tex:{action:{ActionConfiguration:e}}}}})}();

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
!function(){"use strict";var t,a,e,o={667:function(t,a){a.q=void 0,a.q="3.2.2"},133:function(t,a,e){var o=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(a,"__esModule",{value:!0}),a.BboxConfiguration=a.BboxMethods=void 0;var n=e(251),i=e(871),r=o(e(402));a.BboxMethods={},a.BboxMethods.BBox=function(t,a){for(var e,o,n,i=t.GetBrackets(a,""),l=t.ParseArg(a),x=i.split(/,/),M=0,s=x.length;M<s;M++){var c=x[M].trim(),d=c.match(/^(\.\d+|\d+(\.\d*)?)(pt|em|ex|mu|px|in|cm|mm)$/);if(d){if(e)throw new r.default("MultipleBBoxProperty","%1 specified twice in %2","Padding",a);var f=u(d[1]+d[3]);f&&(e={height:"+"+f,depth:"+"+f,lspace:f,width:"+"+2*parseInt(d[1],10)+d[3]})}else if(c.match(/^([a-z0-9]+|\#[0-9a-f]{6}|\#[0-9a-f]{3})$/i)){if(o)throw new r.default("MultipleBBoxProperty","%1 specified twice in %2","Background",a);o=c}else if(c.match(/^[-a-z]+:/i)){if(n)throw new r.default("MultipleBBoxProperty","%1 specified twice in %2","Style",a);n=p(c)}else if(""!==c)throw new r.default("InvalidBBoxProperty",'"%1" doesn\'t look like a color, a padding dimension, or a style',c)}e&&(l=t.create("node","mpadded",[l],e)),(o||n)&&(e={},o&&Object.assign(e,{mathbackground:o}),n&&Object.assign(e,{style:n}),l=t.create("node","mstyle",[l],e)),t.Push(l)};var p=function(t){return t},u=function(t){return t};new i.CommandMap("bbox",{bbox:"BBox"},a.BboxMethods),a.BboxConfiguration=n.Configuration.create("bbox",{handler:{macro:["bbox"]}})},955:function(t,a){MathJax._.components.global.isObject,MathJax._.components.global.combineConfig,MathJax._.components.global.combineDefaults,a.r8=MathJax._.components.global.combineWithMathJax,MathJax._.components.global.MathJax},251:function(t,a){Object.defineProperty(a,"__esModule",{value:!0}),a.Configuration=MathJax._.input.tex.Configuration.Configuration,a.ConfigurationHandler=MathJax._.input.tex.Configuration.ConfigurationHandler,a.ParserConfiguration=MathJax._.input.tex.Configuration.ParserConfiguration},871:function(t,a){Object.defineProperty(a,"__esModule",{value:!0}),a.parseResult=MathJax._.input.tex.SymbolMap.parseResult,a.AbstractSymbolMap=MathJax._.input.tex.SymbolMap.AbstractSymbolMap,a.RegExpMap=MathJax._.input.tex.SymbolMap.RegExpMap,a.AbstractParseMap=MathJax._.input.tex.SymbolMap.AbstractParseMap,a.CharacterMap=MathJax._.input.tex.SymbolMap.CharacterMap,a.DelimiterMap=MathJax._.input.tex.SymbolMap.DelimiterMap,a.MacroMap=MathJax._.input.tex.SymbolMap.MacroMap,a.CommandMap=MathJax._.input.tex.SymbolMap.CommandMap,a.EnvironmentMap=MathJax._.input.tex.SymbolMap.EnvironmentMap},402:function(t,a){Object.defineProperty(a,"__esModule",{value:!0}),a.default=MathJax._.input.tex.TexError.default}},n={};function i(t){var a=n[t];if(void 0!==a)return a.exports;var e=n[t]={exports:{}};return o[t].call(e.exports,e,e.exports,i),e.exports}t=i(955),a=i(667),e=i(133),MathJax.loader&&MathJax.loader.checkVersion("[tex]/bbox",a.q,"tex-extension"),(0,t.r8)({_:{input:{tex:{bbox:{BboxConfiguration:e}}}}})}();

View File

@ -1 +0,0 @@
!function(){"use strict";var t,a,o,e={667:function(t,a){a.q=void 0,a.q="3.2.2"},986:function(t,a,o){var e=this&&this.__values||function(t){var a="function"==typeof Symbol&&Symbol.iterator,o=a&&t[a],e=0;if(o)return o.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&e>=t.length&&(t=void 0),{value:t&&t[e++],done:!t}}};throw new TypeError(a?"Object is not iterable.":"Symbol.iterator is not defined.")},n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(a,"__esModule",{value:!0}),a.BoldsymbolConfiguration=a.rewriteBoldTokens=a.createBoldToken=a.BoldsymbolMethods=void 0;var r=o(251),i=n(o(748)),l=o(108),s=o(871),u=o(348),d={};function x(t,a,o,e){var n=u.NodeFactory.createToken(t,a,o,e);return"mtext"!==a&&t.configuration.parser.stack.env.boldsymbol&&(i.default.setProperty(n,"fixBold",!0),t.configuration.addNode("fixBold",n)),n}function p(t){var a,o;try{for(var n=e(t.data.getList("fixBold")),r=n.next();!r.done;r=n.next()){var s=r.value;if(i.default.getProperty(s,"fixBold")){var u=i.default.getAttribute(s,"mathvariant");null==u?i.default.setAttribute(s,"mathvariant",l.TexConstant.Variant.BOLD):i.default.setAttribute(s,"mathvariant",d[u]||u),i.default.removeProperties(s,"fixBold")}}}catch(t){a={error:t}}finally{try{r&&!r.done&&(o=n.return)&&o.call(n)}finally{if(a)throw a.error}}}d[l.TexConstant.Variant.NORMAL]=l.TexConstant.Variant.BOLD,d[l.TexConstant.Variant.ITALIC]=l.TexConstant.Variant.BOLDITALIC,d[l.TexConstant.Variant.FRAKTUR]=l.TexConstant.Variant.BOLDFRAKTUR,d[l.TexConstant.Variant.SCRIPT]=l.TexConstant.Variant.BOLDSCRIPT,d[l.TexConstant.Variant.SANSSERIF]=l.TexConstant.Variant.BOLDSANSSERIF,d["-tex-calligraphic"]="-tex-bold-calligraphic",d["-tex-oldstyle"]="-tex-bold-oldstyle",d["-tex-mathit"]=l.TexConstant.Variant.BOLDITALIC,a.BoldsymbolMethods={},a.BoldsymbolMethods.Boldsymbol=function(t,a){var o=t.stack.env.boldsymbol;t.stack.env.boldsymbol=!0;var e=t.ParseArg(a);t.stack.env.boldsymbol=o,t.Push(e)},new s.CommandMap("boldsymbol",{boldsymbol:"Boldsymbol"},a.BoldsymbolMethods),a.createBoldToken=x,a.rewriteBoldTokens=p,a.BoldsymbolConfiguration=r.Configuration.create("boldsymbol",{handler:{macro:["boldsymbol"]},nodes:{token:x},postprocessors:[p]})},955:function(t,a){MathJax._.components.global.isObject,MathJax._.components.global.combineConfig,MathJax._.components.global.combineDefaults,a.r8=MathJax._.components.global.combineWithMathJax,MathJax._.components.global.MathJax},251:function(t,a){Object.defineProperty(a,"__esModule",{value:!0}),a.Configuration=MathJax._.input.tex.Configuration.Configuration,a.ConfigurationHandler=MathJax._.input.tex.Configuration.ConfigurationHandler,a.ParserConfiguration=MathJax._.input.tex.Configuration.ParserConfiguration},348:function(t,a){Object.defineProperty(a,"__esModule",{value:!0}),a.NodeFactory=MathJax._.input.tex.NodeFactory.NodeFactory},748:function(t,a){Object.defineProperty(a,"__esModule",{value:!0}),a.default=MathJax._.input.tex.NodeUtil.default},871:function(t,a){Object.defineProperty(a,"__esModule",{value:!0}),a.parseResult=MathJax._.input.tex.SymbolMap.parseResult,a.AbstractSymbolMap=MathJax._.input.tex.SymbolMap.AbstractSymbolMap,a.RegExpMap=MathJax._.input.tex.SymbolMap.RegExpMap,a.AbstractParseMap=MathJax._.input.tex.SymbolMap.AbstractParseMap,a.CharacterMap=MathJax._.input.tex.SymbolMap.CharacterMap,a.DelimiterMap=MathJax._.input.tex.SymbolMap.DelimiterMap,a.MacroMap=MathJax._.input.tex.SymbolMap.MacroMap,a.CommandMap=MathJax._.input.tex.SymbolMap.CommandMap,a.EnvironmentMap=MathJax._.input.tex.SymbolMap.EnvironmentMap},108:function(t,a){Object.defineProperty(a,"__esModule",{value:!0}),a.TexConstant=MathJax._.input.tex.TexConstants.TexConstant}},n={};function r(t){var a=n[t];if(void 0!==a)return a.exports;var o=n[t]={exports:{}};return e[t].call(o.exports,o,o.exports,r),o.exports}t=r(955),a=r(667),o=r(986),MathJax.loader&&MathJax.loader.checkVersion("[tex]/boldsymbol",a.q,"tex-extension"),(0,t.r8)({_:{input:{tex:{boldsymbol:{BoldsymbolConfiguration:o}}}}})}();

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
!function(){"use strict";var t,e,a,n={667:function(t,e){e.q=void 0,e.q="3.2.2"},774:function(t,e,a){var n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.CancelConfiguration=e.CancelMethods=void 0;var o=a(251),i=a(108),r=a(871),c=n(a(398)),l=a(975);e.CancelMethods={},e.CancelMethods.Cancel=function(t,e,a){var n=t.GetBrackets(e,""),o=t.ParseArg(e),i=c.default.keyvalOptions(n,l.ENCLOSE_OPTIONS);i.notation=a,t.Push(t.create("node","menclose",[o],i))},e.CancelMethods.CancelTo=function(t,e){var a=t.GetBrackets(e,""),n=t.ParseArg(e),o=t.ParseArg(e),r=c.default.keyvalOptions(a,l.ENCLOSE_OPTIONS);r.notation=[i.TexConstant.Notation.UPDIAGONALSTRIKE,i.TexConstant.Notation.UPDIAGONALARROW,i.TexConstant.Notation.NORTHEASTARROW].join(" "),n=t.create("node","mpadded",[n],{depth:"-.1em",height:"+.1em",voffset:".1em"}),t.Push(t.create("node","msup",[t.create("node","menclose",[o],r),n]))},new r.CommandMap("cancel",{cancel:["Cancel",i.TexConstant.Notation.UPDIAGONALSTRIKE],bcancel:["Cancel",i.TexConstant.Notation.DOWNDIAGONALSTRIKE],xcancel:["Cancel",i.TexConstant.Notation.UPDIAGONALSTRIKE+" "+i.TexConstant.Notation.DOWNDIAGONALSTRIKE],cancelto:"CancelTo"},e.CancelMethods),e.CancelConfiguration=o.Configuration.create("cancel",{handler:{macro:["cancel"]}})},955:function(t,e){MathJax._.components.global.isObject,MathJax._.components.global.combineConfig,MathJax._.components.global.combineDefaults,e.r8=MathJax._.components.global.combineWithMathJax,MathJax._.components.global.MathJax},251:function(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.Configuration=MathJax._.input.tex.Configuration.Configuration,e.ConfigurationHandler=MathJax._.input.tex.Configuration.ConfigurationHandler,e.ParserConfiguration=MathJax._.input.tex.Configuration.ParserConfiguration},398:function(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=MathJax._.input.tex.ParseUtil.default},871:function(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.parseResult=MathJax._.input.tex.SymbolMap.parseResult,e.AbstractSymbolMap=MathJax._.input.tex.SymbolMap.AbstractSymbolMap,e.RegExpMap=MathJax._.input.tex.SymbolMap.RegExpMap,e.AbstractParseMap=MathJax._.input.tex.SymbolMap.AbstractParseMap,e.CharacterMap=MathJax._.input.tex.SymbolMap.CharacterMap,e.DelimiterMap=MathJax._.input.tex.SymbolMap.DelimiterMap,e.MacroMap=MathJax._.input.tex.SymbolMap.MacroMap,e.CommandMap=MathJax._.input.tex.SymbolMap.CommandMap,e.EnvironmentMap=MathJax._.input.tex.SymbolMap.EnvironmentMap},108:function(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.TexConstant=MathJax._.input.tex.TexConstants.TexConstant},975:function(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.ENCLOSE_OPTIONS=MathJax._.input.tex.enclose.EncloseConfiguration.ENCLOSE_OPTIONS,e.EncloseMethods=MathJax._.input.tex.enclose.EncloseConfiguration.EncloseMethods,e.EncloseConfiguration=MathJax._.input.tex.enclose.EncloseConfiguration.EncloseConfiguration}},o={};function i(t){var e=o[t];if(void 0!==e)return e.exports;var a=o[t]={exports:{}};return n[t].call(a.exports,a,a.exports,i),a.exports}t=i(955),e=i(667),a=i(774),MathJax.loader&&MathJax.loader.checkVersion("[tex]/cancel",e.q,"tex-extension"),(0,t.r8)({_:{input:{tex:{cancel:{CancelConfiguration:a}}}}})}();

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
!function(){"use strict";var e,t,a,n={667:function(e,t){t.q=void 0,t.q="3.2.2"},286:function(e,t,a){var n=this&&this.__values||function(e){var t="function"==typeof Symbol&&Symbol.iterator,a=t&&e[t],n=0;if(a)return a.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.CenternotConfiguration=t.filterCenterOver=void 0;var o=a(251),i=r(a(193)),u=r(a(748)),l=a(871),p=r(a(360));function c(e){var t,a,r=e.data;try{for(var o=n(r.getList("centerOver")),i=o.next();!i.done;i=o.next()){var l=i.value,p=u.default.getTexClass(l.childNodes[0].childNodes[0]);null!==p&&u.default.setProperties(l.parent.parent.parent.parent.parent.parent,{texClass:p})}}catch(e){t={error:e}}finally{try{i&&!i.done&&(a=o.return)&&a.call(o)}finally{if(t)throw t.error}}}new l.CommandMap("centernot",{centerOver:"CenterOver",centernot:["Macro","\\centerOver{#1}{{\u29f8}}",1]},{CenterOver:function(e,t){var a="{"+e.GetArgument(t)+"}",n=e.ParseArg(t),r=new i.default(a,e.stack.env,e.configuration).mml(),o=e.create("node","TeXAtom",[new i.default(a,e.stack.env,e.configuration).mml(),e.create("node","mpadded",[e.create("node","mpadded",[n],{width:0,lspace:"-.5width"}),e.create("node","mphantom",[r])],{width:0,lspace:"-.5width"})]);e.configuration.addNode("centerOver",r),e.Push(o)},Macro:p.default.Macro}),t.filterCenterOver=c,t.CenternotConfiguration=o.Configuration.create("centernot",{handler:{macro:["centernot"]},postprocessors:[c]})},955:function(e,t){MathJax._.components.global.isObject,MathJax._.components.global.combineConfig,MathJax._.components.global.combineDefaults,t.r8=MathJax._.components.global.combineWithMathJax,MathJax._.components.global.MathJax},251:function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.Configuration=MathJax._.input.tex.Configuration.Configuration,t.ConfigurationHandler=MathJax._.input.tex.Configuration.ConfigurationHandler,t.ParserConfiguration=MathJax._.input.tex.Configuration.ParserConfiguration},748:function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default=MathJax._.input.tex.NodeUtil.default},871:function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.parseResult=MathJax._.input.tex.SymbolMap.parseResult,t.AbstractSymbolMap=MathJax._.input.tex.SymbolMap.AbstractSymbolMap,t.RegExpMap=MathJax._.input.tex.SymbolMap.RegExpMap,t.AbstractParseMap=MathJax._.input.tex.SymbolMap.AbstractParseMap,t.CharacterMap=MathJax._.input.tex.SymbolMap.CharacterMap,t.DelimiterMap=MathJax._.input.tex.SymbolMap.DelimiterMap,t.MacroMap=MathJax._.input.tex.SymbolMap.MacroMap,t.CommandMap=MathJax._.input.tex.SymbolMap.CommandMap,t.EnvironmentMap=MathJax._.input.tex.SymbolMap.EnvironmentMap},193:function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default=MathJax._.input.tex.TexParser.default},360:function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default=MathJax._.input.tex.base.BaseMethods.default}},r={};function o(e){var t=r[e];if(void 0!==t)return t.exports;var a=r[e]={exports:{}};return n[e].call(a.exports,a,a.exports,o),a.exports}e=o(955),t=o(667),a=o(286),MathJax.loader&&MathJax.loader.checkVersion("[tex]/centernot",t.q,"tex-extension"),(0,e.r8)({_:{input:{tex:{centernot:{CenternotConfiguration:a}}}}})}();

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
!function(){"use strict";var o,a,t,e={667:function(o,a){a.q=void 0,a.q="3.2.2"},888:function(o,a,t){Object.defineProperty(a,"__esModule",{value:!0}),a.ColorConfiguration=a.ColorV2Methods=void 0;var e=t(871),n=t(251);a.ColorV2Methods={Color:function(o,a){var t=o.GetArgument(a),e=o.stack.env.color;o.stack.env.color=t;var n=o.ParseArg(a);e?o.stack.env.color=e:delete o.stack.env.color;var r=o.create("node","mstyle",[n],{mathcolor:t});o.Push(r)}},new e.CommandMap("colorv2",{color:"Color"},a.ColorV2Methods),a.ColorConfiguration=n.Configuration.create("colorv2",{handler:{macro:["colorv2"]}})},955:function(o,a){MathJax._.components.global.isObject,MathJax._.components.global.combineConfig,MathJax._.components.global.combineDefaults,a.r8=MathJax._.components.global.combineWithMathJax,MathJax._.components.global.MathJax},251:function(o,a){Object.defineProperty(a,"__esModule",{value:!0}),a.Configuration=MathJax._.input.tex.Configuration.Configuration,a.ConfigurationHandler=MathJax._.input.tex.Configuration.ConfigurationHandler,a.ParserConfiguration=MathJax._.input.tex.Configuration.ParserConfiguration},871:function(o,a){Object.defineProperty(a,"__esModule",{value:!0}),a.parseResult=MathJax._.input.tex.SymbolMap.parseResult,a.AbstractSymbolMap=MathJax._.input.tex.SymbolMap.AbstractSymbolMap,a.RegExpMap=MathJax._.input.tex.SymbolMap.RegExpMap,a.AbstractParseMap=MathJax._.input.tex.SymbolMap.AbstractParseMap,a.CharacterMap=MathJax._.input.tex.SymbolMap.CharacterMap,a.DelimiterMap=MathJax._.input.tex.SymbolMap.DelimiterMap,a.MacroMap=MathJax._.input.tex.SymbolMap.MacroMap,a.CommandMap=MathJax._.input.tex.SymbolMap.CommandMap,a.EnvironmentMap=MathJax._.input.tex.SymbolMap.EnvironmentMap}},n={};function r(o){var a=n[o];if(void 0!==a)return a.exports;var t=n[o]={exports:{}};return e[o](t,t.exports,r),t.exports}o=r(955),a=r(667),t=r(888),MathJax.loader&&MathJax.loader.checkVersion("[tex]/colorv2",a.q,"tex-extension"),(0,o.r8)({_:{input:{tex:{colorv2:{ColorV2Configuration:t}}}}})}();

View File

@ -1 +0,0 @@
!function(){"use strict";var t,a,e,n={667:function(t,a){a.q=void 0,a.q="3.2.2"},359:function(t,a,e){var n,o=this&&this.__values||function(t){var a="function"==typeof Symbol&&Symbol.iterator,e=a&&t[a],n=0;if(e)return e.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(a?"Object is not iterable.":"Symbol.iterator is not defined.")},i=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(a,"__esModule",{value:!0}),a.ConfigMacrosConfiguration=void 0;var r=e(251),p=e(74),l=e(871),s=i(e(945)),u=e(924),c=i(e(432)),M=e(975),x="configmacros-map",f="configmacros-env-map";a.ConfigMacrosConfiguration=r.Configuration.create("configmacros",{init:function(t){new l.CommandMap(x,{},{}),new l.EnvironmentMap(f,s.default.environment,{},{}),t.append(r.Configuration.local({handler:{macro:[x],environment:[f]},priority:3}))},config:function(t,a){!function(t){var a,e,n=t.parseOptions.handlers.retrieve(x),i=t.parseOptions.options.macros;try{for(var r=o(Object.keys(i)),p=r.next();!p.done;p=r.next()){var l=p.value,s="string"==typeof i[l]?[i[l]]:i[l],M=Array.isArray(s[2])?new u.Macro(l,c.default.MacroWithTemplate,s.slice(0,2).concat(s[2])):new u.Macro(l,c.default.Macro,s);n.add(l,M)}}catch(t){a={error:t}}finally{try{p&&!p.done&&(e=r.return)&&e.call(r)}finally{if(a)throw a.error}}}(a),function(t){var a,e,n=t.parseOptions.handlers.retrieve(f),i=t.parseOptions.options.environments;try{for(var r=o(Object.keys(i)),p=r.next();!p.done;p=r.next()){var l=p.value;n.add(l,new u.Macro(l,c.default.BeginEnv,[!0].concat(i[l])))}}catch(t){a={error:t}}finally{try{p&&!p.done&&(e=r.return)&&e.call(r)}finally{if(a)throw a.error}}}(a)},items:(n={},n[M.BeginEnvItem.prototype.kind]=M.BeginEnvItem,n),options:{macros:(0,p.expandable)({}),environments:(0,p.expandable)({})}})},955:function(t,a){MathJax._.components.global.isObject,MathJax._.components.global.combineConfig,MathJax._.components.global.combineDefaults,a.r8=MathJax._.components.global.combineWithMathJax,MathJax._.components.global.MathJax},74:function(t,a){Object.defineProperty(a,"__esModule",{value:!0}),a.isObject=MathJax._.util.Options.isObject,a.APPEND=MathJax._.util.Options.APPEND,a.REMOVE=MathJax._.util.Options.REMOVE,a.OPTIONS=MathJax._.util.Options.OPTIONS,a.Expandable=MathJax._.util.Options.Expandable,a.expandable=MathJax._.util.Options.expandable,a.makeArray=MathJax._.util.Options.makeArray,a.keys=MathJax._.util.Options.keys,a.copy=MathJax._.util.Options.copy,a.insert=MathJax._.util.Options.insert,a.defaultOptions=MathJax._.util.Options.defaultOptions,a.userOptions=MathJax._.util.Options.userOptions,a.selectOptions=MathJax._.util.Options.selectOptions,a.selectOptionsFromKeys=MathJax._.util.Options.selectOptionsFromKeys,a.separateOptions=MathJax._.util.Options.separateOptions,a.lookup=MathJax._.util.Options.lookup},251:function(t,a){Object.defineProperty(a,"__esModule",{value:!0}),a.Configuration=MathJax._.input.tex.Configuration.Configuration,a.ConfigurationHandler=MathJax._.input.tex.Configuration.ConfigurationHandler,a.ParserConfiguration=MathJax._.input.tex.Configuration.ParserConfiguration},945:function(t,a){Object.defineProperty(a,"__esModule",{value:!0}),a.default=MathJax._.input.tex.ParseMethods.default},924:function(t,a){Object.defineProperty(a,"__esModule",{value:!0}),a.Symbol=MathJax._.input.tex.Symbol.Symbol,a.Macro=MathJax._.input.tex.Symbol.Macro},871:function(t,a){Object.defineProperty(a,"__esModule",{value:!0}),a.parseResult=MathJax._.input.tex.SymbolMap.parseResult,a.AbstractSymbolMap=MathJax._.input.tex.SymbolMap.AbstractSymbolMap,a.RegExpMap=MathJax._.input.tex.SymbolMap.RegExpMap,a.AbstractParseMap=MathJax._.input.tex.SymbolMap.AbstractParseMap,a.CharacterMap=MathJax._.input.tex.SymbolMap.CharacterMap,a.DelimiterMap=MathJax._.input.tex.SymbolMap.DelimiterMap,a.MacroMap=MathJax._.input.tex.SymbolMap.MacroMap,a.CommandMap=MathJax._.input.tex.SymbolMap.CommandMap,a.EnvironmentMap=MathJax._.input.tex.SymbolMap.EnvironmentMap},975:function(t,a){Object.defineProperty(a,"__esModule",{value:!0}),a.BeginEnvItem=MathJax._.input.tex.newcommand.NewcommandItems.BeginEnvItem},432:function(t,a){Object.defineProperty(a,"__esModule",{value:!0}),a.default=MathJax._.input.tex.newcommand.NewcommandMethods.default}},o={};function i(t){var a=o[t];if(void 0!==a)return a.exports;var e=o[t]={exports:{}};return n[t].call(e.exports,e,e.exports,i),e.exports}t=i(955),a=i(667),e=i(359),MathJax.loader&&MathJax.loader.checkVersion("[tex]/configmacros",a.q,"tex-extension"),(0,t.r8)({_:{input:{tex:{configmacros:{ConfigMacrosConfiguration:e}}}}})}();

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
!function(){"use strict";var a,t,e,o={667:function(a,t){t.q=void 0,t.q="3.2.2"},272:function(a,t,e){var o=this&&this.__importDefault||function(a){return a&&a.__esModule?a:{default:a}};Object.defineProperty(t,"__esModule",{value:!0}),t.EncloseConfiguration=t.EncloseMethods=t.ENCLOSE_OPTIONS=void 0;var n=e(251),r=e(871),i=o(e(398));t.ENCLOSE_OPTIONS={"data-arrowhead":1,color:1,mathcolor:1,background:1,mathbackground:1,"data-padding":1,"data-thickness":1},t.EncloseMethods={},t.EncloseMethods.Enclose=function(a,e){var o=a.GetArgument(e).replace(/,/g," "),n=a.GetBrackets(e,""),r=a.ParseArg(e),l=i.default.keyvalOptions(n,t.ENCLOSE_OPTIONS);l.notation=o,a.Push(a.create("node","menclose",[r],l))},new r.CommandMap("enclose",{enclose:"Enclose"},t.EncloseMethods),t.EncloseConfiguration=n.Configuration.create("enclose",{handler:{macro:["enclose"]}})},955:function(a,t){MathJax._.components.global.isObject,MathJax._.components.global.combineConfig,MathJax._.components.global.combineDefaults,t.r8=MathJax._.components.global.combineWithMathJax,MathJax._.components.global.MathJax},251:function(a,t){Object.defineProperty(t,"__esModule",{value:!0}),t.Configuration=MathJax._.input.tex.Configuration.Configuration,t.ConfigurationHandler=MathJax._.input.tex.Configuration.ConfigurationHandler,t.ParserConfiguration=MathJax._.input.tex.Configuration.ParserConfiguration},398:function(a,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default=MathJax._.input.tex.ParseUtil.default},871:function(a,t){Object.defineProperty(t,"__esModule",{value:!0}),t.parseResult=MathJax._.input.tex.SymbolMap.parseResult,t.AbstractSymbolMap=MathJax._.input.tex.SymbolMap.AbstractSymbolMap,t.RegExpMap=MathJax._.input.tex.SymbolMap.RegExpMap,t.AbstractParseMap=MathJax._.input.tex.SymbolMap.AbstractParseMap,t.CharacterMap=MathJax._.input.tex.SymbolMap.CharacterMap,t.DelimiterMap=MathJax._.input.tex.SymbolMap.DelimiterMap,t.MacroMap=MathJax._.input.tex.SymbolMap.MacroMap,t.CommandMap=MathJax._.input.tex.SymbolMap.CommandMap,t.EnvironmentMap=MathJax._.input.tex.SymbolMap.EnvironmentMap}},n={};function r(a){var t=n[a];if(void 0!==t)return t.exports;var e=n[a]={exports:{}};return o[a].call(e.exports,e,e.exports,r),e.exports}a=r(955),t=r(667),e=r(272),MathJax.loader&&MathJax.loader.checkVersion("[tex]/enclose",t.q,"tex-extension"),(0,a.r8)({_:{input:{tex:{enclose:{EncloseConfiguration:e}}}}})}();

View File

@ -1 +0,0 @@
!function(){"use strict";var t,e,a,o={667:function(t,e){e.q=void 0,e.q="3.2.2"},646:function(t,e,a){var o=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.ExtpfeilConfiguration=e.ExtpfeilMethods=void 0;var n=a(251),r=a(871),i=a(939),u=o(a(892)),x=a(417),p=o(a(402));e.ExtpfeilMethods={},e.ExtpfeilMethods.xArrow=i.AmsMethods.xArrow,e.ExtpfeilMethods.NewExtArrow=function(t,a){var o=t.GetArgument(a),n=t.GetArgument(a),r=t.GetArgument(a);if(!o.match(/^\\([a-z]+|.)$/i))throw new p.default("NewextarrowArg1","First argument to %1 must be a control sequence name",a);if(!n.match(/^(\d+),(\d+)$/))throw new p.default("NewextarrowArg2","Second argument to %1 must be two integers separated by a comma",a);if(!r.match(/^(\d+|0x[0-9A-F]+)$/i))throw new p.default("NewextarrowArg3","Third argument to %1 must be a unicode character number",a);o=o.substr(1);var i=n.split(",");u.default.addMacro(t,o,e.ExtpfeilMethods.xArrow,[parseInt(r),parseInt(i[0]),parseInt(i[1])])},new r.CommandMap("extpfeil",{xtwoheadrightarrow:["xArrow",8608,12,16],xtwoheadleftarrow:["xArrow",8606,17,13],xmapsto:["xArrow",8614,6,7],xlongequal:["xArrow",61,7,7],xtofrom:["xArrow",8644,12,12],Newextarrow:"NewExtArrow"},e.ExtpfeilMethods);e.ExtpfeilConfiguration=n.Configuration.create("extpfeil",{handler:{macro:["extpfeil"]},init:function(t){x.NewcommandConfiguration.init(t)}})},955:function(t,e){MathJax._.components.global.isObject,MathJax._.components.global.combineConfig,MathJax._.components.global.combineDefaults,e.r8=MathJax._.components.global.combineWithMathJax,MathJax._.components.global.MathJax},251:function(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.Configuration=MathJax._.input.tex.Configuration.Configuration,e.ConfigurationHandler=MathJax._.input.tex.Configuration.ConfigurationHandler,e.ParserConfiguration=MathJax._.input.tex.Configuration.ParserConfiguration},871:function(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.parseResult=MathJax._.input.tex.SymbolMap.parseResult,e.AbstractSymbolMap=MathJax._.input.tex.SymbolMap.AbstractSymbolMap,e.RegExpMap=MathJax._.input.tex.SymbolMap.RegExpMap,e.AbstractParseMap=MathJax._.input.tex.SymbolMap.AbstractParseMap,e.CharacterMap=MathJax._.input.tex.SymbolMap.CharacterMap,e.DelimiterMap=MathJax._.input.tex.SymbolMap.DelimiterMap,e.MacroMap=MathJax._.input.tex.SymbolMap.MacroMap,e.CommandMap=MathJax._.input.tex.SymbolMap.CommandMap,e.EnvironmentMap=MathJax._.input.tex.SymbolMap.EnvironmentMap},402:function(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=MathJax._.input.tex.TexError.default},939:function(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.AmsMethods=MathJax._.input.tex.ams.AmsMethods.AmsMethods,e.NEW_OPS=MathJax._.input.tex.ams.AmsMethods.NEW_OPS},417:function(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.NewcommandConfiguration=MathJax._.input.tex.newcommand.NewcommandConfiguration.NewcommandConfiguration},892:function(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=MathJax._.input.tex.newcommand.NewcommandUtil.default}},n={};function r(t){var e=n[t];if(void 0!==e)return e.exports;var a=n[t]={exports:{}};return o[t].call(a.exports,a,a.exports,r),a.exports}t=r(955),e=r(667),a=r(646),MathJax.loader&&MathJax.loader.checkVersion("[tex]/extpfeil",e.q,"tex-extension"),(0,t.r8)({_:{input:{tex:{extpfeil:{ExtpfeilConfiguration:a}}}}})}();

View File

@ -1 +0,0 @@
!function(){"use strict";var a,t,n,e={667:function(a,t){t.q=void 0,t.q="3.2.2"},82:function(a,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.GensymbConfiguration=void 0;var e=n(251),o=n(108);new(n(871).CharacterMap)("gensymb-symbols",(function(a,t){var n=t.attributes||{};n.mathvariant=o.TexConstant.Variant.NORMAL,n.class="MathML-Unit";var e=a.create("token","mi",n,t.char);a.Push(e)}),{ohm:"\u2126",degree:"\xb0",celsius:"\u2103",perthousand:"\u2030",micro:"\xb5"}),t.GensymbConfiguration=e.Configuration.create("gensymb",{handler:{macro:["gensymb-symbols"]}})},955:function(a,t){MathJax._.components.global.isObject,MathJax._.components.global.combineConfig,MathJax._.components.global.combineDefaults,t.r8=MathJax._.components.global.combineWithMathJax,MathJax._.components.global.MathJax},251:function(a,t){Object.defineProperty(t,"__esModule",{value:!0}),t.Configuration=MathJax._.input.tex.Configuration.Configuration,t.ConfigurationHandler=MathJax._.input.tex.Configuration.ConfigurationHandler,t.ParserConfiguration=MathJax._.input.tex.Configuration.ParserConfiguration},871:function(a,t){Object.defineProperty(t,"__esModule",{value:!0}),t.parseResult=MathJax._.input.tex.SymbolMap.parseResult,t.AbstractSymbolMap=MathJax._.input.tex.SymbolMap.AbstractSymbolMap,t.RegExpMap=MathJax._.input.tex.SymbolMap.RegExpMap,t.AbstractParseMap=MathJax._.input.tex.SymbolMap.AbstractParseMap,t.CharacterMap=MathJax._.input.tex.SymbolMap.CharacterMap,t.DelimiterMap=MathJax._.input.tex.SymbolMap.DelimiterMap,t.MacroMap=MathJax._.input.tex.SymbolMap.MacroMap,t.CommandMap=MathJax._.input.tex.SymbolMap.CommandMap,t.EnvironmentMap=MathJax._.input.tex.SymbolMap.EnvironmentMap},108:function(a,t){Object.defineProperty(t,"__esModule",{value:!0}),t.TexConstant=MathJax._.input.tex.TexConstants.TexConstant}},o={};function i(a){var t=o[a];if(void 0!==t)return t.exports;var n=o[a]={exports:{}};return e[a](n,n.exports,i),n.exports}a=i(955),t=i(667),n=i(82),MathJax.loader&&MathJax.loader.checkVersion("[tex]/gensymb",t.q,"tex-extension"),(0,a.r8)({_:{input:{tex:{gensymb:{GensymbConfiguration:n}}}}})}();

View File

@ -1 +0,0 @@
!function(){"use strict";var t,e,a,n,r={667:function(t,e){e.q=void 0,e.q="3.2.2"},738:function(t,e,a){var n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.HtmlConfiguration=void 0;var r=a(251),o=a(871),i=n(a(248));new o.CommandMap("html_macros",{href:"Href",class:"Class",style:"Style",cssId:"Id"},i.default),e.HtmlConfiguration=r.Configuration.create("html",{handler:{macro:["html_macros"]}})},248:function(t,e,a){var n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var r=n(a(748)),o={Href:function(t,e){var a=t.GetArgument(e),n=i(t,e);r.default.setAttribute(n,"href",a),t.Push(n)},Class:function(t,e){var a=t.GetArgument(e),n=i(t,e),o=r.default.getAttribute(n,"class");o&&(a=o+" "+a),r.default.setAttribute(n,"class",a),t.Push(n)},Style:function(t,e){var a=t.GetArgument(e),n=i(t,e),o=r.default.getAttribute(n,"style");o&&(";"!==a.charAt(a.length-1)&&(a+=";"),a=o+" "+a),r.default.setAttribute(n,"style",a),t.Push(n)},Id:function(t,e){var a=t.GetArgument(e),n=i(t,e);r.default.setAttribute(n,"id",a),t.Push(n)}},i=function(t,e){var a=t.ParseArg(e);if(!r.default.isInferred(a))return a;var n=r.default.getChildren(a);if(1===n.length)return n[0];var o=t.create("node","mrow");return r.default.copyChildren(a,o),r.default.copyAttributes(a,o),o};e.default=o},955:function(t,e){MathJax._.components.global.isObject,MathJax._.components.global.combineConfig,MathJax._.components.global.combineDefaults,e.r8=MathJax._.components.global.combineWithMathJax,MathJax._.components.global.MathJax},251:function(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.Configuration=MathJax._.input.tex.Configuration.Configuration,e.ConfigurationHandler=MathJax._.input.tex.Configuration.ConfigurationHandler,e.ParserConfiguration=MathJax._.input.tex.Configuration.ParserConfiguration},748:function(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=MathJax._.input.tex.NodeUtil.default},871:function(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.parseResult=MathJax._.input.tex.SymbolMap.parseResult,e.AbstractSymbolMap=MathJax._.input.tex.SymbolMap.AbstractSymbolMap,e.RegExpMap=MathJax._.input.tex.SymbolMap.RegExpMap,e.AbstractParseMap=MathJax._.input.tex.SymbolMap.AbstractParseMap,e.CharacterMap=MathJax._.input.tex.SymbolMap.CharacterMap,e.DelimiterMap=MathJax._.input.tex.SymbolMap.DelimiterMap,e.MacroMap=MathJax._.input.tex.SymbolMap.MacroMap,e.CommandMap=MathJax._.input.tex.SymbolMap.CommandMap,e.EnvironmentMap=MathJax._.input.tex.SymbolMap.EnvironmentMap}},o={};function i(t){var e=o[t];if(void 0!==e)return e.exports;var a=o[t]={exports:{}};return r[t].call(a.exports,a,a.exports,i),a.exports}t=i(955),e=i(667),a=i(738),n=i(248),MathJax.loader&&MathJax.loader.checkVersion("[tex]/html",e.q,"tex-extension"),(0,t.r8)({_:{input:{tex:{html:{HtmlConfiguration:a,HtmlMethods:n}}}}})}();

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
!function(){"use strict";var o,n,r,t={667:function(o,n){n.q=void 0,n.q="3.2.2"},634:function(o,n,r){Object.defineProperty(n,"__esModule",{value:!0}),n.NoErrorsConfiguration=void 0;var t=r(251);n.NoErrorsConfiguration=t.Configuration.create("noerrors",{nodes:{error:function(o,n,r,t){var e=o.create("token","mtext",{},t.replace(/\n/g," "));return o.create("node","merror",[e],{"data-mjx-error":n,title:n})}}})},955:function(o,n){MathJax._.components.global.isObject,MathJax._.components.global.combineConfig,MathJax._.components.global.combineDefaults,n.r8=MathJax._.components.global.combineWithMathJax,MathJax._.components.global.MathJax},251:function(o,n){Object.defineProperty(n,"__esModule",{value:!0}),n.Configuration=MathJax._.input.tex.Configuration.Configuration,n.ConfigurationHandler=MathJax._.input.tex.Configuration.ConfigurationHandler,n.ParserConfiguration=MathJax._.input.tex.Configuration.ParserConfiguration}},e={};function a(o){var n=e[o];if(void 0!==n)return n.exports;var r=e[o]={exports:{}};return t[o](r,r.exports,a),r.exports}o=a(955),n=a(667),r=a(634),MathJax.loader&&MathJax.loader.checkVersion("[tex]/noerrors",n.q,"tex-extension"),(0,o.r8)({_:{input:{tex:{noerrors:{NoErrorsConfiguration:r}}}}})}();

View File

@ -1 +0,0 @@
!function(){"use strict";var n,o,e,t={667:function(n,o){o.q=void 0,o.q="3.2.2"},999:function(n,o,e){var t=this&&this.__values||function(n){var o="function"==typeof Symbol&&Symbol.iterator,e=o&&n[o],t=0;if(e)return e.call(n);if(n&&"number"==typeof n.length)return{next:function(){return n&&t>=n.length&&(n=void 0),{value:n&&n[t++],done:!n}}};throw new TypeError(o?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(o,"__esModule",{value:!0}),o.NoUndefinedConfiguration=void 0;var r=e(251);o.NoUndefinedConfiguration=r.Configuration.create("noundefined",{fallback:{macro:function(n,o){var e,r,i=n.create("text","\\"+o),a=n.options.noundefined||{},u={};try{for(var f=t(["color","background","size"]),l=f.next();!l.done;l=f.next()){var c=l.value;a[c]&&(u["math"+c]=a[c])}}catch(n){e={error:n}}finally{try{l&&!l.done&&(r=f.return)&&r.call(f)}finally{if(e)throw e.error}}n.Push(n.create("node","mtext",[],u,i))}},options:{noundefined:{color:"red",background:"",size:""}},priority:3})},955:function(n,o){MathJax._.components.global.isObject,MathJax._.components.global.combineConfig,MathJax._.components.global.combineDefaults,o.r8=MathJax._.components.global.combineWithMathJax,MathJax._.components.global.MathJax},251:function(n,o){Object.defineProperty(o,"__esModule",{value:!0}),o.Configuration=MathJax._.input.tex.Configuration.Configuration,o.ConfigurationHandler=MathJax._.input.tex.Configuration.ConfigurationHandler,o.ParserConfiguration=MathJax._.input.tex.Configuration.ParserConfiguration}},r={};function i(n){var o=r[n];if(void 0!==o)return o.exports;var e=r[n]={exports:{}};return t[n].call(e.exports,e,e.exports,i),e.exports}n=i(955),o=i(667),e=i(999),MathJax.loader&&MathJax.loader.checkVersion("[tex]/noundefined",o.q,"tex-extension"),(0,n.r8)({_:{input:{tex:{noundefined:{NoUndefinedConfiguration:e}}}}})}();

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
!function(){"use strict";var t,o,n,a={667:function(t,o){o.q=void 0,o.q="3.2.2"},941:function(t,o,n){var a,r=this&&this.__extends||(a=function(t,o){return a=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,o){t.__proto__=o}||function(t,o){for(var n in o)Object.prototype.hasOwnProperty.call(o,n)&&(t[n]=o[n])},a(t,o)},function(t,o){if("function"!=typeof o&&null!==o)throw new TypeError("Class extends value "+String(o)+" is not a constructor or null");function n(){this.constructor=t}a(t,o),t.prototype=null===o?Object.create(o):(n.prototype=o.prototype,new n)});Object.defineProperty(o,"__esModule",{value:!0}),o.TagFormatConfiguration=o.tagformatConfig=void 0;var e=n(251),i=n(680),s=0;function u(t,o){var n=o.parseOptions.options.tags;"base"!==n&&t.tags.hasOwnProperty(n)&&i.TagsFactory.add(n,t.tags[n]);var a=function(t){function n(){return null!==t&&t.apply(this,arguments)||this}return r(n,t),n.prototype.formatNumber=function(t){return o.parseOptions.options.tagformat.number(t)},n.prototype.formatTag=function(t){return o.parseOptions.options.tagformat.tag(t)},n.prototype.formatId=function(t){return o.parseOptions.options.tagformat.id(t)},n.prototype.formatUrl=function(t,n){return o.parseOptions.options.tagformat.url(t,n)},n}(i.TagsFactory.create(o.parseOptions.options.tags).constructor),e="configTags-"+ ++s;i.TagsFactory.add(e,a),o.parseOptions.options.tags=e}o.tagformatConfig=u,o.TagFormatConfiguration=e.Configuration.create("tagformat",{config:[u,10],options:{tagformat:{number:function(t){return t.toString()},tag:function(t){return"("+t+")"},id:function(t){return"mjx-eqn:"+t.replace(/\s/g,"_")},url:function(t,o){return o+"#"+encodeURIComponent(t)}}}})},955:function(t,o){MathJax._.components.global.isObject,MathJax._.components.global.combineConfig,MathJax._.components.global.combineDefaults,o.r8=MathJax._.components.global.combineWithMathJax,MathJax._.components.global.MathJax},251:function(t,o){Object.defineProperty(o,"__esModule",{value:!0}),o.Configuration=MathJax._.input.tex.Configuration.Configuration,o.ConfigurationHandler=MathJax._.input.tex.Configuration.ConfigurationHandler,o.ParserConfiguration=MathJax._.input.tex.Configuration.ParserConfiguration},680:function(t,o){Object.defineProperty(o,"__esModule",{value:!0}),o.Label=MathJax._.input.tex.Tags.Label,o.TagInfo=MathJax._.input.tex.Tags.TagInfo,o.AbstractTags=MathJax._.input.tex.Tags.AbstractTags,o.NoTags=MathJax._.input.tex.Tags.NoTags,o.AllTags=MathJax._.input.tex.Tags.AllTags,o.TagsFactory=MathJax._.input.tex.Tags.TagsFactory}},r={};function e(t){var o=r[t];if(void 0!==o)return o.exports;var n=r[t]={exports:{}};return a[t].call(n.exports,n,n.exports,e),n.exports}t=e(955),o=e(667),n=e(941),MathJax.loader&&MathJax.loader.checkVersion("[tex]/tagformat",o.q,"tex-extension"),(0,t.r8)({_:{input:{tex:{tagformat:{TagFormatConfiguration:n}}}}})}();

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
!function(){"use strict";var t,e,a,n={667:function(t,e){e.q=void 0,e.q="3.2.2"},376:function(t,e,a){var n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.UnicodeConfiguration=e.UnicodeMethods=void 0;var o=a(251),i=n(a(402)),r=a(871),u=n(a(398)),l=n(a(748)),c=a(992);e.UnicodeMethods={};var p={};e.UnicodeMethods.Unicode=function(t,e){var a=t.GetBrackets(e),n=null,o=null;a&&(a.replace(/ /g,"").match(/^(\d+(\.\d*)?|\.\d+),(\d+(\.\d*)?|\.\d+)$/)?(n=a.replace(/ /g,"").split(/,/),o=t.GetBrackets(e)):o=a);var r=u.default.trimSpaces(t.GetArgument(e)).replace(/^0x/,"x");if(!r.match(/^(x[0-9A-Fa-f]+|[0-9]+)$/))throw new i.default("BadUnicode","Argument to \\unicode must be a number");var d=parseInt(r.match(/^x/)?"0"+r:r);p[d]?o||(o=p[d][2]):p[d]=[800,200,o,d],n&&(p[d][0]=Math.floor(1e3*parseFloat(n[0])),p[d][1]=Math.floor(1e3*parseFloat(n[1])));var M=t.stack.env.font,s={};o?(p[d][2]=s.fontfamily=o.replace(/'/g,"'"),M&&(M.match(/bold/)&&(s.fontweight="bold"),M.match(/italic|-mathit/)&&(s.fontstyle="italic"))):M&&(s.mathvariant=M);var x=t.create("token","mtext",s,(0,c.numeric)(r));l.default.setProperty(x,"unicode",!0),t.Push(x)},new r.CommandMap("unicode",{unicode:"Unicode"},e.UnicodeMethods),e.UnicodeConfiguration=o.Configuration.create("unicode",{handler:{macro:["unicode"]}})},955:function(t,e){MathJax._.components.global.isObject,MathJax._.components.global.combineConfig,MathJax._.components.global.combineDefaults,e.r8=MathJax._.components.global.combineWithMathJax,MathJax._.components.global.MathJax},992:function(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.options=MathJax._.util.Entities.options,e.entities=MathJax._.util.Entities.entities,e.add=MathJax._.util.Entities.add,e.remove=MathJax._.util.Entities.remove,e.translate=MathJax._.util.Entities.translate,e.numeric=MathJax._.util.Entities.numeric},251:function(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.Configuration=MathJax._.input.tex.Configuration.Configuration,e.ConfigurationHandler=MathJax._.input.tex.Configuration.ConfigurationHandler,e.ParserConfiguration=MathJax._.input.tex.Configuration.ParserConfiguration},748:function(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=MathJax._.input.tex.NodeUtil.default},398:function(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=MathJax._.input.tex.ParseUtil.default},871:function(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.parseResult=MathJax._.input.tex.SymbolMap.parseResult,e.AbstractSymbolMap=MathJax._.input.tex.SymbolMap.AbstractSymbolMap,e.RegExpMap=MathJax._.input.tex.SymbolMap.RegExpMap,e.AbstractParseMap=MathJax._.input.tex.SymbolMap.AbstractParseMap,e.CharacterMap=MathJax._.input.tex.SymbolMap.CharacterMap,e.DelimiterMap=MathJax._.input.tex.SymbolMap.DelimiterMap,e.MacroMap=MathJax._.input.tex.SymbolMap.MacroMap,e.CommandMap=MathJax._.input.tex.SymbolMap.CommandMap,e.EnvironmentMap=MathJax._.input.tex.SymbolMap.EnvironmentMap},402:function(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=MathJax._.input.tex.TexError.default}},o={};function i(t){var e=o[t];if(void 0!==e)return e.exports;var a=o[t]={exports:{}};return n[t].call(a.exports,a,a.exports,i),a.exports}t=i(955),e=i(667),a=i(376),MathJax.loader&&MathJax.loader.checkVersion("[tex]/unicode",e.q,"tex-extension"),(0,t.r8)({_:{input:{tex:{unicode:{UnicodeConfiguration:a}}}}})}();

View File

@ -1 +0,0 @@
!function(){"use strict";var a,t,e,p={667:function(a,t){t.q=void 0,t.q="3.2.2"},927:function(a,t,e){Object.defineProperty(t,"__esModule",{value:!0}),t.UpgreekConfiguration=void 0;var p=e(251),n=e(871),o=e(108);new n.CharacterMap("upgreek",(function(a,t){var e=t.attributes||{};e.mathvariant=o.TexConstant.Variant.NORMAL;var p=a.create("token","mi",e,t.char);a.Push(p)}),{upalpha:"\u03b1",upbeta:"\u03b2",upgamma:"\u03b3",updelta:"\u03b4",upepsilon:"\u03f5",upzeta:"\u03b6",upeta:"\u03b7",uptheta:"\u03b8",upiota:"\u03b9",upkappa:"\u03ba",uplambda:"\u03bb",upmu:"\u03bc",upnu:"\u03bd",upxi:"\u03be",upomicron:"\u03bf",uppi:"\u03c0",uprho:"\u03c1",upsigma:"\u03c3",uptau:"\u03c4",upupsilon:"\u03c5",upphi:"\u03d5",upchi:"\u03c7",uppsi:"\u03c8",upomega:"\u03c9",upvarepsilon:"\u03b5",upvartheta:"\u03d1",upvarpi:"\u03d6",upvarrho:"\u03f1",upvarsigma:"\u03c2",upvarphi:"\u03c6",Upgamma:"\u0393",Updelta:"\u0394",Uptheta:"\u0398",Uplambda:"\u039b",Upxi:"\u039e",Uppi:"\u03a0",Upsigma:"\u03a3",Upupsilon:"\u03a5",Upphi:"\u03a6",Uppsi:"\u03a8",Upomega:"\u03a9"}),t.UpgreekConfiguration=p.Configuration.create("upgreek",{handler:{macro:["upgreek"]}})},955:function(a,t){MathJax._.components.global.isObject,MathJax._.components.global.combineConfig,MathJax._.components.global.combineDefaults,t.r8=MathJax._.components.global.combineWithMathJax,MathJax._.components.global.MathJax},251:function(a,t){Object.defineProperty(t,"__esModule",{value:!0}),t.Configuration=MathJax._.input.tex.Configuration.Configuration,t.ConfigurationHandler=MathJax._.input.tex.Configuration.ConfigurationHandler,t.ParserConfiguration=MathJax._.input.tex.Configuration.ParserConfiguration},871:function(a,t){Object.defineProperty(t,"__esModule",{value:!0}),t.parseResult=MathJax._.input.tex.SymbolMap.parseResult,t.AbstractSymbolMap=MathJax._.input.tex.SymbolMap.AbstractSymbolMap,t.RegExpMap=MathJax._.input.tex.SymbolMap.RegExpMap,t.AbstractParseMap=MathJax._.input.tex.SymbolMap.AbstractParseMap,t.CharacterMap=MathJax._.input.tex.SymbolMap.CharacterMap,t.DelimiterMap=MathJax._.input.tex.SymbolMap.DelimiterMap,t.MacroMap=MathJax._.input.tex.SymbolMap.MacroMap,t.CommandMap=MathJax._.input.tex.SymbolMap.CommandMap,t.EnvironmentMap=MathJax._.input.tex.SymbolMap.EnvironmentMap},108:function(a,t){Object.defineProperty(t,"__esModule",{value:!0}),t.TexConstant=MathJax._.input.tex.TexConstants.TexConstant}},n={};function o(a){var t=n[a];if(void 0!==t)return t.exports;var e=n[a]={exports:{}};return p[a](e,e.exports,o),e.exports}a=o(955),t=o(667),e=o(927),MathJax.loader&&MathJax.loader.checkVersion("[tex]/upgreek",t.q,"tex-extension"),(0,a.r8)({_:{input:{tex:{upgreek:{UpgreekConfiguration:e}}}}})}();

View File

@ -1 +0,0 @@
!function(){"use strict";var t,e,a,n={667:function(t,e){e.q=void 0,e.q="3.2.2"},768:function(t,e,a){var n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.VerbConfiguration=e.VerbMethods=void 0;var o=a(251),r=a(108),i=a(871),u=n(a(402));e.VerbMethods={},e.VerbMethods.Verb=function(t,e){var a=t.GetNext(),n=++t.i;if(""===a)throw new u.default("MissingArgFor","Missing argument for %1",e);for(;t.i<t.string.length&&t.string.charAt(t.i)!==a;)t.i++;if(t.i===t.string.length)throw new u.default("NoClosingDelim","Can't find closing delimiter for %1",t.currentCS);var o=t.string.slice(n,t.i).replace(/ /g,"\xa0");t.i++,t.Push(t.create("token","mtext",{mathvariant:r.TexConstant.Variant.MONOSPACE},o))},new i.CommandMap("verb",{verb:"Verb"},e.VerbMethods),e.VerbConfiguration=o.Configuration.create("verb",{handler:{macro:["verb"]}})},955:function(t,e){MathJax._.components.global.isObject,MathJax._.components.global.combineConfig,MathJax._.components.global.combineDefaults,e.r8=MathJax._.components.global.combineWithMathJax,MathJax._.components.global.MathJax},251:function(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.Configuration=MathJax._.input.tex.Configuration.Configuration,e.ConfigurationHandler=MathJax._.input.tex.Configuration.ConfigurationHandler,e.ParserConfiguration=MathJax._.input.tex.Configuration.ParserConfiguration},871:function(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.parseResult=MathJax._.input.tex.SymbolMap.parseResult,e.AbstractSymbolMap=MathJax._.input.tex.SymbolMap.AbstractSymbolMap,e.RegExpMap=MathJax._.input.tex.SymbolMap.RegExpMap,e.AbstractParseMap=MathJax._.input.tex.SymbolMap.AbstractParseMap,e.CharacterMap=MathJax._.input.tex.SymbolMap.CharacterMap,e.DelimiterMap=MathJax._.input.tex.SymbolMap.DelimiterMap,e.MacroMap=MathJax._.input.tex.SymbolMap.MacroMap,e.CommandMap=MathJax._.input.tex.SymbolMap.CommandMap,e.EnvironmentMap=MathJax._.input.tex.SymbolMap.EnvironmentMap},108:function(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.TexConstant=MathJax._.input.tex.TexConstants.TexConstant},402:function(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=MathJax._.input.tex.TexError.default}},o={};function r(t){var e=o[t];if(void 0!==e)return e.exports;var a=o[t]={exports:{}};return n[t].call(a.exports,a,a.exports,r),a.exports}t=r(955),e=r(667),a=r(768),MathJax.loader&&MathJax.loader.checkVersion("[tex]/verb",e.q,"tex-extension"),(0,t.r8)({_:{input:{tex:{verb:{VerbConfiguration:a}}}}})}();

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Some files were not shown because too many files have changed in this diff Show More