This commit is contained in:
John Haverlack 2025-11-05 20:07:21 -09:00
commit f42f6439f5
345 changed files with 91585 additions and 0 deletions

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
scripts/tmp
scripts/deps

9
.obsidian/app.json vendored Normal file
View File

@ -0,0 +1,9 @@
{
"pdfExportSettings": {
"pageSize": "Letter",
"landscape": false,
"margin": "0",
"downscalePercent": 100
},
"promptDelete": false
}

6
.obsidian/appearance.json vendored Normal file
View File

@ -0,0 +1,6 @@
{
"enabledCssSnippets": [
"idea",
"idea-callout"
]
}

13
.obsidian/community-plugins.json vendored Normal file
View File

@ -0,0 +1,13 @@
[
"obsidian-excalidraw-plugin",
"dataview",
"obsidian-icons-plugin",
"obsidian-latex-suite",
"mathpad",
"obsidian-zotero-desktop-connector",
"mathematica-plot",
"obsidian-functionplot",
"obsidian-pandoc",
"obsidian-kanban",
"math-in-callout"
]

33
.obsidian/core-plugins.json vendored Normal file
View File

@ -0,0 +1,33 @@
{
"file-explorer": true,
"global-search": true,
"switcher": true,
"graph": true,
"backlink": true,
"canvas": true,
"outgoing-link": true,
"tag-pane": true,
"footnotes": true,
"properties": true,
"page-preview": true,
"daily-notes": false,
"templates": true,
"note-composer": true,
"command-palette": true,
"slash-command": false,
"editor-status": true,
"bookmarks": true,
"markdown-importer": false,
"zk-prefixer": false,
"random-note": false,
"outline": true,
"word-count": true,
"slides": false,
"audio-recorder": false,
"workspaces": false,
"file-recovery": true,
"publish": false,
"sync": false,
"bases": true,
"webviewer": false
}

22
.obsidian/graph.json vendored Normal file
View File

@ -0,0 +1,22 @@
{
"collapse-filter": true,
"search": "",
"showTags": false,
"showAttachments": false,
"hideUnresolved": false,
"showOrphans": true,
"collapse-color-groups": true,
"colorGroups": [],
"collapse-display": true,
"showArrow": false,
"textFadeMultiplier": 0,
"nodeSizeMultiplier": 1,
"lineSizeMultiplier": 1,
"collapse-forces": true,
"centerStrength": 0.518713248970312,
"repelStrength": 10,
"linkStrength": 1,
"linkDistance": 250,
"scale": 1,
"close": true
}

10
.obsidian/hotkeys.json vendored Normal file
View File

@ -0,0 +1,10 @@
{
"obsidian-zotero-desktop-connector:zdc-Pandoc": [
{
"modifiers": [
"Alt"
],
"key": "I"
}
]
}

20876
.obsidian/plugins/dataview/main.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,11 @@
{
"id": "dataview",
"name": "Dataview",
"version": "0.5.68",
"minAppVersion": "0.13.11",
"description": "Complex data views for the data-obsessed.",
"author": "Michael Brenan <blacksmithgu@gmail.com>",
"authorUrl": "https://github.com/blacksmithgu",
"helpUrl": "https://blacksmithgu.github.io/obsidian-dataview/",
"isDesktopOnly": false
}

141
.obsidian/plugins/dataview/styles.css vendored Normal file
View File

@ -0,0 +1,141 @@
.block-language-dataview {
overflow-y: auto;
}
/*****************/
/** Table Views **/
/*****************/
/* List View Default Styling; rendered internally as a table. */
.table-view-table {
width: 100%;
}
.table-view-table > thead > tr, .table-view-table > tbody > tr {
margin-top: 1em;
margin-bottom: 1em;
text-align: left;
}
.table-view-table > tbody > tr:hover {
background-color: var(--table-row-background-hover);
}
.table-view-table > thead > tr > th {
font-weight: 700;
font-size: larger;
border-top: none;
border-left: none;
border-right: none;
border-bottom: solid;
max-width: 100%;
}
.table-view-table > tbody > tr > td {
text-align: left;
border: none;
font-weight: 400;
max-width: 100%;
}
.table-view-table ul, .table-view-table ol {
margin-block-start: 0.2em !important;
margin-block-end: 0.2em !important;
}
/** Rendered value styling for any view. */
.dataview-result-list-root-ul {
padding: 0em !important;
margin: 0em !important;
}
.dataview-result-list-ul {
margin-block-start: 0.2em !important;
margin-block-end: 0.2em !important;
}
/** Generic grouping styling. */
.dataview.result-group {
padding-left: 8px;
}
/*******************/
/** Inline Fields **/
/*******************/
.dataview.inline-field-key {
padding-left: 8px;
padding-right: 8px;
font-family: var(--font-monospace);
background-color: var(--background-primary-alt);
color: var(--nav-item-color-selected);
}
.dataview.inline-field-value {
padding-left: 8px;
padding-right: 8px;
font-family: var(--font-monospace);
background-color: var(--background-secondary-alt);
color: var(--nav-item-color-selected);
}
.dataview.inline-field-standalone-value {
padding-left: 8px;
padding-right: 8px;
font-family: var(--font-monospace);
background-color: var(--background-secondary-alt);
color: var(--nav-item-color-selected);
}
/***************/
/** Task View **/
/***************/
.dataview.task-list-item, .dataview.task-list-basic-item {
margin-top: 3px;
margin-bottom: 3px;
transition: 0.4s;
}
.dataview.task-list-item:hover, .dataview.task-list-basic-item:hover {
background-color: var(--text-selection);
box-shadow: -40px 0 0 var(--text-selection);
cursor: pointer;
}
/*****************/
/** Error Views **/
/*****************/
div.dataview-error-box {
width: 100%;
min-height: 150px;
display: flex;
align-items: center;
justify-content: center;
border: 4px dashed var(--background-secondary);
}
.dataview-error-message {
color: var(--text-muted);
text-align: center;
}
/*************************/
/** Additional Metadata **/
/*************************/
.dataview.small-text {
font-size: smaller;
color: var(--text-muted);
margin-left: 3px;
}
.dataview.small-text::before {
content: "(";
}
.dataview.small-text::after {
content: ")";
}

View File

@ -0,0 +1,3 @@
{
"notification": true
}

View File

@ -0,0 +1,455 @@
/*
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
if you want to view the source, please visit the github repository of this plugin
*/
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// src/main.ts
var main_exports = {};
__export(main_exports, {
default: () => MathInCalloutPlugin
});
module.exports = __toCommonJS(main_exports);
var import_obsidian3 = require("obsidian");
// src/decorations.ts
var import_state2 = require("@codemirror/state");
var import_language2 = require("@codemirror/language");
var import_view = require("@codemirror/view");
var import_obsidian = require("obsidian");
// src/quote-field.ts
var import_language = require("@codemirror/language");
var import_state = require("@codemirror/state");
var QuoteInfo = class extends import_state.RangeValue {
/**
* @param level The level of the blockquote/callout (i.e. the number of ">"s).
* @param isBaseCallout True if this is a callout or this is nested inside a callout of level 1.
*/
constructor(level, isBaseCallout) {
super();
this.level = level;
this.isBaseCallout = isBaseCallout;
this.pattern = this.level > 0 ? new RegExp(`^( {0,3}>){${this.level}}`) : null;
}
eq(other) {
return this.level === other.level && this.isBaseCallout === other.isBaseCallout;
}
/** Remove ">"s that is misrecognized as inequality signs. */
correctMath(math) {
if (!this.pattern) return math;
const lines = math.split("\n");
const corrected = lines.map((line) => {
const match = line.match(this.pattern);
return match ? line.slice(match[0].length) : line;
}).join("\n");
return corrected;
}
getBlockquoteBorderPositions(state, from, to) {
const positions = [];
const lineBegin = state.doc.lineAt(from);
const lineEnd = state.doc.lineAt(to);
for (let i = lineBegin.number; i <= lineEnd.number; i++) {
const line = state.doc.line(i);
let start = 0;
for (let i2 = 0; i2 < this.level; i2++) {
const index = line.text.indexOf(">", start);
if (index === -1) continue;
positions.push({ pos: index + line.from, first: i2 === 0 });
start = index + 1;
}
}
return positions;
}
};
var quoteInfoField = import_state.StateField.define({
create(state) {
return parseBlockquotes(state);
},
update(prev, tr) {
return tr.docChanged ? parseBlockquotes(tr.state) : prev;
}
});
function parseBlockquotes(state) {
const tree = (0, import_language.syntaxTree)(state);
const builder = new import_state.RangeSetBuilder();
let level = 0;
let from = -1;
let isBaseCallout = false;
for (let i = 1; i <= state.doc.lines; i++) {
const line = state.doc.line(i);
const match = line.text.match(/^( {0,3}>)+/);
const newLevel = match ? match[0].split(">").length - 1 : 0;
if (newLevel !== level) {
if (level === 0 && newLevel === 1) {
isBaseCallout = tree.cursorAt(line.from, 1).node.name.contains("-callout");
}
if (level > 0 && from >= 0) {
builder.add(from, line.from, new QuoteInfo(level, isBaseCallout));
}
level = newLevel;
from = line.from;
}
}
if (level > 0 && from >= 0) {
builder.add(from, state.doc.length, new QuoteInfo(level, isBaseCallout));
}
return builder.finish();
}
// src/utils.ts
function getQuoteInfo(state, pos) {
const field = state.field(quoteInfoField, false);
if (!field) return null;
const { from, to, value } = field.iter(pos);
if (from <= pos && pos <= to) return value;
return null;
}
function hasOverlap(range, start, to) {
return range.from <= to && range.to >= start;
}
function rangesHaveOverlap(ranges, start, to) {
for (const range of ranges) {
if (hasOverlap(range, start, to))
return true;
}
return false;
}
// src/decorations.ts
var createCalloutDecorator = (BuiltInMathWidget) => import_state2.StateField.define({
create() {
return import_view.Decoration.none;
},
update(prev, tr) {
const { state } = tr;
const view = state.field(import_obsidian.editorEditorField);
if (view.composing) return prev.map(tr.changes);
const isSourceMode = !state.field(import_obsidian.editorLivePreviewField);
const doc = state.doc;
const ranges = view.hasFocus ? state.selection.ranges : [];
const tree = (0, import_language2.syntaxTree)(state);
const decorations = [];
const makeDeco = (decorationSpec, from, to) => {
if (decorationSpec.block && to === doc.length) decorationSpec.inclusiveEnd = false;
return import_view.Decoration.replace(decorationSpec);
};
let mathBegin = -1;
let mathContentBegin = -1;
let block = false;
tree.iterate({
enter(node) {
if (node.name.contains("formatting-math-begin")) {
mathBegin = node.from;
mathContentBegin = node.to;
block = node.name.contains("math-block");
} else if (mathBegin !== -1) {
if (node.name.contains("formatting-math-end")) {
const mathContentEnd = node.from;
const mathEnd = node.to;
let math = doc.sliceString(mathContentBegin, mathContentEnd);
const quote = getQuoteInfo(state, mathContentBegin);
if (quote) math = quote.correctMath(math);
const widget = new BuiltInMathWidget(math, block);
if (quote) widget.markAsCorrected();
widget.setPos(
block && math.startsWith("\n") ? mathContentBegin + 1 : mathContentBegin,
block && math.endsWith("\n") ? mathContentEnd - 1 : mathContentEnd
);
const overlap = rangesHaveOverlap(ranges, mathBegin, mathEnd);
if (block && quote && quote.level > 0) {
if (isSourceMode || quote.isBaseCallout || overlap) {
const lineBegin = state.doc.lineAt(mathBegin);
const lineEnd = state.doc.lineAt(mathEnd);
for (let i = lineBegin.number; i <= lineEnd.number; i++) {
const line = state.doc.line(i);
decorations.push(
import_view.Decoration.line({ class: "HyperMD-quote" }).range(line.from, line.from)
);
const transparent = !isSourceMode && !rangesHaveOverlap(ranges, line.from, line.to);
let start = 0;
for (let i2 = 0; i2 < quote.level; i2++) {
const index = line.text.indexOf(">", start);
if (index === -1) continue;
const pos = index + line.from;
if (i2 === 0) {
decorations.push(
import_view.Decoration.mark({ class: transparent ? "cm-transparent" : "cm-quote cm-formatting-quote" }).range(pos, pos + 1)
);
} else {
decorations.push(
import_view.Decoration.mark({ class: transparent ? "cm-blockquote-border cm-transparent" : "cm-quote cm-formatting-quote" }).range(pos, pos + 1)
);
}
start = index + 1;
}
}
if (lineEnd.from < mathContentEnd && lineEnd.text.slice(0, mathContentEnd - lineEnd.from).split(">").every((s) => !s.trim())) {
decorations.push(
import_view.Decoration.mark({ class: "cancel-cm-math" }).range(lineEnd.from, mathContentEnd)
);
}
}
}
if (!isSourceMode && (quote == null ? void 0 : quote.isBaseCallout)) {
if (overlap) {
if (block) {
decorations.push(
import_view.Decoration.widget({
widget,
block: false,
side: 1
}).range(mathEnd, mathEnd)
);
}
} else {
decorations.push(
makeDeco({
widget,
block: false
}, mathBegin, mathEnd).range(mathBegin, mathEnd)
);
}
}
mathBegin = -1;
mathContentBegin = -1;
}
}
}
});
return import_view.Decoration.set(decorations, true);
},
provide(field) {
return import_view.EditorView.decorations.from(field);
}
});
// src/patch-widget-type.ts
var import_view2 = require("@codemirror/view");
var import_view3 = require("@codemirror/view");
// node_modules/.pnpm/monkey-around@3.0.0/node_modules/monkey-around/dist/index.mjs
function around(obj, factories) {
const removers = Object.keys(factories).map((key) => around1(obj, key, factories[key]));
return removers.length === 1 ? removers[0] : function() {
removers.forEach((r) => r());
};
}
function around1(obj, method, createWrapper) {
const inherited = obj[method], hadOwn = obj.hasOwnProperty(method), original = hadOwn ? inherited : function() {
return Object.getPrototypeOf(obj)[method].apply(this, arguments);
};
let current = createWrapper(original);
if (inherited)
Object.setPrototypeOf(current, inherited);
Object.setPrototypeOf(wrapper, current);
obj[method] = wrapper;
return remove;
function wrapper(...args) {
if (current === original && obj[method] === wrapper)
remove();
return current.apply(this, args);
}
function remove() {
if (obj[method] === wrapper) {
if (hadOwn)
obj[method] = original;
else
delete obj[method];
}
if (current === original)
return;
current = original;
Object.setPrototypeOf(wrapper, inherited || Function);
}
}
// src/patch-widget-type.ts
var patchDecoration = (plugin, onPatched) => {
const uninstaller = around(import_view2.Decoration, {
replace(old) {
return function(spec) {
if (!plugin.patchSucceeded && spec.widget) {
plugin.patchSucceeded = patchMathWidget(plugin, spec.widget);
if (plugin.patchSucceeded) {
onPatched(spec.widget.constructor);
uninstaller();
}
}
return old.call(this, spec);
};
},
widget(old) {
return function(spec) {
if (!plugin.patchSucceeded && spec.widget) {
plugin.patchSucceeded = patchMathWidget(plugin, spec.widget);
if (plugin.patchSucceeded) {
onPatched(spec.widget.constructor);
uninstaller();
}
}
return old.call(this, spec);
};
}
});
plugin.register(uninstaller);
};
function patchMathWidget(plugin, widget) {
const proto = widget.constructor.prototype;
const isObsidianBuiltinMathWidget = Object.hasOwn(widget, "math") && Object.hasOwn(widget, "block") && "initDOM" in proto && "render" in proto && "setPos" in proto && "hookClickHandler" in proto && "addEditButton" in proto && "resizeWidget" in proto;
if (isObsidianBuiltinMathWidget) {
plugin.register(around(proto, {
/** Newly added by this plugin: Get a quote info for the position of this math widget. */
getQuoteInfo() {
return function() {
return this.view ? getQuoteInfo(this.view.state, this.start - 1) : null;
};
},
/** Newly added by this plugin */
markAsCorrected() {
return function() {
this.corrected = true;
};
},
/**
* Newly added by this plugin: Correct the LaTeX source code (this.math)
* based on the quote info, i.e. remove an appropreate number of ">"s
* at the head of each line.
*/
correctIfNecessary() {
return function() {
if (this.block && !this.corrected) {
const quote = this.getQuoteInfo();
if (quote) {
this.math = quote.correctMath(this.math);
this.markAsCorrected();
}
}
};
},
eq(old) {
return function(other) {
if (this.block && other.block) {
if (this.view && !other.view) other.view = this.view;
if (other.view && !this.view) this.view = other.view;
if (!this.corrected) this.correctIfNecessary();
if (!other.corrected) other.correctIfNecessary();
}
return old.call(this, other);
};
},
initDOM(old) {
return function(view) {
if (!this.view) this.view = view;
return old.call(this, view);
};
},
patchDOM(old) {
return function(dom, view) {
if (!this.view) this.view = view;
return old.call(this, dom, view);
};
},
render(old) {
return function(dom) {
this.correctIfNecessary();
old.call(this, dom);
};
}
}));
return true;
}
return false;
}
// src/settings.ts
var import_obsidian2 = require("obsidian");
var DEFAULT_SETTINGS = {
notification: true
};
var MathInCalloutSettingTab = class extends import_obsidian2.PluginSettingTab {
constructor(plugin) {
super(plugin.app, plugin);
this.plugin = plugin;
}
display() {
this.containerEl.empty();
new import_obsidian2.Setting(this.containerEl).setDesc("If something is not working, type some math expression outside callouts in Live Preview.");
new import_obsidian2.Setting(this.containerEl).setName("Show setup guidance notifications").addToggle((toggle) => {
toggle.setValue(this.plugin.settings.notification).onChange(async (value) => {
this.plugin.settings.notification = value;
await this.plugin.saveSettings();
this.plugin.showNotReadyNotice();
});
});
}
};
// src/main.ts
var MathInCalloutPlugin = class extends import_obsidian3.Plugin {
constructor() {
super(...arguments);
this.notReadyNotice = null;
}
async onload() {
await this.loadSettings();
await this.saveSettings();
this.addSettingTab(new MathInCalloutSettingTab(this));
this.patchSucceeded = false;
this.registerEditorExtension(quoteInfoField);
this.app.workspace.onLayoutReady(() => setTimeout(() => this.showNotReadyNotice(), 1e3));
patchDecoration(this, (builtInMathWidget) => {
setTimeout(() => {
if (this.notReadyNotice) {
this.notReadyNotice.hide();
this.notReadyNotice = null;
if (this.settings.notification) {
new import_obsidian3.Notice(`${this.manifest.name}: You're ready! (Note: this notifiction can be turned off in the plugin setting.)`, 1500);
}
}
this.registerEditorExtension(createCalloutDecorator(builtInMathWidget));
this.rerender();
}, 100);
});
}
rerender() {
this.app.workspace.iterateAllLeaves((leaf) => {
if (leaf.view instanceof import_obsidian3.MarkdownView) {
const eState = leaf.view.getEphemeralState();
const editor = leaf.view.editor;
editor.setValue(editor.getValue());
leaf.view.setEphemeralState(eState);
}
});
}
showNotReadyNotice() {
if (!this.patchSucceeded && this.settings.notification) {
this.notReadyNotice = new import_obsidian3.Notice(`${this.manifest.name}: You're not ready yet. In Live Preview, type some math expression outside callouts.`, 0);
}
}
async loadSettings() {
this.settings = Object.assign({}, DEFAULT_SETTINGS, await this.loadData());
}
async saveSettings() {
await this.saveData(this.settings);
}
};
/* nosourcemap */

View File

@ -0,0 +1,15 @@
{
"id": "math-in-callout",
"name": "Better Math in Callouts & Blockquotes",
"version": "0.3.8",
"minAppVersion": "1.9.0",
"description": "Add better Live Preview support for math rendering inside callouts & blockquotes.",
"author": "Ryota Ushio",
"authorUrl": "https://github.com/RyotaUshio",
"fundingUrl": {
"GitHub Sponsor": "https://github.com/sponsors/RyotaUshio",
"Buy Me a Coffee": "https://www.buymeacoffee.com/ryotaushio",
"Ko-fi": "https://ko-fi.com/ryotaushio"
},
"isDesktopOnly": false
}

View File

@ -0,0 +1,9 @@
/* .cm-math:has(.cm-quote.cm-formatting-quote) */
/* .cm-math:has(.cm-blockquote-border) */
/* { */
/* all: unset; */
/* } */
.cm-math:has( .cancel-cm-math) {
all: unset;
}

View File

@ -0,0 +1,4 @@
{
"useCloud": false,
"wolframScriptPath": "/usr/bin/wolframscript"
}

View File

@ -0,0 +1,881 @@
/*
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
if you want to view the source, please visit the github repository of this plugin
*/
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// src/main.ts
var main_exports = {};
__export(main_exports, {
default: () => MathematicaPlot
});
module.exports = __toCommonJS(main_exports);
// src/modal/menus/graph/helpers.ts
var import_obsidian = require("obsidian");
var renderOptions = (optionsFields) => (el, settings, options) => {
el.createEl("h5", {
text: `Plot Options ${settings.raster.dim}`
});
Object.entries(optionsFields).forEach(
(entry, index) => new import_obsidian.Setting(index === 0 ? el : el.createDiv()).setName(entry[1].name).setDesc(entry[1].desc).addText(
(component) => component.setValue(options[entry[0]] || "").onChange((value) => {
options[entry[0]] = value;
})
)
);
new import_obsidian.Setting(el.createDiv()).setName("Others").setDesc(
"Add any other option for the plot following the mathematica syntax. For example: ClippingStyle -> Red, ScalingFunctions -> Reverse"
).addTextArea(
(component) => component.setValue(options.others || "").onChange((value) => {
options.others = value;
})
);
};
var renderIntervalForm = (el, variable, interval, desc = { min: "", max: "" }) => {
new import_obsidian.Setting(el.createDiv()).setName(`${variable} min`).setDesc(desc.min).addText(
(component) => component.setValue(interval.min).onChange((value) => {
interval.min = value;
})
);
new import_obsidian.Setting(el.createDiv()).setName(`${variable} max`).setDesc(desc.max).addText(
(component) => component.setValue(interval.max).onChange((value) => {
interval.max = value;
})
);
};
var defaultGraphType = () => ({
plot: {
expression: "",
plotRange: { x: { min: "", max: "" }, y: { min: "", max: "" } }
},
parametricPlot: {
components: [],
type: "curve",
domain: { u: { min: "", max: "" }, v: { min: "", max: "" } }
},
regionPlot: {
expression: "",
domain: {
x: { min: "", max: "" },
y: { min: "", max: "" },
z: { min: "", max: "" }
}
},
contourPlot: {
expression: "",
domain: {
x: { min: "", max: "" },
y: { min: "", max: "" },
z: { min: "", max: "" }
}
},
vectorPlot: {
components: [],
domain: {
x: { min: "", max: "" },
y: { min: "", max: "" },
z: { min: "", max: "" }
}
}
});
var defaultGraph = (id, type) => ({
id,
type,
options: {},
...defaultGraphType()
});
var graphTypesOptions = {
plot: "Plot",
parametricPlot: "Parametric Plot",
regionPlot: "Region Plot",
contourPlot: "Contour Plot",
vectorPlot: "Vector Plot"
};
var graphTypeDescription = {
plot: "Scalar functions",
parametricPlot: "Curves or Surfaces given in parametric form",
regionPlot: "Regions defined by inequalities",
contourPlot: "Contour plot for level sets",
vectorPlot: "Plot vectors from a vector field function"
};
// src/main.ts
var import_obsidian11 = require("obsidian");
// src/modal/menus/general.ts
var import_obsidian2 = require("obsidian");
var generalSettings = {
axes: {
desc: "Whether to draw axes",
name: "Axes"
},
axesLabel: {
desc: "",
name: "Axes Label"
},
plotLabel: {
name: "Label",
desc: "Overall label for the plot"
},
frame: {
desc: "Whether to put a frame around the plot",
name: "Frame"
},
frameLabel: {
name: "Frame Label"
},
boxed: {
desc: "Whether to draw the bounding box for 3d graphics",
name: "Boxed"
}
};
var renderGeneralSettings = (el, modal) => {
const settings = modal.settings;
el.createEl("h5", { text: "General settings" });
Object.entries(generalSettings).forEach(
(setting, index) => {
const fieldName = setting[0];
const value = setting[1];
const elToDisplay = index == 0 ? el : el.createDiv();
new import_obsidian2.Setting(elToDisplay).addText(
(text) => text.setValue(settings.general[fieldName] || "").onChange(
(value2) => settings.general[fieldName] = value2
)
).setName(value.name).setDesc(value.desc || "");
}
);
};
// src/utils/plot.ts
var import_util = require("util");
var import_child_process = require("child_process");
// src/utils/parsers.ts
var mathematicaOptionsParser = {
plotLabels: (value) => `PlotLabels -> ${value}`,
plotStyle: (value) => `PlotStyle -> ${value}`,
filling: (value) => `Filling -> ${value}`,
fillingStyle: (value) => `FillingStyle -> ${value}`,
boxed: (value) => `Boxed -> ${value}`,
boundaryStyle: (value) => `BoundaryStyle -> ${value}`,
axes: (value) => `Axes -> ${value}`,
axesLabel: (value) => `AxesLabel -> ${value}`,
frame: (value) => `Frame -> ${value}`,
frameLabel: (value) => `FrameLabel -> ${value}`,
plotLegends: (value) => `PlotLegends -> ${value}`,
plotLabel: (value) => `PlotLabel -> ${value}`,
others: (value) => value
};
var parseOptions = (options) => {
const opts = Object.entries(options).filter((opt) => opt[1]).map(
(opt) => mathematicaOptionsParser[opt[0]](opt[1])
).join();
if (!opts)
return "";
else
return `,${opts}`;
};
var mathematicaPlotParser2D = {
parametricPlot: (parametricPlot, opts) => {
const {
components,
domain: { u }
} = parametricPlot;
const options = parseOptions(opts);
return `ParametricPlot[{${[
components[0],
components[1]
].join()}}, {u, ${u.min}, ${u.max}} ${options}]`;
},
plot: (plot, opts) => {
const { expression, plotRange } = plot;
const options = parseOptions(opts);
return `Plot[${expression}, {x, ${plotRange.x.min}, ${plotRange.x.max}} ${options}]`;
},
regionPlot: (regionPlot, opts) => {
const {
expression,
domain: { x, y }
} = regionPlot;
const options = parseOptions(opts);
return `RegionPlot[${expression}, {x, ${x.min}, ${x.max}}, {y, ${y.min}, ${y.max}} ${options}]`;
},
contourPlot: (contourPlot, opts) => {
const {
expression,
domain: { x, y }
} = contourPlot;
const options = parseOptions(opts);
return `ContourPlot[${expression}, {x, ${x.min}, ${x.max}}, {y, ${y.min}, ${y.max}} ${options}]`;
},
vectorPlot: (vectorPlot, opts) => {
const { components, domain } = vectorPlot;
const { x, y } = domain;
const options = parseOptions(opts);
return `VectorPlot[{${[components[0], components[1]].join()}}, {x, ${x.min}, ${x.max}}, {y, ${y.min}, ${y.max}} ${options}]`;
}
};
var mathematicaPlotParser3D = {
parametricPlot: (parametricPlot, opts) => {
const {
components,
domain: { u, v },
type
} = parametricPlot;
const options = parseOptions(opts);
const base = (v2) => `ParametricPlot3D[{${components.join()}}, {u, ${u.min}, ${u.max}} ${v2} ${options}]`;
if (type === "surface")
return base(`, {v, ${v.min}, ${v.max}}`);
return base("");
},
plot: (plot, opts) => {
const { expression, plotRange } = plot;
const options = parseOptions(opts);
return `Plot3D[${expression}, {x, ${plotRange.x.min}, ${plotRange.x.max}}, {y, ${plotRange.y.min}, ${plotRange.y.max}} ${options}]`;
},
regionPlot: (regionPlot, opts) => {
const {
expression,
domain: { x, y, z }
} = regionPlot;
const options = parseOptions(opts);
return `RegionPlot3D[${expression}, {x, ${x.min}, ${x.max}}, {y, ${y.min}, ${y.max}}, {z, ${z.min}, ${z.max}} ${options}]`;
},
contourPlot: (contourPlot, opts) => {
const {
expression,
domain: { x, y, z }
} = contourPlot;
const options = parseOptions(opts);
return `ContourPlot3D[${expression}, {x, ${x.min}, ${x.max}}, {y, ${y.min}, ${y.max}}, {z, ${z.min}, ${z.max}} ${options}]`;
},
vectorPlot: (vectorPlot, opts) => {
const { components, domain } = vectorPlot;
const { x, y, z } = domain;
const options = parseOptions(opts);
return `VectorPlot3D[{${components.join()}}, {x, ${x.min}, ${x.max}}, {y, ${y.min}, ${y.max}}, {z, ${z.min}, ${z.max}}${options}]`;
}
};
var rasterizeParser = (code, settings) => {
var _a, _b, _c, _d;
const generalOptions = parseOptions(settings.general);
return `Rasterize[Show[${code} ${generalOptions}], ImageSize -> {${((_b = (_a = settings.raster) == null ? void 0 : _a.size) == null ? void 0 : _b.width) || 250}, ${((_d = (_c = settings.raster) == null ? void 0 : _c.size) == null ? void 0 : _d.height) || "Automatic"}}, Background -> ${settings.raster.background}, AspectRatio -> Automatic]`;
};
var mathematicaParser2D = (settings) => {
const parsedGraphs = settings.graphs.map(
(graph) => mathematicaPlotParser2D[graph.type](graph[graph.type], graph.options)
);
return rasterizeParser(parsedGraphs.join(), settings);
};
var mathematicaParser3D = (settings) => {
const parsedGraphs = settings.graphs.map(
(graph) => mathematicaPlotParser3D[graph.type](graph[graph.type], graph.options)
);
return rasterizeParser(parsedGraphs.join(), settings);
};
// src/utils/plot.ts
var import_obsidian3 = require("obsidian");
var isValidBase64 = (str) => {
try {
window.atob(str);
return true;
} catch (e) {
return false;
}
};
var getBase64Plot = async (plot, { useCloud, wolframScriptPath }) => {
try {
const { stdout, stderr } = await (0, import_util.promisify)(import_child_process.exec)(
`${wolframScriptPath ? '"' + wolframScriptPath + '"' : "wolframscript"} ${useCloud ? "--cloud" : ""} --code "ExportString[${plot}, {\\"Base64\\", \\"PNG\\"}]"`
);
if (stderr)
return { error: stderr, base64: "" };
if (!isValidBase64(stdout))
return { error: stdout, base64: "" };
return { error: "", base64: stdout };
} catch (err) {
return { error: err, base64: "" };
}
};
var parseCodeBlock = (code) => {
try {
const settings = (0, import_obsidian3.parseYaml)(code);
let parsedCode = "";
if (settings.raster.dim == "2D")
parsedCode = mathematicaParser2D(settings);
if (settings.raster.dim == "3D")
parsedCode = mathematicaParser3D(settings);
return { code: parsedCode.replace(/\s/g, ""), error: "" };
} catch (err) {
console.log(err);
return { error: err.message, code: "" };
}
};
var buildBase64URL = (base64, format) => `data:image/${format};base64,${base64}`;
// src/graphRender.ts
var renderGraph = async (el, source, { useCloud, wolframScriptPath }) => {
el.empty();
el.textContent = "Loading...";
const { code, error: error1 } = parseCodeBlock(source);
if (error1)
return el.textContent = error1;
const { base64, error: error2 } = await getBase64Plot(code, {
useCloud,
wolframScriptPath
});
if (error2)
return el.textContent = error2;
el.empty();
const src = buildBase64URL(base64, "png");
const img = document.createElement("img");
img.src = src;
el.appendChild(img);
};
// src/modal/menus/graphPreview.ts
var renderGraphPreview = async (el, { settings, plugin }) => {
const content = el.createDiv();
const graphEl = el.createDiv();
content.createEl("h5", { text: "Graph preview" });
content.createEl("p", { text: "A preview of what your graph looks like" });
el.createEl("button", {
text: "Render preview",
attr: { style: "width: 100%;" }
}).onClickEvent((e) => {
e.preventDefault();
renderGraph(graphEl, JSON.stringify(settings), { ...plugin.settings });
});
};
// src/modal/menus/graph/settings2d.ts
var import_obsidian4 = require("obsidian");
var renderPlotSettings = (el, graph) => {
new import_obsidian4.Setting(el.createDiv()).setName("f(x) = ").setDesc("You can also provide a list of functions {f1, f2, ...}").addTextArea(
(component) => component.setValue(graph.expression).onChange((value) => {
graph.expression = value;
})
);
renderIntervalForm(el, "x", graph.plotRange.x);
};
var renderParametricPlotSettings = (el, graph) => {
new import_obsidian4.Setting(el.createDiv()).setName("g1(u) = ").addTextArea(
(component) => component.setValue(graph.components[0]).onChange((value) => {
graph.components[0] = value;
})
);
new import_obsidian4.Setting(el.createDiv()).setName("g2(u) = ").addTextArea(
(component) => component.setValue(graph.components[1]).onChange((value) => {
graph.components[1] = value;
})
);
renderIntervalForm(el, "u", graph.domain.u);
};
var renderRegionPlotSettings = (el, graph) => {
new import_obsidian4.Setting(el.createDiv()).setName("expression (x,y)").setDesc("You can also provide a list of expressions {e1, e2, ...}").addTextArea(
(component) => component.setValue(graph.expression).onChange((value) => {
graph.expression = value;
})
);
renderIntervalForm(el, "x", graph.domain.x);
renderIntervalForm(el, "y", graph.domain.y);
};
var renderContourPlotSettings = (el, graph) => {
new import_obsidian4.Setting(el.createDiv()).setName("expression (x,y)").setDesc("You can also provide a list of expressions {e1, e2, ...}").addTextArea(
(component) => component.setValue(graph.expression).onChange((value) => {
graph.expression = value;
})
);
renderIntervalForm(el, "x", graph.domain.x);
renderIntervalForm(el, "y", graph.domain.y);
};
var renderVectorPlotSettings = (el, graph) => {
new import_obsidian4.Setting(el.createDiv()).setName("Vx(x,y) = ").addTextArea(
(component) => component.setValue(graph.components[0]).onChange((value) => {
graph.components[0] = value;
})
);
new import_obsidian4.Setting(el.createDiv()).setName("Vy(x,y) = ").addTextArea(
(component) => component.setValue(graph.components[1]).onChange((value) => {
graph.components[1] = value;
})
);
renderIntervalForm(el, "x", graph.domain.x);
renderIntervalForm(el, "y", graph.domain.y);
};
var optsFields2D = {
plotLabels: {
name: "Plot Labels",
desc: "Labels to use for fields"
},
plotLegends: {
name: "Plot Legends",
desc: "Legends for fields"
},
plotStyle: {
name: "Plot Style",
desc: "Graphics directives to specify the style for each field"
},
filling: {
name: "Filling",
desc: "Filling to insert under each field"
},
fillingStyle: {
name: "Filling Style",
desc: "Style to use for filling "
}
};
var renders2D = {
renderSettings: {
plot: renderPlotSettings,
parametricPlot: renderParametricPlotSettings,
regionPlot: renderRegionPlotSettings,
contourPlot: renderContourPlotSettings,
vectorPlot: renderVectorPlotSettings
},
renderOptions: renderOptions(optsFields2D)
};
// src/modal/menus/graph/settings3d.ts
var import_obsidian5 = require("obsidian");
var renderPlotSettings2 = (el, graph) => {
new import_obsidian5.Setting(el.createDiv()).setName("f(x, y) = ").setDesc("You can also provide a list of functions {f1, f2, ...}").addTextArea(
(component) => component.setValue(graph.expression).onChange((value) => {
graph.expression = value;
})
);
renderIntervalForm(el, "x", graph.plotRange.x);
renderIntervalForm(el, "y", graph.plotRange.y);
};
var renderParametricPlotSettings2 = (el, graph) => {
const renderParametricCurveSettings = (el2) => {
new import_obsidian5.Setting(el2.createDiv()).setName("g1(u) =").addTextArea(
(component) => component.setValue(graph.components[0]).onChange((value) => {
graph.components[0] = value;
})
);
new import_obsidian5.Setting(el2.createDiv()).setName("g2(u) =").addTextArea(
(component) => component.setValue(graph.components[1]).onChange((value) => {
graph.components[1] = value;
})
);
new import_obsidian5.Setting(el2.createDiv()).setName("g3(u) =").addTextArea(
(component) => component.setValue(graph.components[2]).onChange((value) => {
graph.components[2] = value;
})
);
renderIntervalForm(el2, "u", graph.domain.u);
};
const renderParametricSurfaceSettings = (el2) => {
new import_obsidian5.Setting(el2.createDiv()).setName("g1(u, v) =").addTextArea(
(component) => component.setValue(graph.components[0]).onChange((value) => {
graph.components[0] = value;
})
);
new import_obsidian5.Setting(el2.createDiv()).setName("g2(u, v) =").addTextArea(
(component) => component.setValue(graph.components[1]).onChange((value) => {
graph.components[1] = value;
})
);
new import_obsidian5.Setting(el2.createDiv()).setName("g3(u, v) =").addTextArea(
(component) => component.setValue(graph.components[2]).onChange((value) => {
graph.components[2] = value;
})
);
renderIntervalForm(el2, "u", graph.domain.u);
renderIntervalForm(el2, "v", graph.domain.v);
};
new import_obsidian5.Setting(el.createDiv()).setName("Space").addDropdown(
(component) => component.addOptions({
curve: "Curve",
surface: "Surface"
}).setValue(graph.type).onChange((value) => {
graph.type = value;
renderSettings2();
})
);
const settingsEl = el.createDiv();
const renderSettings2 = () => {
settingsEl.empty();
if (graph.type === "curve")
renderParametricCurveSettings(settingsEl);
else
renderParametricSurfaceSettings(settingsEl);
};
renderSettings2();
};
var renderRegionPlotSettings2 = (el, graph) => {
new import_obsidian5.Setting(el.createDiv()).setName("expression (x,y,z)").setDesc("You can also provide a list of expressions {e1, e2, ...}").addTextArea(
(component) => component.setValue(graph.expression).onChange((value) => {
graph.expression = value;
})
);
renderIntervalForm(el, "x", graph.domain.x);
renderIntervalForm(el, "y", graph.domain.y);
renderIntervalForm(el, "z", graph.domain.z);
};
var renderContourPlotSettings2 = (el, graph) => {
new import_obsidian5.Setting(el.createDiv()).setName("expression (x,y,z)").setDesc("You can also provide a list of expressions {e1, e2, ...}").addTextArea(
(component) => component.setValue(graph.expression).onChange((value) => {
graph.expression = value;
})
);
renderIntervalForm(el, "x", graph.domain.x);
renderIntervalForm(el, "y", graph.domain.y);
renderIntervalForm(el, "z", graph.domain.z);
};
var renderVectorPlotSettings2 = (el, graph) => {
new import_obsidian5.Setting(el.createDiv()).setName("Vx(x,y) = ").addTextArea(
(component) => component.setValue(graph.components[0]).onChange((value) => {
graph.components[0] = value;
})
);
new import_obsidian5.Setting(el.createDiv()).setName("Vy(x,y) = ").addTextArea(
(component) => component.setValue(graph.components[1]).onChange((value) => {
graph.components[1] = value;
})
);
new import_obsidian5.Setting(el.createDiv()).setName("Vz(x,y) = ").addTextArea(
(component) => component.setValue(graph.components[2]).onChange((value) => {
graph.components[2] = value;
})
);
renderIntervalForm(el, "x", graph.domain.x);
renderIntervalForm(el, "y", graph.domain.y);
renderIntervalForm(el, "z", graph.domain.z);
};
var optsFields = {
...optsFields2D,
boundaryStyle: {
name: "Boundary Style",
desc: "How to draw boundary lines for surfaces"
}
};
var renders3D = {
renderSettings: {
plot: renderPlotSettings2,
parametricPlot: renderParametricPlotSettings2,
regionPlot: renderRegionPlotSettings2,
contourPlot: renderContourPlotSettings2,
vectorPlot: renderVectorPlotSettings2
},
renderOptions: renderOptions(optsFields)
};
// src/modal/menus/graph/index.ts
var import_obsidian6 = require("obsidian");
var renderByDim = {
"2D": renders2D,
"3D": renders3D
};
var render = (el, modal, dim) => {
const { renderSettings: renderSettings2, renderOptions: renderOptions3 } = renderByDim[dim];
const graphs = modal.settings.graphs;
if (!graphs.length)
graphs[0] = defaultGraph("graph_0", "plot");
let count = 0;
let dropdown;
new import_obsidian6.Setting(el).setName("Graphs").addDropdown((component) => {
dropdown = component;
component.addOptions({
[graphs[0].id]: graphs[0].id,
add: "+ add"
}).onChange((value) => {
if (value === "add") {
const name = `graph_${++count}`;
graphs.push(defaultGraph(name, "plot"));
component.addOption(name, name);
component.selectEl.remove(
component.selectEl.selectedIndex
);
component.addOption("add", "+ add");
component.setValue(name);
}
renderSelectedGraphSettings();
});
}).addButton(
(component) => component.setButtonText("Delete").setWarning().onClick((e) => {
e.preventDefault();
if (dropdown.selectEl.options.length === 2)
return;
const idxToRmv = graphs.findIndex(
(graph) => graph.id === dropdown.selectEl.options[dropdown.selectEl.selectedIndex].value
);
graphs.splice(idxToRmv, 1);
dropdown.selectEl.remove(dropdown.selectEl.selectedIndex);
renderSelectedGraphSettings();
})
);
const selectedGraphEl = el.createDiv();
const renderSelectedGraphSettings = () => {
selectedGraphEl.empty();
const graph = graphs.find(
(graph2) => graph2.id === dropdown.selectEl.options[dropdown.selectEl.selectedIndex].value
);
if (!graph)
return;
new import_obsidian6.Setting(selectedGraphEl.createDiv()).setName("Type").addDropdown((component) => {
component.addOptions(graphTypesOptions);
component.setValue(graph.type);
component.onChange((value) => {
graph.type = value;
renderSelectedGraphSettings();
});
}).setDesc(graphTypeDescription[graph.type]);
renderSettings2[graph.type](selectedGraphEl, graph[graph.type]);
renderOptions3(selectedGraphEl, modal.settings, graph.options);
};
renderSelectedGraphSettings();
};
var renderGraphSettings = (el, modal) => {
el.empty();
el.createEl("h5", { text: `Plot ${modal.settings.raster.dim}` });
render(el, modal, modal.settings.raster.dim);
};
// src/modal/menus/raster.ts
var import_obsidian7 = require("obsidian");
var renderRasterSettings = (el, graphSettingsEl, modal) => {
const settings = modal.settings;
el.createEl("h5", { text: "Raster settings" });
new import_obsidian7.Setting(el).setName("Dimensions").addDropdown((component) => {
component.addOptions({
"2D": "2D",
"3D": "3D"
});
component.onChange((value) => {
settings.raster.dim = value;
renderGraphSettings(graphSettingsEl, modal);
});
component.setValue(settings.raster.dim);
});
new import_obsidian7.Setting(el.createDiv()).addText(
(text) => text.setValue(settings.raster.background).onChange((value) => settings.raster.background = value)
).setName("Background");
new import_obsidian7.Setting(el.createDiv()).addText(
(text) => text.setValue(settings.raster.size.height).onChange((value) => settings.raster.size.height = value)
).setName("Height");
new import_obsidian7.Setting(el.createDiv()).addText(
(text) => text.setValue(settings.raster.size.width).onChange((value) => settings.raster.size.width = value)
).setName("Width");
};
// src/_constants.ts
var PLUGIN = {
CODEBLOCK_NAME: "mathematica-plot"
};
// src/modal/menus/graph/submit.ts
var import_obsidian8 = require("obsidian");
var cleanSettingStructure = (settings) => {
const cleanGraphs = settings.graphs.map((graph) => ({
id: graph.id,
options: graph.options,
type: graph.type,
[graph.type]: graph[graph.type]
}));
return { ...settings, graphs: cleanGraphs };
};
var renderSubmitBtn = (el, modal) => {
new import_obsidian8.Setting(el).addButton(
(btn) => btn.setButtonText("Submit").setCta().onClick(async () => {
const line = modal.editor.getCursor().line;
if (modal.options.isEditing) {
modal.editor.replaceSelection(
(0, import_obsidian8.stringifyYaml)(cleanSettingStructure(modal.settings))
);
} else
modal.editor.setLine(
line,
`\`\`\`${PLUGIN.CODEBLOCK_NAME}
${(0, import_obsidian8.stringifyYaml)(
cleanSettingStructure(modal.settings)
)}
\`\`\``
);
modal.options.afterSubmit(el);
modal.close();
})
);
};
// src/modal/menus/settings.ts
var renderSettings = (el, modal) => {
const rasterEl = el.createDiv();
const generalEl = el.createDiv();
const menuEl = el.createDiv();
renderRasterSettings(rasterEl, menuEl, modal);
renderGeneralSettings(generalEl, modal);
renderGraphSettings(menuEl, modal);
renderSubmitBtn(el, modal);
};
// src/modal/plotModal.ts
var import_obsidian9 = require("obsidian");
var defaultSettings = {
isEditing: false,
afterSubmit: () => null,
onClose: () => null
};
var defaultPlotSettings = () => ({
raster: {
dim: "2D",
background: "None",
size: {
height: "Automatic",
width: "250"
}
},
general: {
axes: "True",
axesLabel: "{x, y}",
frame: "False",
boxed: "True"
},
graphs: []
});
var PlotModal = class extends import_obsidian9.Modal {
constructor(plugin, editor, settings, options) {
super(plugin.app);
this.settings = defaultPlotSettings();
this.plugin = plugin;
this.editor = editor;
if (settings)
this.settings = settings;
this.options = { ...defaultSettings, ...options };
}
onOpen() {
const { contentEl } = this;
this.modalEl.addClass("mathematica-plot-modal");
contentEl.createEl("h4", { text: "Plot" });
const flex = contentEl.createEl("div", {
cls: "mathematica-plot-modal-content-container"
});
const settings = flex.createDiv();
const preview = flex.createDiv();
settings.addClass("mathematica-plot-modal-settings");
preview.addClass("mathematica-plot-modal-preview");
renderSettings(settings, this);
renderGraphPreview(preview, this);
}
onClose() {
this.options.onClose();
}
};
// src/settingsTab.ts
var import_obsidian10 = require("obsidian");
var MathematicaPlotSettingsTab = class extends import_obsidian10.PluginSettingTab {
constructor(app, plugin) {
super(app, plugin);
this.plugin = plugin;
}
display() {
const { containerEl } = this;
containerEl.empty();
containerEl.createEl("h3").setText("Settings");
new import_obsidian10.Setting(containerEl).setName("Use cloud").setDesc(
"Whether to pass --cloud option. If you don't have the wolfram engine installed set it to true."
).addToggle(
(component) => component.setValue(this.plugin.settings.useCloud).onChange(async (value) => {
this.plugin.settings.useCloud = value;
await this.plugin.saveSettings();
})
);
new import_obsidian10.Setting(containerEl).setName("WolframScript path").setDesc(
"The installation path of WolframScript. If you WolframScript is globally available on your system you can leave it blank."
).addText(
(component) => component.setValue(this.plugin.settings.wolframScriptPath).onChange(async (value) => {
this.plugin.settings.wolframScriptPath = value;
await this.plugin.saveSettings();
})
);
}
};
// src/utils/editor.ts
var isReadingView = (markdownView) => markdownView.getMode() === "preview";
// src/main.ts
var import_os = require("os");
var DEFAULT_SETTINGS = {
useCloud: true,
wolframScriptPath: ""
};
var MathematicaPlot = class extends import_obsidian11.Plugin {
async onload() {
if (import_obsidian11.Platform.isMobile)
return;
await this.loadSettings();
this.addCommand({
id: "plot-graph",
name: "Plot Graph",
editorCallback: (editor) => {
new PlotModal(this, editor, null, {}).open();
}
});
this.registerMarkdownCodeBlockProcessor(
PLUGIN.CODEBLOCK_NAME,
async (source, el) => {
const plotEl = el.createDiv({ cls: "mathematica-plot" });
await renderGraph(plotEl, source, {
...this.settings
});
const view = this.app.workspace.getActiveViewOfType(import_obsidian11.MarkdownView);
if (!view || isReadingView(view))
return;
const cursorPos = view.editor.getCursor();
const button = new import_obsidian11.ExtraButtonComponent(plotEl).setIcon("settings-2").setTooltip("Edit plot settings").onClick(() => {
var _a, _b;
(_b = (_a = el.parentElement) == null ? void 0 : _a.querySelector(".edit-block-button")) == null ? void 0 : _b.click();
const settings = (0, import_obsidian11.parseYaml)(source);
settings.graphs = settings.graphs.map((graph) => ({
...defaultGraphType(),
...graph
}));
new PlotModal(this, view.editor, settings, {
isEditing: true,
onClose: () => view.editor.setCursor(cursorPos)
}).open();
});
button.extraSettingsEl.addClass("mathematica-plot-edit-btn");
}
);
this.addSettingTab(new MathematicaPlotSettingsTab(this.app, this));
}
onunload() {
}
async loadSettings() {
if ((0, import_os.platform)() === "win32")
DEFAULT_SETTINGS.wolframScriptPath = "C:\\Program Files\\Wolfram Research\\WolframScript\\wolframscript.exe";
this.settings = Object.assign(
{},
DEFAULT_SETTINGS,
await this.loadData()
);
}
async saveSettings() {
await this.saveData(this.settings);
}
};
/* nosourcemap */

View File

@ -0,0 +1,11 @@
{
"id": "mathematica-plot",
"name": "Mathematica Plot",
"version": "1.0.0",
"minAppVersion": "0.15.0",
"description": "Render graphs using Wolfram Mathematica code!",
"author": "Marcos Nicolau",
"authorUrl": "https://github.com/MarcosNicolau",
"fundingUrl": "https://www.buymeacoffee.com/marcosnicolau",
"isDesktopOnly": true
}

View File

@ -0,0 +1,47 @@
.mathematica-plot-modal {
width: 50%;
}
.mathematica-plot-modal .mathematica-plot-modal-settings {
max-height: 60vh;
overflow-y: auto;
width: 100%;
}
.mathematica-plot-modal .mathematica-plot-modal-preview {
width: 50%;
display: flex;
flex-direction: column;
align-items: center;
justify-content: space-between;
overflow: auto;
}
.mathematica-plot-modal .mathematica-plot-modal-content-container {
display: flex;
gap: 16px;
}
.mathematica-plot {
position: relative;
}
.mathematica-plot-edit-btn {
padding-bottom: var(--size-2-2);
padding-right: var(--size-2-3);
position: absolute;
right: var(--size-2-2);
bottom: var(--size-2-2);
opacity: 0;
}
.mathematica-plot:hover .mathematica-plot-edit-btn {
transition: 0s;
opacity: 1;
}
@media only screen and (max-width: 1550px) {
.mathematica-plot-modal {
width: 75%;
}
}

87
.obsidian/plugins/mathpad/main.js vendored Normal file

File diff suppressed because one or more lines are too long

11
.obsidian/plugins/mathpad/manifest.json vendored Normal file
View File

@ -0,0 +1,11 @@
{
"id": "mathpad",
"name": "Mathpad",
"version": "0.8.14",
"minAppVersion": "0.15.0",
"description": "Computer Algebra System and Calculator for Obsidian",
"author": "Gabriele Cannata",
"authorUrl": "https://github.com/Canna71",
"fundingUrl": "https://www.buymeacoffee.com/gcannata",
"isDesktopOnly": true
}

158
.obsidian/plugins/mathpad/styles.css vendored Normal file
View File

@ -0,0 +1,158 @@
.mathpad-container {
display: flex;
flex-direction: column;
height: 100%;
}
.mathpad-container .toolbar {
border-bottom: 1px solid var(--background-modifier-border);
border-top: 1px solid var(--background-modifier-border);
padding: 4px;
flex: 0;
}
.mathpad-container .toolbar button {
padding: 2px 2px;
width: 28px;
height: 28px;
margin-right: 5px;
}
.mathpad-container .toolbar button:disabled {
color: var(--text-faint);
cursor: default;
}
.mathpad-container .mathpad-scroller {
display: flex;
flex-direction: column-reverse;
overflow: auto;
flex: 1;
}
.mathpad-container .mathpad-scroller .mathpad-slots-container {
display: flex;
flex-direction: column;
}
.mathpad-container .mathpad-scroller .mathpad-slots-container .slot-container {
display: flex;
position: relative;
min-height: 6em;
border-top: 1px solid var(--background-modifier-border);
}
.mathpad-container .mathpad-scroller .mathpad-slots-container .slot-container .slot-anchor {
display: flex;
flex-direction: column;
align-items: center;
width: 24px;
border-right: 1px solid var(--background-modifier-border);
justify-content: center;
background-color: transparent;
cursor: pointer;
}
.mathpad-container .mathpad-scroller .mathpad-slots-container .slot-container .slot-anchor .slot-name {
width: 100%;
text-align: center;
font-size: smaller;
color: var(--text-faint);
}
.mathpad-container .mathpad-scroller .mathpad-slots-container .slot-container .slot-anchor:hover {
background-color: var(--background-modifier-border);
}
.mathpad-container .mathpad-scroller .mathpad-slots-container .slot-container .slot-anchor.selected {
cursor: default;
background-color: var(--background-modifier-border);
border-color: var(--interactive-accent);
}
.mathpad-container .mathpad-scroller .mathpad-slots-container .slot-container .slot-content {
flex: 1;
padding: 4px;
display: flex;
flex-direction: column;
width: 100%;
}
.mathpad-container .mathpad-scroller .mathpad-slots-container .slot-container .slot-content .slot-input {
overflow-x: auto;
line-height: 12px;
cursor: text;
}
.mathpad-container .mathpad-scroller .mathpad-slots-container .slot-container .slot-content .slot-input mjx-container {
text-align: left;
}
.mathpad-container .mathpad-scroller .mathpad-slots-container .slot-container .slot-content .slot-input .plain-input {
padding: 5px;
line-height: 12px;
height: 24px;
font-size: 16px;
font-family: monospace;
white-space: nowrap;
overflow: hidden;
overflow-x: auto;
}
.mathpad-container .mathpad-scroller .mathpad-slots-container .slot-container .slot-content .slot-input .plain-input:hover {
background-color: var(--background-primary);
}
.mathpad-container .mathpad-scroller .mathpad-slots-container .slot-container .slot-content .slot-input .mathpad-input {
margin: 1em 0px;
}
.mathpad-container .mathpad-scroller .mathpad-slots-container .slot-container .slot-content .slot-input .latex-wrapper {
padding: 4px;
margin: 1px;
}
.mathpad-container .mathpad-scroller .mathpad-slots-container .slot-container .slot-content .mathpad-slider {
margin-right: 20px;
}
.mathpad-container .mathpad-scroller .mathpad-slots-container .slot-container .slot-content .mathpad-slider input[type=range] {
width: 100%;
}
.mathpad-container .mathpad-scroller .mathpad-slots-container .slot-container .slot-content .slot-result {
overflow-y: auto;
}
.mathpad-container .mathpad-scroller .mathpad-slots-container .slot-container .slot-content .slot-result .slot-error {
font-size: 12px;
color: var(--text-error);
}
.mathpad-container .mathpad-scroller .mathpad-slots-container .slot-container .slot-actions {
position: absolute;
top: 0px;
right: 0px;
display: flex;
flex-direction: column;
visibility: hidden;
}
.mathpad-container .mathpad-scroller .mathpad-slots-container .slot-container:hover .slot-actions {
visibility: visible;
}
.mathpad-container .current-input {
border-top: 1px solid var(--background-modifier-border);
flex: 0;
margin-bottom: 32px;
padding: 16px 8px 8px 8px;
}
.mathpad-container .current-input input.mathpad-input {
height: 30px;
}
.mathpad-container .mathpad-input {
font-size: 16px;
line-height: 12px;
height: 24px;
padding: 4px;
width: 100%;
font-family: monospace;
}
.mathpad-plot {
cursor: pointer;
}
.mathpad-plot .function-plot path.x.origin {
stroke: var(--text-normal);
}
.mathpad-plot .function-plot path.y.origin {
stroke: var(--text-normal);
}
.mathpad-plot .function-plot .x.axis {
stroke: var(--text-normal);
}
.mathpad-plot .function-plot .x.axis .tick line {
stroke: var(--text-normal);
}
.mathpad-plot .function-plot .y.axis .tick line {
stroke: var(--text-normal);
}
.mathpad-declaration {
font-family: "MathJax_Math";
}

View File

@ -0,0 +1,812 @@
{
"disableDoubleClickTextEditing": false,
"folder": "Excalidraw",
"cropFolder": "",
"annotateFolder": "",
"embedUseExcalidrawFolder": false,
"templateFilePath": "Excalidraw/Template.excalidraw",
"scriptFolderPath": "Excalidraw/Scripts",
"fontAssetsPath": "Excalidraw/CJK Fonts",
"loadChineseFonts": false,
"loadJapaneseFonts": false,
"loadKoreanFonts": false,
"compress": true,
"decompressForMDView": false,
"onceOffCompressFlagReset": true,
"onceOffGPTVersionReset": true,
"autosave": true,
"autosaveIntervalDesktop": 60000,
"autosaveIntervalMobile": 30000,
"drawingFilenamePrefix": "Drawing ",
"drawingEmbedPrefixWithFilename": true,
"drawingFilnameEmbedPostfix": " ",
"drawingFilenameDateTime": "YYYY-MM-DD HH.mm.ss",
"useExcalidrawExtension": true,
"cropSuffix": "",
"cropPrefix": "cropped_",
"annotateSuffix": "",
"annotatePrefix": "annotated_",
"annotatePreserveSize": false,
"previewImageType": "SVGIMG",
"renderingConcurrency": 3,
"allowImageCache": true,
"allowImageCacheInScene": true,
"displayExportedImageIfAvailable": false,
"previewMatchObsidianTheme": false,
"width": "400",
"height": "",
"overrideObsidianFontSize": false,
"dynamicStyling": "colorful",
"isLeftHanded": false,
"iframeMatchExcalidrawTheme": true,
"matchTheme": false,
"matchThemeAlways": false,
"matchThemeTrigger": false,
"defaultMode": "normal",
"defaultPenMode": "never",
"penModeDoubleTapEraser": true,
"penModeSingleFingerPanning": true,
"penModeCrosshairVisible": true,
"panWithRightMouseButton": false,
"renderImageInMarkdownReadingMode": false,
"renderImageInHoverPreviewForMDNotes": false,
"renderImageInMarkdownToPDF": false,
"allowPinchZoom": false,
"allowWheelZoom": false,
"zoomToFitOnOpen": true,
"zoomToFitOnResize": false,
"zoomToFitMaxLevel": 2,
"zoomStep": 0.05,
"zoomMin": 0.1,
"zoomMax": 30,
"linkPrefix": "📍",
"urlPrefix": "🌐",
"parseTODO": false,
"todo": "☐",
"done": "🗹",
"hoverPreviewWithoutCTRL": false,
"linkOpacity": 1,
"openInAdjacentPane": true,
"showSecondOrderLinks": true,
"focusOnFileTab": true,
"openInMainWorkspace": true,
"showLinkBrackets": true,
"allowCtrlClick": true,
"forceWrap": false,
"pageTransclusionCharLimit": 200,
"wordWrappingDefault": 0,
"removeTransclusionQuoteSigns": true,
"iframelyAllowed": true,
"pngExportScale": 1,
"exportWithTheme": true,
"exportWithBackground": true,
"exportPaddingSVG": 10,
"exportEmbedScene": false,
"keepInSync": false,
"autoexportSVG": false,
"autoexportPNG": false,
"autoExportLightAndDark": false,
"autoexportExcalidraw": false,
"embedType": "excalidraw",
"embedMarkdownCommentLinks": true,
"embedWikiLink": true,
"syncExcalidraw": false,
"experimentalFileType": false,
"experimentalFileTag": "✏️",
"experimentalLivePreview": true,
"fadeOutExcalidrawMarkup": false,
"loadPropertySuggestions": false,
"experimentalEnableFourthFont": false,
"experimantalFourthFont": "Virgil",
"addDummyTextElement": false,
"zoteroCompatibility": false,
"fieldSuggester": true,
"compatibilityMode": false,
"drawingOpenCount": 0,
"library": "deprecated",
"library2": {
"type": "excalidrawlib",
"version": 2,
"source": "https://github.com/zsviczian/obsidian-excalidraw-plugin/releases/tag/2.15.3",
"libraryItems": []
},
"imageElementNotice": true,
"mdSVGwidth": 500,
"mdSVGmaxHeight": 800,
"mdFont": "Virgil",
"mdFontColor": "Black",
"mdBorderColor": "Black",
"mdCSS": "",
"scriptEngineSettings": {},
"defaultTrayMode": true,
"previousRelease": "2.15.3",
"showReleaseNotes": true,
"compareManifestToPluginVersion": true,
"showNewVersionNotification": true,
"latexBoilerplate": "\\color{blue}",
"latexPreambleLocation": "preamble.sty",
"taskboneEnabled": false,
"taskboneAPIkey": "",
"pinnedScripts": [],
"customPens": [
{
"type": "default",
"freedrawOnly": false,
"strokeColor": "#000000",
"backgroundColor": "transparent",
"fillStyle": "hachure",
"strokeWidth": 0,
"roughness": 0,
"penOptions": {
"highlighter": false,
"constantPressure": false,
"hasOutline": false,
"outlineWidth": 1,
"options": {
"thinning": 0.6,
"smoothing": 0.5,
"streamline": 0.5,
"easing": "easeOutSine",
"start": {
"cap": true,
"taper": 0,
"easing": "linear"
},
"end": {
"cap": true,
"taper": 0,
"easing": "linear"
}
}
}
},
{
"type": "highlighter",
"freedrawOnly": true,
"strokeColor": "#FFC47C",
"backgroundColor": "#FFC47C",
"fillStyle": "solid",
"strokeWidth": 2,
"roughness": null,
"penOptions": {
"highlighter": true,
"constantPressure": true,
"hasOutline": true,
"outlineWidth": 4,
"options": {
"thinning": 1,
"smoothing": 0.5,
"streamline": 0.5,
"easing": "linear",
"start": {
"taper": 0,
"cap": true,
"easing": "linear"
},
"end": {
"taper": 0,
"cap": true,
"easing": "linear"
}
}
}
},
{
"type": "finetip",
"freedrawOnly": false,
"strokeColor": "#3E6F8D",
"backgroundColor": "transparent",
"fillStyle": "hachure",
"strokeWidth": 0.5,
"roughness": 0,
"penOptions": {
"highlighter": false,
"hasOutline": false,
"outlineWidth": 1,
"constantPressure": true,
"options": {
"smoothing": 0.4,
"thinning": -0.5,
"streamline": 0.4,
"easing": "linear",
"start": {
"taper": 5,
"cap": false,
"easing": "linear"
},
"end": {
"taper": 5,
"cap": false,
"easing": "linear"
}
}
}
},
{
"type": "fountain",
"freedrawOnly": false,
"strokeColor": "#000000",
"backgroundColor": "transparent",
"fillStyle": "hachure",
"strokeWidth": 2,
"roughness": 0,
"penOptions": {
"highlighter": false,
"constantPressure": false,
"hasOutline": false,
"outlineWidth": 1,
"options": {
"smoothing": 0.2,
"thinning": 0.6,
"streamline": 0.2,
"easing": "easeInOutSine",
"start": {
"taper": 150,
"cap": true,
"easing": "linear"
},
"end": {
"taper": 1,
"cap": true,
"easing": "linear"
}
}
}
},
{
"type": "marker",
"freedrawOnly": true,
"strokeColor": "#B83E3E",
"backgroundColor": "#FF7C7C",
"fillStyle": "dashed",
"strokeWidth": 2,
"roughness": 3,
"penOptions": {
"highlighter": false,
"constantPressure": true,
"hasOutline": true,
"outlineWidth": 4,
"options": {
"thinning": 1,
"smoothing": 0.5,
"streamline": 0.5,
"easing": "linear",
"start": {
"taper": 0,
"cap": true,
"easing": "linear"
},
"end": {
"taper": 0,
"cap": true,
"easing": "linear"
}
}
}
},
{
"type": "thick-thin",
"freedrawOnly": true,
"strokeColor": "#CECDCC",
"backgroundColor": "transparent",
"fillStyle": "hachure",
"strokeWidth": 0,
"roughness": null,
"penOptions": {
"highlighter": true,
"constantPressure": true,
"hasOutline": false,
"outlineWidth": 1,
"options": {
"thinning": 1,
"smoothing": 0.5,
"streamline": 0.5,
"easing": "linear",
"start": {
"taper": 0,
"cap": true,
"easing": "linear"
},
"end": {
"cap": true,
"taper": true,
"easing": "linear"
}
}
}
},
{
"type": "thin-thick-thin",
"freedrawOnly": true,
"strokeColor": "#CECDCC",
"backgroundColor": "transparent",
"fillStyle": "hachure",
"strokeWidth": 0,
"roughness": null,
"penOptions": {
"highlighter": true,
"constantPressure": true,
"hasOutline": false,
"outlineWidth": 1,
"options": {
"thinning": 1,
"smoothing": 0.5,
"streamline": 0.5,
"easing": "linear",
"start": {
"cap": true,
"taper": true,
"easing": "linear"
},
"end": {
"cap": true,
"taper": true,
"easing": "linear"
}
}
}
},
{
"type": "default",
"freedrawOnly": false,
"strokeColor": "#000000",
"backgroundColor": "transparent",
"fillStyle": "hachure",
"strokeWidth": 0,
"roughness": 0,
"penOptions": {
"highlighter": false,
"constantPressure": false,
"hasOutline": false,
"outlineWidth": 1,
"options": {
"thinning": 0.6,
"smoothing": 0.5,
"streamline": 0.5,
"easing": "easeOutSine",
"start": {
"cap": true,
"taper": 0,
"easing": "linear"
},
"end": {
"cap": true,
"taper": 0,
"easing": "linear"
}
}
}
},
{
"type": "default",
"freedrawOnly": false,
"strokeColor": "#000000",
"backgroundColor": "transparent",
"fillStyle": "hachure",
"strokeWidth": 0,
"roughness": 0,
"penOptions": {
"highlighter": false,
"constantPressure": false,
"hasOutline": false,
"outlineWidth": 1,
"options": {
"thinning": 0.6,
"smoothing": 0.5,
"streamline": 0.5,
"easing": "easeOutSine",
"start": {
"cap": true,
"taper": 0,
"easing": "linear"
},
"end": {
"cap": true,
"taper": 0,
"easing": "linear"
}
}
}
},
{
"type": "default",
"freedrawOnly": false,
"strokeColor": "#000000",
"backgroundColor": "transparent",
"fillStyle": "hachure",
"strokeWidth": 0,
"roughness": 0,
"penOptions": {
"highlighter": false,
"constantPressure": false,
"hasOutline": false,
"outlineWidth": 1,
"options": {
"thinning": 0.6,
"smoothing": 0.5,
"streamline": 0.5,
"easing": "easeOutSine",
"start": {
"cap": true,
"taper": 0,
"easing": "linear"
},
"end": {
"cap": true,
"taper": 0,
"easing": "linear"
}
}
}
}
],
"numberOfCustomPens": 0,
"pdfScale": 4,
"pdfBorderBox": true,
"pdfFrame": false,
"pdfGapSize": 20,
"pdfGroupPages": false,
"pdfLockAfterImport": true,
"pdfNumColumns": 1,
"pdfNumRows": 1,
"pdfDirection": "right",
"pdfImportScale": 0.3,
"gridSettings": {
"DYNAMIC_COLOR": true,
"COLOR": "#000000",
"OPACITY": 50,
"GRID_DIRECTION": {
"horizontal": true,
"vertical": true
}
},
"laserSettings": {
"DECAY_LENGTH": 50,
"DECAY_TIME": 1000,
"COLOR": "#ff0000"
},
"embeddableMarkdownDefaults": {
"useObsidianDefaults": false,
"backgroundMatchCanvas": false,
"backgroundMatchElement": true,
"backgroundColor": "#fff",
"backgroundOpacity": 60,
"borderMatchElement": true,
"borderColor": "#fff",
"borderOpacity": 0,
"filenameVisible": false
},
"markdownNodeOneClickEditing": false,
"canvasImmersiveEmbed": true,
"startupScriptPath": "",
"aiEnabled": true,
"openAIAPIToken": "",
"openAIDefaultTextModel": "gpt-3.5-turbo-1106",
"openAIDefaultVisionModel": "gpt-4o",
"openAIDefaultImageGenerationModel": "dall-e-3",
"openAIURL": "https://api.openai.com/v1/chat/completions",
"openAIImageGenerationURL": "https://api.openai.com/v1/images/generations",
"openAIImageEditsURL": "https://api.openai.com/v1/images/edits",
"openAIImageVariationURL": "https://api.openai.com/v1/images/variations",
"modifierKeyConfig": {
"Mac": {
"LocalFileDragAction": {
"defaultAction": "image-import",
"rules": [
{
"shift": false,
"ctrl_cmd": false,
"alt_opt": false,
"meta_ctrl": false,
"result": "image-import"
},
{
"shift": true,
"ctrl_cmd": false,
"alt_opt": true,
"meta_ctrl": false,
"result": "link"
},
{
"shift": true,
"ctrl_cmd": false,
"alt_opt": false,
"meta_ctrl": false,
"result": "image-url"
},
{
"shift": false,
"ctrl_cmd": false,
"alt_opt": true,
"meta_ctrl": false,
"result": "embeddable"
}
]
},
"WebBrowserDragAction": {
"defaultAction": "image-url",
"rules": [
{
"shift": false,
"ctrl_cmd": false,
"alt_opt": false,
"meta_ctrl": false,
"result": "image-url"
},
{
"shift": true,
"ctrl_cmd": false,
"alt_opt": true,
"meta_ctrl": false,
"result": "link"
},
{
"shift": false,
"ctrl_cmd": false,
"alt_opt": true,
"meta_ctrl": false,
"result": "embeddable"
},
{
"shift": true,
"ctrl_cmd": false,
"alt_opt": false,
"meta_ctrl": false,
"result": "image-import"
}
]
},
"InternalDragAction": {
"defaultAction": "link",
"rules": [
{
"shift": false,
"ctrl_cmd": false,
"alt_opt": false,
"meta_ctrl": false,
"result": "link"
},
{
"shift": false,
"ctrl_cmd": false,
"alt_opt": false,
"meta_ctrl": true,
"result": "embeddable"
},
{
"shift": true,
"ctrl_cmd": false,
"alt_opt": false,
"meta_ctrl": false,
"result": "image"
},
{
"shift": true,
"ctrl_cmd": false,
"alt_opt": false,
"meta_ctrl": true,
"result": "image-fullsize"
}
]
},
"LinkClickAction": {
"defaultAction": "new-tab",
"rules": [
{
"shift": false,
"ctrl_cmd": false,
"alt_opt": false,
"meta_ctrl": false,
"result": "active-pane"
},
{
"shift": false,
"ctrl_cmd": true,
"alt_opt": false,
"meta_ctrl": false,
"result": "new-tab"
},
{
"shift": false,
"ctrl_cmd": true,
"alt_opt": true,
"meta_ctrl": false,
"result": "new-pane"
},
{
"shift": true,
"ctrl_cmd": true,
"alt_opt": true,
"meta_ctrl": false,
"result": "popout-window"
},
{
"shift": false,
"ctrl_cmd": true,
"alt_opt": false,
"meta_ctrl": true,
"result": "md-properties"
}
]
}
},
"Win": {
"LocalFileDragAction": {
"defaultAction": "image-import",
"rules": [
{
"shift": false,
"ctrl_cmd": false,
"alt_opt": false,
"meta_ctrl": false,
"result": "image-import"
},
{
"shift": false,
"ctrl_cmd": true,
"alt_opt": false,
"meta_ctrl": false,
"result": "link"
},
{
"shift": true,
"ctrl_cmd": false,
"alt_opt": false,
"meta_ctrl": false,
"result": "image-url"
},
{
"shift": true,
"ctrl_cmd": true,
"alt_opt": false,
"meta_ctrl": false,
"result": "embeddable"
}
]
},
"WebBrowserDragAction": {
"defaultAction": "image-url",
"rules": [
{
"shift": false,
"ctrl_cmd": false,
"alt_opt": false,
"meta_ctrl": false,
"result": "image-url"
},
{
"shift": false,
"ctrl_cmd": true,
"alt_opt": false,
"meta_ctrl": false,
"result": "link"
},
{
"shift": true,
"ctrl_cmd": true,
"alt_opt": false,
"meta_ctrl": false,
"result": "embeddable"
},
{
"shift": true,
"ctrl_cmd": false,
"alt_opt": false,
"meta_ctrl": false,
"result": "image-import"
}
]
},
"InternalDragAction": {
"defaultAction": "link",
"rules": [
{
"shift": false,
"ctrl_cmd": false,
"alt_opt": false,
"meta_ctrl": false,
"result": "link"
},
{
"shift": true,
"ctrl_cmd": true,
"alt_opt": false,
"meta_ctrl": false,
"result": "embeddable"
},
{
"shift": true,
"ctrl_cmd": false,
"alt_opt": false,
"meta_ctrl": false,
"result": "image"
},
{
"shift": false,
"ctrl_cmd": true,
"alt_opt": true,
"meta_ctrl": false,
"result": "image-fullsize"
}
]
},
"LinkClickAction": {
"defaultAction": "new-tab",
"rules": [
{
"shift": false,
"ctrl_cmd": false,
"alt_opt": false,
"meta_ctrl": false,
"result": "active-pane"
},
{
"shift": false,
"ctrl_cmd": true,
"alt_opt": false,
"meta_ctrl": false,
"result": "new-tab"
},
{
"shift": false,
"ctrl_cmd": true,
"alt_opt": true,
"meta_ctrl": false,
"result": "new-pane"
},
{
"shift": true,
"ctrl_cmd": true,
"alt_opt": true,
"meta_ctrl": false,
"result": "popout-window"
},
{
"shift": false,
"ctrl_cmd": true,
"alt_opt": false,
"meta_ctrl": true,
"result": "md-properties"
}
]
}
}
},
"slidingPanesSupport": false,
"areaZoomLimit": 1,
"longPressDesktop": 500,
"longPressMobile": 500,
"doubleClickLinkOpenViewMode": true,
"isDebugMode": false,
"rank": "Bronze",
"modifierKeyOverrides": [
{
"modifiers": [
"Mod"
],
"key": "Enter"
},
{
"modifiers": [
"Mod"
],
"key": "k"
},
{
"modifiers": [
"Mod"
],
"key": "G"
}
],
"showSplashscreen": true,
"pdfSettings": {
"pageSize": "A4",
"pageOrientation": "portrait",
"fitToPage": 1,
"paperColor": "white",
"customPaperColor": "#ffffff",
"alignment": "center",
"margin": "normal"
}
}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,12 @@
{
"id": "obsidian-excalidraw-plugin",
"name": "Excalidraw",
"version": "2.15.3",
"minAppVersion": "1.5.7",
"description": "An Obsidian plugin to edit and view Excalidraw drawings",
"author": "Zsolt Viczian",
"authorUrl": "https://excalidraw-obsidian.online",
"fundingUrl": "https://ko-fi.com/zsolt",
"helpUrl": "https://github.com/zsviczian/obsidian-excalidraw-plugin#readme",
"isDesktopOnly": false
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,10 @@
{
"id": "obsidian-functionplot",
"name": "Obsidian Functionplot",
"minAppVersion": "0.12.2",
"description": "A plugin for displaying mathematical graphs in obsidian.md.",
"author": "leonhma",
"authorUrl": "https://github.com/leonhma",
"isDesktopOnly": false,
"version": "1.2.1"
}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,10 @@
{
"id": "obsidian-icons-plugin",
"name": "Icons",
"version": "0.3.0",
"minAppVersion": "0.10.7",
"description": "Add icons to your Obsidian notes.",
"author": "Camillo Visini",
"authorUrl": "https://github.com/visini",
"isDesktopOnly": true
}

View File

@ -0,0 +1,16 @@
.obsidian-icon {
font-size: inherit;
display: inline-block;
width: 2rem !important;
text-align: center;
/* margin-right: -0.5rem !important; */
}
p .obsidian-icon {
width: 1.75rem !important;
}
.obsidian-icon.react-icon > svg {
vertical-align: middle;
margin-bottom: 3px;
}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,11 @@
{
"id": "obsidian-kanban",
"name": "Kanban",
"version": "2.0.51",
"minAppVersion": "1.0.0",
"description": "Create markdown-backed Kanban boards in Obsidian.",
"author": "mgmeyers",
"authorUrl": "https://github.com/mgmeyers/obsidian-kanban",
"helpUrl": "https://publish.obsidian.md/kanban/Obsidian+Kanban+Plugin",
"isDesktopOnly": false
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,11 @@
{
"id": "obsidian-latex-suite",
"name": "Latex Suite",
"version": "1.9.8",
"minAppVersion": "1.0.0",
"description": "Make typesetting LaTeX math as fast as handwriting through snippets, text expansion, and editor enhancements",
"author": "artisticat",
"authorUrl": "https://github.com/artisticat1",
"fundingUrl": "https://ko-fi.com/artisticat",
"isDesktopOnly": false
}

View File

@ -0,0 +1,235 @@
/* Settings panel */
.setting-item.hidden {
display: none;
}
.setting-item.setting-item-heading .latex-suite-settings-icon {
margin-right: var(--size-4-2);
display: inline-flex;
}
.setting-item.setting-item-heading:has(.latex-suite-settings-icon) {
border-bottom: 1px solid var(--background-modifier-border);
}
.setting-item.setting-item-heading:has(.latex-suite-settings-icon) + .setting-item {
border-top: none;
}
.setting-item.setting-item-heading:has(.latex-suite-settings-icon) ~ .setting-item:not(.setting-item-heading), .latex-suite-snippet-variables-setting + .setting-item-control {
width: calc(100% - 26px);
margin-left: 26px;
}
.latex-suite-snippet-variables-setting .setting-item-control {
height: 120px;
}
.latex-suite-snippet-variables-setting .setting-item-control textarea {
width: 100%;
height: 100%;
}
.snippets-text-area, .latex-suite-snippet-variables-setting {
display: inline-block;
}
.snippets-text-area .setting-item-info, .latex-suite-snippet-variables-setting .setting-item-info {
margin-bottom: 0.75rem;
}
.snippets-text-area .setting-item-control {
flex-direction: column;
align-items: flex-end;
}
.snippets-editor-wrapper {
width: 100%;
margin-bottom: 0.75rem;
}
.snippets-editor-wrapper .cm-editor {
border: 1px solid var(--background-modifier-border);
border-radius: 4px;
font-size: var(--font-inputs);
height: 20em;
outline: none !important;
text-align: left;
}
.snippets-editor-wrapper .cm-line, .snippets-editor-wrapper .cm-lineNumbers {
font-family: var(--font-monospace);
}
.snippets-footer {
width: 100%;
display: flex;
align-items: center;
justify-content: space-between;
}
.snippets-editor-validity {
display: flex;
align-items: center;
}
.snippets-editor-validity-indicator {
color: white;
display: inline-block;
border-radius: 1em;
margin-right: 10px;
cursor: default;
visibility: hidden;
}
.snippets-editor-validity-indicator svg {
width: 16px !important;
height: 16px !important;
}
.snippets-editor-validity-indicator:hover {
color: white;
}
.snippets-editor-validity-indicator.valid {
background-color: var(--color-green);
visibility: visible;
}
.snippets-editor-validity-indicator.invalid {
background-color: var(--color-red);
visibility: visible;
}
.snippets-editor-buttons {
display: flex;
flex-direction: row;
}
.latex-suite-confirmation-modal .setting-item {
border: none;
}
.search-input-container input.latex-suite-location-input-el {
width: initial;
}
/*
Snippet color classes.
*/
/* These extra selectors enforce their color on all children, because CodeMirror does weird nesting of spans when
nesting multiple decorations. */
.latex-suite-snippet-placeholder {
border-radius: 2px;
background-color: var(--placeholder-bg);
outline: var(--placeholder-outline) solid 1px;
}
.latex-suite-snippet-placeholder-0, span.latex-suite-snippet-placeholder-0 span {
--placeholder-bg: #87cefa2e;
--placeholder-outline: #87cefa6e;
}
.theme-dark .latex-suite-snippet-placeholder-0, span.latex-suite-snippet-placeholder-0 span {
--placeholder-outline: #87cefa43;
}
.latex-suite-snippet-placeholder-1, span.latex-suite-snippet-placeholder-1 span {
--placeholder-bg: #ffa50033;
--placeholder-outline: #ffa5006b;
}
.theme-dark .latex-suite-snippet-placeholder-1, span.latex-suite-snippet-placeholder-1 span {
--placeholder-outline: #ffa5004d;
}
.latex-suite-snippet-placeholder-2, span.latex-suite-snippet-placeholder-2 span {
--placeholder-bg: #00ff0022;
--placeholder-outline: #00ff0060;
}
.theme-dark .latex-suite-snippet-placeholder-2, span.latex-suite-snippet-placeholder-2 span {
--placeholder-outline: #00ff003d;
}
/* Conceal */
span.cm-math.cm-concealed-bold {
font-weight: bold;
}
span.cm-math.cm-concealed-underline {
text-decoration: underline;
}
span.cm-math.cm-concealed-mathrm, sub.cm-math.cm-concealed-mathrm {
font-style: normal;
}
/* Conceal superscripts without changing line height */
sup.cm-math {
line-height: 0;
}
sup.cm-math, sub.cm-math {
font-style: italic;
}
/* Inline math tooltip styling */
.theme-light .cm-tooltip.cm-tooltip-cursor {
box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.028), 0px 3.4px 6.7px rgba(0, 0, 0, .042), 0px 5px 20px rgba(0, 0, 0, .07);
}
.theme-dark .cm-tooltip.cm-tooltip-cursor {
box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.1),
0px 3.4px 6.7px rgba(0, 0, 0, 0.15),
0px 0px 30px rgba(0, 0, 0, 0.27);
}
/* Highlight brackets */
.theme-light .latex-suite-highlighted-bracket, .theme-light .latex-suite-highlighted-bracket [class^="latex-suite-color-bracket-"] {
background-color: hsl(var(--accent-h), var(--accent-s), 40%, 0.3);
}
.theme-dark .latex-suite-highlighted-bracket, .theme-dark .latex-suite-highlighted-bracket [class^="latex-suite-color-bracket-"] {
background-color: hsl(var(--accent-h), var(--accent-s), 70%, 0.6);
}
/* Color matching brackets */
.theme-light .latex-suite-color-bracket-0, .theme-light .latex-suite-color-bracket-0 .cm-bracket {
color: #527aff;
}
.theme-dark .latex-suite-color-bracket-0, .theme-dark .latex-suite-color-bracket-0 .cm-bracket {
color: #47b8ff;
}
.theme-light .latex-suite-color-bracket-1, .theme-light .latex-suite-color-bracket-1 .cm-bracket {
color: #ff50b7;
}
.theme-dark .latex-suite-color-bracket-1, .theme-dark .latex-suite-color-bracket-1 .cm-bracket {
color: #ff55cd;
}
.theme-light .latex-suite-color-bracket-2, .theme-light .latex-suite-color-bracket-2 .cm-bracket {
color: #69ba00;
}
.theme-dark .latex-suite-color-bracket-2, .theme-dark .latex-suite-color-bracket-2 .cm-bracket {
color: #73ff63;
}
/* .latex-suite-color-bracket-3 {
color: #8de15c;
} */

10221
.obsidian/plugins/obsidian-pandoc/main.js vendored Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,10 @@
{
"id": "obsidian-pandoc",
"name": "Pandoc Plugin",
"version": "0.4.1",
"minAppVersion": "0.12.5",
"description": "This is a Pandoc export plugin for Obsidian. It provides commands to export to formats like DOCX, ePub and PDF.",
"author": "Oliver Balfour",
"authorUrl": "https://github.com/OliverBalfour/obsidian-pandoc",
"isDesktopOnly": true
}

View File

@ -0,0 +1,4 @@
.pandoc-plugin-error {
color: red;
}

View File

@ -0,0 +1,111 @@
{
"version": "0.7.52",
"endpoint": "https://api.openai.com/v1",
"models": [],
"api_key": "",
"encrypt_keys": false,
"selectedProvider": "OpenAI Chat (Langchain)",
"max_tokens": 5000,
"temperature": 0.7,
"frequency_penalty": 0.5,
"showStatusBar": true,
"outputToBlockQuote": false,
"freeCursorOnStreaming": false,
"allowJavascriptRun": false,
"experiment": false,
"promptsPath": "textgenerator/templates",
"textGenPath": "textgenerator/",
"prefix": "\n\n",
"tgSelectionLimiter": "^\\*\\*\\*",
"stream": true,
"context": {
"customInstructEnabled": true,
"includeClipboard": true,
"customInstruct": "Title: {{title}}\n \nStarred Blocks: {{starredBlocks}}\n\t \n{{tg_selection}}",
"contextTemplate": "Title: {{title}}\n\t\nStarred Blocks: {{starredBlocks}}\n\t \n{{tg_selection}}"
},
"requestTimeout": 300000,
"options": {
"generate-text": true,
"generate-text-with-metadata": true,
"insert-generated-text-From-template": true,
"create-generated-text-From-template": false,
"search-results-batch-generate-from-template": true,
"insert-text-From-template": false,
"create-text-From-template": false,
"show-modal-From-template": true,
"open-template-as-tool": true,
"open-playground": true,
"set_max_tokens": true,
"set-llm": true,
"set-model": true,
"packageManager": true,
"create-template": false,
"get-title": true,
"generated-text-to-clipboard-From-template": false,
"calculate-tokens": true,
"calculate-tokens-for-template": true,
"text-extractor-tool": true,
"stop-stream": true,
"custom-instruct": true,
"generate-in-right-click-menu": false,
"batch-generate-in-right-click-files-menu": true,
"tg-block-processor": true,
"reload": true,
"disable-ribbon-icons": false,
"overlay-toolbar": false,
"log-slowest-operations": false
},
"advancedOptions": {
"generateTitleInstructEnabled": false,
"generateTitleInstruct": "Generate a title for the current document (do not use * \" \\ / < > : | ? .):\n{{substring content 0 255}}",
"includeAttachmentsInRequest": false
},
"autoSuggestOptions": {
"customInstructEnabled": true,
"customInstruct": "Continue the follwing text:\nTitle: {{title}}\n{{query}}",
"systemPrompt": "",
"isEnabled": false,
"allowInNewLine": false,
"delay": 300,
"numberOfSuggestions": 5,
"triggerPhrase": " ",
"stop": ".",
"showStatus": true,
"customProvider": false,
"inlineSuggestions": false,
"overrideTrigger": " "
},
"slashSuggestOptions": {
"isEnabled": false,
"triggerPhrase": "/"
},
"extractorsOptions": {
"PDFExtractor": true,
"WebPageExtractor": true,
"YoutubeExtractor": true,
"AudioExtractor": false,
"ImageExtractorEmbded": true,
"ImageExtractor": true
},
"displayErrorInEditor": false,
"LLMProviderProfiles": {},
"LLMProviderOptions": {
"whisper": {
"base_path": "https://api.openai.com/v1",
"model": "whisper-1",
"api_key": "",
"api_version": ""
},
"OpenAI Chat (Langchain)": {
"basePath": "https://api.openai.com/v1",
"api_key": "",
"model": "gpt-4.1-2025-04-14"
}
},
"LLMProviderOptionsKeysHashed": {
"whisper.api_key": "__@#key_prefix#@__",
"OpenAI Chat (Langchain).api_key": "__@#key_prefix#@__sk-proj-oWU0tlGiv5ukuqLfedNl7PPMotGeEKY7J0KBZCvPj83AUlIzS8Iy5vO0l1I4EsYeRy8p6QS__dT3BlbkFJ05HU-1BGDxeC34A5ELUWDdlpx8YyONSQ51jdBs5F3FdLMORwGls1FNGcRq6-eL98Xh9-qXzHkA"
},
"api_key_encrypted": "__@#key_prefix#@__sk-proj-oWU0tlGiv5ukuqLfedNl7PPMotGeEKY7J0KBZCvPj83AUlIzS8Iy5vO0l1I4EsYeRy8p6QS__dT3BlbkFJ05HU-1BGDxeC34A5ELUWDdlpx8YyONSQ51jdBs5F3FdLMORwGls1FNGcRq6-eL98Xh9-qXzHkA"
}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,11 @@
{
"id": "obsidian-textgenerator-plugin",
"name": "Text Generator",
"version": "0.7.52",
"minAppVersion": "1.6.0",
"description": "Text generation using AI",
"author": "Noureddine Haouari",
"authorUrl": "https://text-gen.com",
"isDesktopOnly": false,
"fundingUrl": "https://www.buymeacoffee.com/haouarine"
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,189 @@
/*
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
if you want to view the source, please visit the github repository of this plugin
*/
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// src/main.ts
var main_exports = {};
__export(main_exports, {
default: () => TidyFootnotes
});
module.exports = __toCommonJS(main_exports);
var import_obsidian = require("obsidian");
// src/tidyFootnotes.ts
var reKey = /\[\^(.+?(?=\]))\]/gi;
var reDefinition = /^\[\^([^\]]+)\]\:/;
function isNumeric(value) {
return !isNaN(value - parseFloat(value));
}
function tidyFootnotes(editor) {
let markers = [];
let definitions = /* @__PURE__ */ new Map();
let firstDefinitionLine = -1;
let definitionsIndexed = /* @__PURE__ */ new Map();
const lineCount = editor.lineCount();
let prevKey = "";
for (let i = 0; i < lineCount; i++) {
const line = editor.getLine(i);
let isDefinition = false;
let match;
if (prevKey.length) {
const hasIndent = /^[ \t]/.test(line);
const isLastLine = i === lineCount - 1;
if (hasIndent || line.length === 0 && !isLastLine) {
const value = definitions.get(prevKey);
definitions.set(prevKey, value + "\n" + line);
markers[markers.length - 1].length++;
continue;
} else {
prevKey = "";
}
}
while ((match = reDefinition.exec(line)) !== null) {
if (match.length < 1)
return;
isDefinition = true;
let key = match[1];
let value = line.substring(match[0].length);
definitions.set(key, value);
prevKey = key;
let marker = {
key,
line: i,
index: 0,
length: 0,
isDefinition: true
};
markers.push(marker);
if (firstDefinitionLine === -1) {
firstDefinitionLine = i;
}
break;
}
if (isDefinition)
continue;
while ((match = reKey.exec(line)) !== null) {
if (match.length < 1)
return;
let key = match[1];
let marker = {
key,
line: i,
index: match.index,
length: match[0].length,
isDefinition: false
};
markers.push(marker);
if (!definitionsIndexed.has(key)) {
definitionsIndexed.set(key, {
key,
newKey: key,
isNumber: isNumeric(key),
value: ""
});
}
}
}
definitions.forEach((value, key) => {
definitionsIndexed.set(key, {
key,
newKey: key,
isNumber: isNumeric(key),
value
});
});
let count = 1;
let definitionsStr = "";
definitionsIndexed.forEach((definition, marker) => {
let key = definition.key;
if (definition.isNumber) {
const current = definitionsIndexed.get(marker);
key = count.toString();
definitionsIndexed.set(marker, {
...current,
newKey: key
});
count++;
}
definitionsStr += `[^${key}]:${definition.value}
`;
});
const markersCount = markers.length;
for (let i = markersCount - 1; i >= 0; i--) {
const marker = markers[i];
const markerLine = marker.line;
if (marker.isDefinition) {
let rangeStart, rangeEnd;
const lineEnd = markerLine + 1 + marker.length;
if (lineEnd === editor.lineCount()) {
rangeStart = { line: markerLine, ch: 0 };
rangeEnd = { line: lineEnd - 1, ch: Infinity };
} else {
rangeStart = { line: markerLine, ch: 0 };
rangeEnd = { line: lineEnd, ch: 0 };
}
if (markerLine === firstDefinitionLine) {
editor.replaceRange(definitionsStr, rangeStart, rangeEnd);
continue;
}
editor.replaceRange("", rangeStart, rangeEnd);
continue;
}
const definition = definitionsIndexed.get(marker.key);
const newKey = definition.newKey;
if (marker.key === newKey)
continue;
const line = editor.getLine(markerLine);
const prefix = line.substring(0, marker.index);
const newMarker = `[^${newKey}]`;
const suffix = line.substr(marker.index + marker.length);
const newLine = prefix + newMarker + suffix;
editor.replaceRange(
newLine,
{ line: markerLine, ch: 0 },
{ line: markerLine, ch: Infinity }
);
}
if (firstDefinitionLine == -1) {
const lineCount2 = editor.lineCount();
editor.replaceRange(
"\n\n" + definitionsStr,
{ line: lineCount2, ch: 0 },
{ line: lineCount2, ch: Infinity }
);
}
}
// src/main.ts
var TidyFootnotes = class extends import_obsidian.Plugin {
async onload() {
this.addCommand({
id: "tidy-footnotes",
name: "Tidy Footnotes",
editorCallback: (editor, view) => {
tidyFootnotes(editor);
}
});
}
};
/* nosourcemap */

View File

@ -0,0 +1,11 @@
{
"id": "obsidian-tidy-footnotes",
"name": "Tidy Footnotes",
"version": "0.1.2",
"minAppVersion": "0.11.13",
"description": "Tidy your footnotes seamlessly.",
"author": "Charlie Chao",
"authorUrl": "https://github.com/charliecm",
"fundingUrl": "https://www.buymeacoffee.com/charliecm",
"isDesktopOnly": false
}

View File

@ -0,0 +1,22 @@
{
"database": "Zotero",
"noteImportFolder": "lib/citations",
"pdfExportImageDPI": 120,
"pdfExportImageFormat": "png",
"pdfExportImageQuality": 90,
"citeFormats": [
{
"name": "Citation",
"format": "formatted-citation"
},
{
"name": "Pandoc",
"format": "pandoc",
"brackets": true
}
],
"exportFormats": [],
"citeSuggestTemplate": "[[{{citekey}}]]",
"openNoteAfterImport": false,
"whichNotesToOpenAfterImport": "first-imported-note"
}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,10 @@
{
"id": "obsidian-zotero-desktop-connector",
"name": "Zotero Integration",
"version": "3.2.1",
"minAppVersion": "1.1.1",
"description": "Insert and import citations, bibliographies, notes, and PDF annotations from Zotero.",
"author": "mgmeyers",
"authorUrl": "https://github.com/mgmeyers/obsidian-zotero-integration",
"isDesktopOnly": true
}

View File

@ -0,0 +1,238 @@
.zt-format {
border: 1px solid var(--background-modifier-border);
padding: 1rem;
background-color: var(--background-primary);
border-radius: 10px;
margin-bottom: 10px;
}
.zt-format__form {
display: flex;
flex-direction: column;
align-items: stretch;
margin-bottom: 1rem;
max-width: 600px;
}
.zt-format__form:last-child {
margin-bottom: 0;
}
.zt-format__label {
font-size: 0.9em;
font-weight: 600;
margin-bottom: 5px;
}
.is-deprecated .zt-format__label {
color: var(--text-error);
}
.zt-format__input-wrapper {
display: flex;
align-items: center;
}
.zt-format__input-wrapper textarea {
resize: vertical;
}
.zt-format__input-wrapper > *:not(.checkbox-container) {
width: 100% !important;
}
.is-deprecated .zt-format__input-wrapper button {
width: auto !important;
flex-grow: 0;
flex-shrink: 0;
margin-left: 5px;
}
.zt-format__delete-btn {
display: flex;
align-items: center;
justify-content: center;
line-height: 1;
padding: 7px 9px;
margin-left: 10px;
flex-shrink: 0;
flex-grow: 0;
}
.zt-json-viewer {
font-size: 13px;
}
.zt-json-viewer .react-json-view {
padding: 1em;
border-radius: 10px;
margin-top: 1em;
overflow: auto;
font-family: var(--font-monospace) !important;
}
.zt-json-viewer__btns {
display: flex;
align-items: center;
justify-content: flex-start;
}
.zt-json-viewer__btns label {
display: block;
font-weight: bold;
padding-top: 1em;
}
.zt-json-viewer__btns select {
font-size: 1em;
}
.zt-json-viewer__btns button {
font-size: 1em;
margin-right: 5px;
}
.zt-json-viewer__preview,
.zt-json-viewer__data {
border: 1px solid var(--background-modifier-border);
border-radius: 10px;
padding: 1em;
margin-top: 1em;
}
.zt-json-viewer__preview.error {
background-color: #ff000011;
font-family: var(--font-monospace);
}
.zt-json-viewer__preview pre {
overflow: auto;
white-space: pre-wrap;
margin: 0;
}
.zt-json-viewer__preview pre,
.zt-json-viewer__preview code {
font-family: inherit;
}
.zt-json-viewer__preview:not(.error) pre {
font-family: var(--font-text, --font-default, --default-font);
max-height: 70vh;
min-height: 400px;
}
.zt-multiselect {
width: 300px;
text-align: left;
}
.zt-multiselect input {
outline: none !important;
box-shadow: none !important;
}
.zt-format__input-note {
font-style: italic;
font-size: 0.9em;
padding-top: 10px;
margin-bottom: 10px;
}
.zt-setting-item pre,
.zt-format__input-note pre {
display: inline-block;
margin: 0;
padding: 0 6px;
background-color: var(--background-secondary-alt);
border-radius: 4px;
}
.zt-asset-success {
text-align: left;
display: flex;
}
.zt-asset-success__icon {
color: var(--interactive-success);
font-size: 24px;
margin-right: 5px;
}
.zt-asset-success__icon svg {
width: 1em !important;
height: 1em !important;
}
.zt-asset-success__message {
font-size: 0.9em;
}
.zt-suggest-title {
font-size: var(--font-ui-small);
color: var(--text-muted);
display: block;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
padding-top: var(--size-4-1);
}
.zt-suggest-loading-wrapper {
display: flex;
position: relative;
align-items: center;
justify-content: center;
padding: var(--size-4-2) 0;
}
.zt-suggest-loading,
.zt-suggest-loading:before,
.zt-suggest-loading:after {
border-radius: 999px;
width: 1em;
height: 1em;
animation-fill-mode: both;
animation: bblFadInOut 1.6s infinite ease-in-out;
}
.zt-suggest-loading {
display: block;
color: var(--text-muted);
font-size: 7px;
position: relative;
animation-delay: -0.16s;
top: -1em;
}
.zt-suggest-loading:before,
.zt-suggest-loading:after {
content: '';
position: absolute;
}
.zt-suggest-loading:before {
left: -2em;
animation-delay: -0.32s;
}
.zt-suggest-loading:after {
left: 2em;
}
.zt-color-chip {
display: inline-block;
width: 1em;
height: 1em;
border: 1px solid var(--background-modifier-border);
border-radius: var(--radius-s);
margin-right: var(--size-4-1);
}
@keyframes bblFadInOut {
0%,
80%,
100% {
box-shadow: 0 1em 0 -1.3em;
}
40% {
box-shadow: 0 1em 0 0;
}
}

23
.obsidian/snippets/idea-callout.css vendored Normal file
View File

@ -0,0 +1,23 @@
/* Established: green */
.callout[data-callout="established"] {
--callout-color: 0, 150, 0;
--callout-icon: check-circle; /* ✅ valid Lucide icon */
background-color: rgba(0, 150, 0, 0.05);
border-left: 4px solid rgb(0, 150, 0);
}
/* Proposed: blue */
.callout[data-callout="proposed"] {
--callout-color: 0, 120, 255;
--callout-icon: lightbulb; /* ✅ Lucide name is “lightbulb” (no dash) */
background-color: rgba(0, 120, 255, 0.05);
border-left: 4px solid rgb(0, 120, 255);
}
/* Speculative: purple */
.callout[data-callout="speculative"] {
--callout-color: 128, 0, 128;
--callout-icon: help-circle; /* ✅ Lucide equivalent of “question-circle” */
background-color: rgba(128, 0, 128, 0.05);
border-left: 4px solid rgb(128, 0, 128);
}

125
.obsidian/text-generator.json vendored Normal file
View File

@ -0,0 +1,125 @@
{
"packagesHash": {
"default": {
"packageId": "default",
"name": "Default Prompts Package",
"version": "0.0.9",
"minTextGeneratorVersion": "0.5.0",
"description": "This is the main package that comes with Text Generator plugin in Obsidian",
"author": "Noureddine Haouari",
"tags": "writing, brainstorming",
"authorUrl": "https://www.buymeacoffee.com/haouarine",
"repo": "text-gen/gpt-3-prompt-templates"
},
"dalle": {
"packageId": "dalle",
"name": "OpenAI Dalle Package",
"version": "0.1.1",
"minTextGeneratorVersion": "0.7.0",
"description": "The package contains some interessting Dalle-2/Dalle-3 prompt templates",
"author": "Noureddine Haouari",
"tags": "photo, dalle-2, dalle-3",
"authorUrl": "https://www.buymeacoffee.com/haouarine",
"repo": "text-gen/tg-dalle-package"
},
"huggingface": {
"packageId": "huggingface",
"name": "Huggingface Prompts Package",
"version": "0.0.4",
"minTextGeneratorVersion": "0.5.0",
"description": "Huggingface Prompts comes with Text Generator plugin in Obsidian",
"author": "Noureddine Haouari",
"tags": "writing, brainstorming, huggingface",
"authorUrl": "https://www.buymeacoffee.com/haouarine",
"repo": "text-gen/huggingface"
},
"awesomePrompts": {
"packageId": "awesomePrompts",
"name": "Awesome Prompts",
"version": "0.0.3",
"minTextGeneratorVersion": "0.5.7",
"description": "This repo includes ChatGPT prompt curation to use ChatGPT better.",
"author": "f",
"tags": "writing, brainstorming, awesome",
"authorUrl": "https://github.com/f/awesome-chatgpt-prompts",
"repo": "text-gen/awesome-tg-package"
},
"tts": {
"packageId": "tts",
"name": "Text To Speech Package",
"version": "0.0.3",
"minTextGeneratorVersion": "0.6.0",
"description": "Contains Text To Speech Templates and support for TTS for other templates",
"author": "Noureddine",
"tags": "TTS, Speak",
"authorUrl": "https://www.buymeacoffee.com/haouarine",
"repo": "text-gen/TTS"
},
"vision": {
"packageId": "vision",
"name": "Vision Package",
"version": "0.0.2",
"minTextGeneratorVersion": "0.6.0",
"description": "Contains Vision Templates and support for Vision for other templates (Scripts)",
"author": "Noureddine",
"tags": "OpenAI,markdown,gpt-4-vision,vision,images",
"authorUrl": "https://www.buymeacoffee.com/haouarine",
"repo": "text-gen/tg-vision"
},
"smartConnections": {
"packageId": "smartConnections",
"name": "Smart Connections Package",
"version": "0.0.2",
"minTextGeneratorVersion": "0.6.0",
"description": "Contains Smart Connection Templates and support for Smart Connections for other templates (Script)",
"author": "Noureddine",
"tags": "smartConnections,smart-connections",
"authorUrl": "https://www.buymeacoffee.com/haouarine",
"repo": "text-gen/tg-smartConnections"
},
"Experimental": {
"packageId": "Experimental",
"name": "Experimental Package",
"version": "0.0.2",
"minTextGeneratorVersion": "0.6.6",
"description": "Contains experimental templates",
"author": "Noureddine",
"tags": "experiments",
"authorUrl": "https://www.buymeacoffee.com/haouarine",
"repo": "text-gen/experimental-package"
},
"testExtension": {
"core": true,
"type": "feature",
"packageId": "testExtension",
"name": "test extension Package",
"version": "0.0.1",
"minTextGeneratorVersion": "0.1.0",
"description": "testing extension package",
"author": "Noureddine Haouari",
"tags": "testing",
"authorUrl": "https://www.buymeacoffee.com/haouarine",
"repo": "text-gen/gpt-3-prompt-templates",
"folderName": "testExtension",
"price": 20,
"installed": false
},
"excalidraw": {
"packageId": "excalidraw",
"name": "excalidraw package",
"version": "0.0.1",
"minTextGeneratorVersion": "0.6.0",
"description": "Contains Excalidraw Templates and support for Excalidraw for other templates (Scripts)",
"author": "Noureddine",
"tags": "OpenAI,markdown,gpt-4-vision,vision,images",
"authorUrl": "https://www.buymeacoffee.com/haouarine",
"repo": "text-gen/tg-excalidraw",
"core": true,
"folderName": "excalidrawPackage",
"price": 2
}
},
"resources": {},
"installedPackagesHash": {},
"subscriptions": []
}

305
.obsidian/workspace.json vendored Normal file
View File

@ -0,0 +1,305 @@
{
"main": {
"id": "13449f33e64774f2",
"type": "split",
"children": [
{
"id": "5235c353398dcc73",
"type": "tabs",
"children": [
{
"id": "aea7b6310a1ff6ff",
"type": "leaf",
"state": {
"type": "markdown",
"state": {
"file": "README.md",
"mode": "source",
"source": false
},
"icon": "lucide-file",
"title": "README"
}
},
{
"id": "849ec88cd31ecf9d",
"type": "leaf",
"state": {
"type": "markdown",
"state": {
"file": "chapters/02_Chapter2.md",
"mode": "source",
"source": false
},
"icon": "lucide-file",
"title": "02_Chapter2"
}
}
],
"currentTab": 1
}
],
"direction": "vertical"
},
"left": {
"id": "67922355969bb056",
"type": "split",
"children": [
{
"id": "598afa877fe1bb39",
"type": "tabs",
"children": [
{
"id": "6852f526864219b9",
"type": "leaf",
"state": {
"type": "file-explorer",
"state": {
"sortOrder": "alphabetical",
"autoReveal": false
},
"icon": "lucide-folder-closed",
"title": "Files"
}
},
{
"id": "7d301da3d1a9d5c6",
"type": "leaf",
"state": {
"type": "search",
"state": {
"query": "",
"matchingCase": false,
"explainSearch": false,
"collapseAll": false,
"extraContext": false,
"sortOrder": "alphabetical"
},
"icon": "lucide-search",
"title": "Search"
}
},
{
"id": "d48d2341f0531a13",
"type": "leaf",
"state": {
"type": "bookmarks",
"state": {},
"icon": "lucide-bookmark",
"title": "Bookmarks"
}
}
]
}
],
"direction": "horizontal",
"width": 314.5
},
"right": {
"id": "90580ebd1e9dc8ca",
"type": "split",
"children": [
{
"id": "d26d04f5808162e3",
"type": "tabs",
"children": [
{
"id": "bc1666f8a3e96276",
"type": "leaf",
"state": {
"type": "backlink",
"state": {
"file": "Overview.md",
"collapseAll": false,
"extraContext": false,
"sortOrder": "alphabetical",
"showSearch": false,
"searchQuery": "",
"backlinkCollapsed": false,
"unlinkedCollapsed": true
},
"icon": "links-coming-in",
"title": "Backlinks for Overview"
}
},
{
"id": "13d6b9a0edc96e4e",
"type": "leaf",
"state": {
"type": "outgoing-link",
"state": {
"file": "Overview.md",
"linksCollapsed": false,
"unlinkedCollapsed": true
},
"icon": "links-going-out",
"title": "Outgoing links from Overview"
}
},
{
"id": "4a16b6dfac736602",
"type": "leaf",
"state": {
"type": "tag",
"state": {
"sortOrder": "frequency",
"useHierarchy": true,
"showSearch": false,
"searchQuery": ""
},
"icon": "lucide-tags",
"title": "Tags"
}
},
{
"id": "532aba63080bec4a",
"type": "leaf",
"state": {
"type": "outline",
"state": {
"file": "Overview.md",
"followCursor": false,
"showSearch": false,
"searchQuery": ""
},
"icon": "lucide-list",
"title": "Outline of Overview"
}
},
{
"id": "c8db6b72741a9d4b",
"type": "leaf",
"state": {
"type": "mathpad-view",
"state": {},
"icon": "sigma",
"title": "Mathpad"
}
},
{
"id": "64e24401056a4d61",
"type": "leaf",
"state": {
"type": "footnotes",
"state": {
"file": "Overview.md"
},
"icon": "lucide-file-signature",
"title": "Footnotes"
}
},
{
"id": "98920b42f0f96962",
"type": "leaf",
"state": {
"type": "all-properties",
"state": {
"sortOrder": "frequency",
"showSearch": false,
"searchQuery": ""
},
"icon": "lucide-archive",
"title": "All properties"
}
},
{
"id": "c82b96de747e4f49",
"type": "leaf",
"state": {
"type": "mathpad-view",
"state": {},
"icon": "lucide-ghost",
"title": "mathpad-view"
}
},
{
"id": "d7755e6f1840f0db",
"type": "leaf",
"state": {
"type": "mathpad-view",
"state": {},
"icon": "lucide-ghost",
"title": "mathpad-view"
}
},
{
"id": "3a8c745a515b4510",
"type": "leaf",
"state": {
"type": "mathpad-view",
"state": {},
"icon": "sigma",
"title": "Mathpad"
}
}
],
"currentTab": 4
}
],
"direction": "horizontal",
"width": 200,
"collapsed": true
},
"left-ribbon": {
"hiddenItems": {
"switcher:Open quick switcher": false,
"graph:Open graph view": false,
"canvas:Create new canvas": false,
"templates:Insert template": false,
"command-palette:Open command palette": false,
"bases:Create new base": false,
"obsidian-excalidraw-plugin:New drawing": false,
"mathpad:Open Mathpad": false,
"obsidian-kanban:Create new board": false
}
},
"active": "849ec88cd31ecf9d",
"lastOpenFiles": [
"build/b3.html",
"build/b3.tex",
"build/Paths-to-Perception.tex",
"build/Paths-to-Perception.html",
"build/conf/style.css",
"build/lib/mathjax/ui/safe.js",
"build/lib/mathjax/ui/menu.js",
"build/lib/mathjax/ui/lazy.js",
"build/lib/mathjax/ui",
"build/lib/mathjax/sre/mathmaps/sv.json",
"build/lib/mathjax/sre/mathmaps/nn.json",
"build/lib/img/unit-circle-with-tau.png",
"build/lib/img/unit-circle-with-pi.png.png",
"build/lib/img/unit-circle-with-pi.png",
"build/lib/img/udir-proximity.png",
"build/lib/img/directed-proximity.png",
"build/lib/img/Unit_circle_angles_color.png",
"build/lib/img/Revolving_circles.svg",
"build/lib/img/Revolving_circles.480x480_white.png",
"build/lib/img/Revolving_circles.480x480.png",
"build/lib/img/Poo.png",
"README.md",
"chapters/02_Chapter2.md",
"chapters/00_Introduction.md",
"chapters/01_Chapter1.md",
"pm/Book Action Items.md",
"chapters/Citations.md",
"chapters/Terminology.md",
"chapters/Unitfication.md",
"chapters/03_Cylindrical_Spacetime.md",
"chapters/07_Consciousness_Continued.md",
"chapters/04_State_Space_Locality.md",
"conf/frontmatter_epub.md",
"lib/mathjax/package/README.md",
"pm/Outline.md",
"Chapters/01_Conciousness.md",
"chapters/06_Acausal_Computation.md",
"chapters/05_Causality.md",
"Chapters/00_Introduction.md",
"Chapters/04_State_Space_Locality.md",
"Chapters/02_Unitfication.md",
"Chapters/Unitfication.md",
"Chapters/07_Consciousness_Continued.md",
"lib/citations/wolframWhatConsciousnessNew2021.md",
"Chapters/06_Acausal_Computation.md",
"Chapters/05_Causality.md"
]
}

26
Makefile Normal file
View File

@ -0,0 +1,26 @@
PANDOC = pandoc
BASE = conf/pandoc.yaml
all: build/pdf build/epub build/html
pdf:
@mkdir -p build
$(PANDOC) --defaults=$(BASE) --defaults=conf/pdf.yaml
epub:
@mkdir -p build/media
$(PANDOC) --defaults=$(BASE) --defaults=conf/epub.yaml
html:
@mkdir -p build/lib/img build/lib/mathjax build/conf
cp -r lib/img build/lib/
cp -r lib/mathjax build/lib/
cp conf/style.css build/conf/
$(PANDOC) --defaults=$(BASE) --defaults=conf/html.yaml
latex:
@mkdir -p build
pandoc --defaults=$(BASE) --defaults=conf/latex.yaml
clean:
rm -rf build

171
README.md Normal file
View File

@ -0,0 +1,171 @@
# beautiful-book-builder
This is a basic book builder template based on a Pandoc build process in conjunction with a number of other tools to generate PDF, ODT, HTML, LaTex, and Epub book formats from Markdown source content in an Obsidian vault.
## Dependencies
For Debian / ZorinOS and likely Ubuntu based systems.
> It would be nice to roll a setup script to take care of this.
#### Zotero
- https://www.zotero.org/
```
sudo cp ./scripts/deps/zotero.list /etc/apt/sources.list.d/
```
```
sudo apt update
```
```
sudo apt install zotero
```
#### Zotero Connector Browser Plugin
- https://chromewebstore.google.com/detail/zotero-connector/ekhagklcjbdpajgpjgmbionohlpdbjgc
Provides you the ability to auto add Web resources to your Zotero citation database.
#### Obsidian
- https://obsidian.md/
- [Deb Package](https://github.com/obsidianmd/obsidian-releases/releases/download/v1.9.14/obsidian_1.9.14_amd64.deb)
```
sudo apt install https://github.com/obsidianmd/obsidian-releases/releases/download/v1.9.14/obsidian_1.9.14_amd64.deb
```
#### Pandoc
- https://pandoc.org/
- [Download](https://github.com/jgm/pandoc/releases/tag/3.8.2.1)
```
sudo apt install https://github.com/jgm/pandoc/releases/download/3.8.2.1/pandoc-3.8.2.1-1-amd64.deb
```
#### make
```
sudo apt install make
```
#### texlive
```
sudo apt install texlive texlive-xetex texlive-latex-extra texlive-fonts-recommended texlive-fonts-extra
```
#### lmodern
```
apt install lmodern
```
#### epubcheck
```
sudo apt install epubcheck
```
#### foliate
- https://johnfactotum.github.io/foliate/
```
sudo apt install https://github.com/johnfactotum/foliate/releases/download/2.6.4/com.github.johnfactotum.foliate_2.6.4_all.deb
```
#### calibre
- https://calibre-ebook.com
```
sudo apt install calibre
```
#### MathJax
- https://www.mathjax.org/
```
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
```
# Editing the Book
### Configuration
- Edit the `conf/pandoc.yaml` file to add or remove chapter Markdown source `input-files` to the book.
There are a number of other config files for each format:
```
conf
├── epub-metadata.xml
├── epub_template.html
├── epub.yaml
├── frontmatter_epub.md
├── frontmatter_epub.xhtml
├── frontmatter.html
├── frontmatter.tex
├── header.tex
├── html.yaml
├── latex.yaml
├── pandoc.yaml
├── pdf.yaml
├── style.css
└── style_epub.css
```
#### Per format Configs
- `pdf.yaml`
- `html.yaml`
- `latex.yaml`
- `epub.yaml`
### FrontMatter Config
There are 2 Version of the FrontMatter for PDF, and HTML bases formats that set the Title, Author, Verizon, Copyright, etc...
- `frontmatter.tex`
- `frontmatter.html`
- `frontmatter_epub.*` - Work in Progress
> There is probably a better way to do this.
### Editing Content
To edit the book open the `beautiful-book-builder` directory as an Obsidian Vault.
- Edit the Markdown content in the `chapters` directory.
### Citations
> Note: the Zotero database needs configured to export automatically to `lib/citations.bib`
To insert a Zotero Citation
- Ensure the Zotero App and DB are running on you system.
- Alt + I (to insert citation)
- Search for and select citation reference
# Building the Book
#### PDF
```
make pdf
```
#### HTML
```
make html
```
#### LaTex
```
make latex
```
#### EPub
> Note: This configuration still needs work.
```
make epub
```

42
build.sh Executable file
View File

@ -0,0 +1,42 @@
#!/bin/bash
# set -e
# echo "=== Building PDF ==="
# pandoc --defaults=pandoc.yaml -o build/Paths-to-Perception.pdf
# echo "=== Building EPUB ==="
# pandoc --defaults=pandoc.yaml \
# # --mathjax \
# -t epub \
# --epub-cover-image=lib/img/Revolving_circles.480x480_white.png \
# -o build/Paths-to-Perception.epub
# echo "=== Building HTML ==="
# pandoc --defaults=pandoc.yaml \
# # --mathjax \
# -t html5 \
# -s \
# -o build/Paths-to-Perception.html
# echo "=== Done ==="
# # Open PDF automatically if on macOS
# if command -v open >/dev/null; then
# open build/Paths-to-Perception.pdf
# fi
set -e
echo "=== PDF ==="
pandoc --defaults=conf/pandoc.yaml --defaults=conf/pdf.yaml
echo "=== EPUB ==="
pandoc --defaults=conf/pandoc.yaml --defaults=conf/epub.yaml \
--epub-cover-image=lib/img/Revolving_circles.480x480_white.png
echo "=== HTML ==="
pandoc --defaults=conf/pandoc.yaml --defaults=conf/html.yaml
echo "✅ All formats built in ./build"

947
build/b3.html Normal file
View File

@ -0,0 +1,947 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="">
<head>
<meta charset="utf-8" />
<meta name="generator" content="pandoc" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
<title>00_Introduction</title>
<style>
/* Default styles provided by pandoc.
** See https://pandoc.org/MANUAL.html#variables-for-html for config info.
*/
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
div.columns{display: flex; gap: min(4vw, 1.5em);}
div.column{flex: auto; overflow-x: auto;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
/* The extra [class] is a hack that increases specificity enough to
override a similar rule in reveal.js */
ul.task-list[class]{list-style: none;}
ul.task-list li input[type="checkbox"] {
font-size: inherit;
width: 0.8em;
margin: 0 0.8em 0.2em -1.6em;
vertical-align: middle;
}
.display.math{display: block; text-align: center; margin: 0.5rem auto;}
/* CSS for syntax highlighting */
html { -webkit-text-size-adjust: 100%; }
pre > code.sourceCode { white-space: pre; position: relative; }
pre > code.sourceCode > span { display: inline-block; line-height: 1.25; }
pre > code.sourceCode > span:empty { height: 1.2em; }
.sourceCode { overflow: visible; }
code.sourceCode > span { color: inherit; text-decoration: inherit; }
div.sourceCode { margin: 1em 0; }
pre.sourceCode { margin: 0; }
@media screen {
div.sourceCode { overflow: auto; }
}
@media print {
pre > code.sourceCode { white-space: pre-wrap; }
pre > code.sourceCode > span { text-indent: -5em; padding-left: 5em; }
}
pre.numberSource code
{ counter-reset: source-line 0; }
pre.numberSource code > span
{ position: relative; left: -4em; counter-increment: source-line; }
pre.numberSource code > span > a:first-child::before
{ content: counter(source-line);
position: relative; left: -1em; text-align: right; vertical-align: baseline;
border: none; display: inline-block;
-webkit-touch-callout: none; -webkit-user-select: none;
-khtml-user-select: none; -moz-user-select: none;
-ms-user-select: none; user-select: none;
padding: 0 4px; width: 4em;
color: #aaaaaa;
}
pre.numberSource { margin-left: 3em; border-left: 1px solid #aaaaaa; padding-left: 4px; }
div.sourceCode
{ }
@media screen {
pre > code.sourceCode > span > a:first-child::before { text-decoration: underline; }
}
code span.al { color: #ff0000; font-weight: bold; } /* Alert */
code span.an { color: #60a0b0; font-weight: bold; font-style: italic; } /* Annotation */
code span.at { color: #7d9029; } /* Attribute */
code span.bn { color: #40a070; } /* BaseN */
code span.bu { color: #008000; } /* BuiltIn */
code span.cf { color: #007020; font-weight: bold; } /* ControlFlow */
code span.ch { color: #4070a0; } /* Char */
code span.cn { color: #880000; } /* Constant */
code span.co { color: #60a0b0; font-style: italic; } /* Comment */
code span.cv { color: #60a0b0; font-weight: bold; font-style: italic; } /* CommentVar */
code span.do { color: #ba2121; font-style: italic; } /* Documentation */
code span.dt { color: #902000; } /* DataType */
code span.dv { color: #40a070; } /* DecVal */
code span.er { color: #ff0000; font-weight: bold; } /* Error */
code span.ex { } /* Extension */
code span.fl { color: #40a070; } /* Float */
code span.fu { color: #06287e; } /* Function */
code span.im { color: #008000; font-weight: bold; } /* Import */
code span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Information */
code span.kw { color: #007020; font-weight: bold; } /* Keyword */
code span.op { color: #666666; } /* Operator */
code span.ot { color: #007020; } /* Other */
code span.pp { color: #bc7a00; } /* Preprocessor */
code span.sc { color: #4070a0; } /* SpecialChar */
code span.ss { color: #bb6688; } /* SpecialString */
code span.st { color: #4070a0; } /* String */
code span.va { color: #19177c; } /* Variable */
code span.vs { color: #4070a0; } /* VerbatimString */
code span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warning */
/* CSS for citations */
div.csl-bib-body { }
div.csl-entry {
clear: both;
}
.hanging-indent div.csl-entry {
margin-left:2em;
text-indent:-2em;
}
div.csl-left-margin {
min-width:2em;
float:left;
}
div.csl-right-inline {
margin-left:2em;
padding-left:1em;
}
div.csl-indent {
margin-left: 2em;
} </style>
<link rel="stylesheet" href="conf/style.css" />
</head>
<body>
<div class="frontmatter">
<!-- Title Page -->
<h1 style="margin-top:3em; font-size:2.4em; text-align:center;">Big Beautiful Book</h1>
<h2 style="text-align:center; font-weight:normal;">A book</h2>
<div style="text-align:center; margin:2em 0;">
<img src="lib/img/Revolving_circles.480x480_white.png" alt="Cover illustration" style="max-width:240px;">
</div>
<h3 style="text-align:center;">John Haverlack</h3>
<p style="text-align:center;">© 2025 — CC BY-ND 4.0</p>
<hr style="margin:3em 0;">
<!-- Metadata Page (PDF analog) -->
<div style="text-align:center; margin-top:5em;">
<p><strong>Author</strong>: John Haverlack</p>
<p><strong>Copyright</strong>: © 2025 John Haverlack</p>
<p><strong>License</strong>: CC BY-ND 4.0</p>
<p><strong>Version</strong>: 0.0.1</p>
<p><strong>Date</strong>: 2025-11-05</p>
</div>
<hr style="margin:3em 0;">
<!-- Image attribution + perception note (PDF analog) -->
<div style="max-width:40em; margin:auto;">
<div style="width:100%; text-align:center; display:block; margin:1em 0;">
<img src="lib/img/Revolving_circles.480x480_white.png"
alt="Revolving Circles optical illusion"
style="display:inline-block; max-width:200px;">
</div>
<p style="font-size:0.9em; text-align:center;">
<em>“Revolving Circles.” n.d. Accessed October 31, 2025.</em><br>
<a href="https://en.wikipedia.org/wiki/File/Revolving_circles.svg">Wikipedia source</a>
</p>
<p>
The cover image presents a visual illusion of motion. When you focus on the
central point and move the page toward or away from your eyes, the concentric
circles appear to rotate.
</p>
<p>
This reflects a central theme of this work: perception shapes what we think of as
“reality.” In this illusion, motion exists only in our minds. We perceive, we do
not directly know; our brains construct experience.
</p>
</div>
<hr style="margin:4em 0;">
</div>
<script>
window.MathJax = {
tex: { inlineMath: [['$', '$'], ['\\(', '\\)']] },
svg: { fontCache: 'global' }
};
</script>
<script src="lib/mathjax/tex-mml-chtml.js"></script>
<nav id="TOC" role="doc-toc">
<h2 id="toc-title">Contents</h2>
<ul>
<li><a href="#introduction" id="toc-introduction">Introduction</a>
<ul>
<li><a href="#conventions" id="toc-conventions">Conventions</a>
<ul>
<li><a href="#new-concepts" id="toc-new-concepts">New Concepts</a></li>
</ul></li>
</ul></li>
<li><a href="#chapter-1" id="toc-chapter-1">Chapter 1</a></li>
<li><a href="#example-content" id="toc-example-content">Example
Content</a>
<ul>
<li><a href="#si-conversion-factors" id="toc-si-conversion-factors">SI
Conversion Factors</a></li>
<li><a href="#physical-constants" id="toc-physical-constants">Physical
Constants</a></li>
<li><a href="#fine-structure-constant"
id="toc-fine-structure-constant">Fine Structure Constant</a></li>
<li><a href="#newtons-law-of-gravity"
id="toc-newtons-law-of-gravity">Newtons Law of Gravity</a>
<ul>
<li><a href="#relativistic-energy-momentum-relation"
id="toc-relativistic-energy-momentum-relation">Relativistic Energy
Momentum Relation</a></li>
</ul></li>
<li><a href="#plancks-constant" id="toc-plancks-constant">Plancks
Constant</a></li>
<li><a href="#planck-length" id="toc-planck-length">Planck
Length</a></li>
<li><a href="#fine-structure-constant-1"
id="toc-fine-structure-constant-1">Fine Structure Constant</a></li>
<li><a href="#sage-code" id="toc-sage-code">Sage Code</a></li>
</ul></li>
<li><a href="#terminology" id="toc-terminology">Terminology</a></li>
<li><a href="#citations" id="toc-citations">Citations</a></li>
</ul>
</nav>
<h1 id="introduction">Introduction</h1>
<blockquote>
<p><em>If I have seen further it is by standing on the shoulders of
Giants.</em></p>
<p> Isaac Newton <span class="citation"
data-cites="IsaacNewtonLetter">(<a href="#ref-IsaacNewtonLetter"
role="doc-biblioref"><span>“Isaac <span>Newton</span> Letter to
<span>Robert Hooke</span>, 1675,”</span> n.d.</a>)</span></p>
</blockquote>
<h2 id="conventions">Conventions</h2>
<p>In this book well use a few conventions.</p>
<h3 id="new-concepts">New Concepts</h3>
<p>As many of the topics discussed in this book are a mix of
<strong>established</strong> math and physics, <strong>proposed</strong>
dualistic interpretations of established ideas, and also
<strong>speculative</strong> ideas that I dont yet know how to address,
I wanted a way to clearly distinguish these concepts. Ive come up with
the following convention to highlight these classes of concepts to
indicate their level of mainstream acceptance.</p>
<p>In this book, established concept may be highlighted in green, and
represent mainstream physics or math concepts.</p>
<div class="callout-established">
<p><strong>Established Concept</strong></p>
<p> Einsteins Relativistic Dynamics Equations <span
class="math display"><em>E</em><sup>2</sup>=(<em>m</em><sub>0</sub> ⋅ <em>c</em><sup>2</sup>)<sup>2</sup>+(<em>p</em> ⋅ <em>c</em>)<sup>2</sup></span></p>
</div>
<p>New ideas proposed by the author which have not been peer reviewed,
verified or tested, and should be looked at with scrutiny.</p>
<div class="callout-proposed">
<p><strong>Proposed Concept</strong></p>
<p> With the speed of light, <span
class="math inline"><em>c</em>=1</span>: <span
class="math display"><em>E</em><sup>2</sup>=<em>m</em><sub>0</sub><sup>2</sup>+<em>p</em><sup>2</sup></span></p>
</div>
<p>Speculative Idea, that the author wonders about, but does not know
how to demonstrate, or ideas that need further treatment to prove or
disprove.</p>
<div class="callout-speculative">
<p><strong>Speculative Concept</strong></p>
<p> With the speed of light, <span
class="math inline"><em>c</em>=1</span>: <span
class="math display"><em>E</em><sup>2</sup>=<em>m</em><sub>0</sub><sup>2</sup>+<em>p</em><sup>2</sup></span></p>
</div>
<h1 id="chapter-1">Chapter 1</h1>
<p>Blah blah blah</p>
<h1 id="example-content">Example Content</h1>
<p>In <span class="math inline"><em>R</em><em>ν</em></span> the <a
href="https://en.wikipedia.org/wiki/Planck_units#Planck_length">Planck
Length</a> is the universal unit for measurement of distance, and is
defined approximately to be: <span
class="math display">$$\boxed{L_P=\sqrt{\hbar}=5.72928\times10^{-35}m=1
L}$$</span> Where <span class="math inline">1 <em>L</em></span>, is 1
Planck Length of distance.</p>
<h3 id="si-conversion-factors">SI Conversion Factors</h3>
<p>The following conversion factors can be used to convert observable
quantities of measure from the <em>SI</em> system of units to <span
class="math inline"><em>R</em><em>ν</em></span> to ~6 significant
digits.</p>
<table>
<colgroup>
<col style="width: 32%" />
<col style="width: 9%" />
<col style="width: 58%" />
</colgroup>
<thead>
<tr>
<th>Conversion Factor</th>
<th>Symbol</th>
<th>Value</th>
</tr>
</thead>
<tbody>
<tr>
<td>meters to Planck Length</td>
<td><span
class="math inline"><em>χ</em><sub><em>P</em></sub></span></td>
<td><span class="math inline">$1.74542\times10^{34}
\frac{L}{m}$</span></td>
</tr>
<tr>
<td>seconds to Planck Length</td>
<td><span
class="math inline"><em>τ</em><sub><em>p</em></sub></span></td>
<td><span class="math inline">$5.23264\times10^{42}
\frac{L}{s}$</span></td>
</tr>
<tr>
<td>mass to Planck Length</td>
<td><span
class="math inline"><em>G</em><sub><em>P</em></sub></span></td>
<td><span class="math inline">$1.62871\times10^8
\frac{L}{kg}$</span></td>
</tr>
<tr>
<td>energy to Planck Length</td>
<td><span
class="math inline"><em>E</em><sub><em>P</em></sub></span></td>
<td><span class="math inline">$1.81219\times10^9
\frac{L}{J}$</span></td>
</tr>
<tr>
<td>momentum to Planck Length</td>
<td><span
class="math inline"><em>P</em><sub><em>P</em></sub></span></td>
<td><span class="math inline">$5.43280\times10^{-1} \frac{L\cdot s}{kg
\cdot m}$</span></td>
</tr>
<tr>
<td>temperature to Planck Length</td>
<td><span
class="math inline"><em>k</em><sub><em>P</em></sub></span></td>
<td><span class="math inline">$2.501998\times10^{-14}
\frac{L}{K}$</span></td>
</tr>
<tr>
<td>charge to Planck Length</td>
<td><span
class="math inline"><em>C</em><sub><em>P</em></sub></span></td>
<td><span class="math inline">$1.89007\times10^{18}
\frac{L}{C}$</span></td>
</tr>
</tbody>
</table>
<h3 id="physical-constants">Physical Constants</h3>
<p>Applying conversion factors from the table above, we can convert SI
values to Reduced Natural Units. For example, performing this analysis
on the the speed of light yields a unit-less number with a value of
1:</p>
<p><span class="math inline">$c = 299792458 \frac{m}{s} = 299792458
\frac{m}{s} \cdot 1.74542\times10^{34} \frac{L}{m} \cdot
\frac{1}{5.23264\times10^{42} \frac{L}{s}} = 1.00000$</span></p>
<table>
<colgroup>
<col style="width: 22%" />
<col style="width: 9%" />
<col style="width: 45%" />
<col style="width: 22%" />
</colgroup>
<thead>
<tr>
<th>Quantity</th>
<th>Symbol</th>
<th>SI</th>
<th><span class="math inline"><em>ν</em></span></th>
</tr>
</thead>
<tbody>
<tr>
<td>Speed of Light</td>
<td><span class="math inline"><em>c</em></span></td>
<td><span class="math inline">$299792458 \frac{m}{s}$</span></td>
<td>1</td>
</tr>
<tr>
<td>Reduced Gravitational Constant</td>
<td><span class="math inline"><em>G</em><sub>0</sub></span></td>
<td><span class="math inline">$8.38659\times10^{-10} \frac{m^3}{kg \cdot
s^2}$</span></td>
<td>1</td>
</tr>
<tr>
<td>Boltzmanns Constant</td>
<td><span class="math inline"><em>k</em></span></td>
<td><span class="math inline">$k=1.380649\times10^-23
\frac{J}{K}$</span></td>
<td>1</td>
</tr>
<tr>
<td>Permittivity of Free Space</td>
<td><span
class="math inline"><em>ϵ</em><sub><em>o</em></sub></span></td>
<td><span class="math inline">$8.854187817620\times10^{-12}
\frac{C^{2}s^2}{kg \cdot m^3}$</span></td>
<td>1</td>
</tr>
<tr>
<td>Permeability of Free Space</td>
<td><span
class="math inline"><em>μ</em><sub><em>o</em></sub></span></td>
<td><span class="math inline">$\huge{\frac{1}{\epsilon_{o} \cdot
c^{2}}}$</span></td>
<td>1</td>
</tr>
<tr>
<td>Reduced Plancks Constant</td>
<td><span class="math inline"></span></td>
<td><span class="math inline">$1.054571726\times10^-34 \frac{kg \cdot
m^2}{s}$</span></td>
<td><span class="math inline">1<em>L</em><sup>2</sup></span></td>
</tr>
<tr>
<td>Mass of the Electron</td>
<td><span
class="math inline"><em>m</em><sub><em>e</em></sub></span></td>
<td><span
class="math inline">9.10938×10<sup>31</sup><em>k</em><em>g</em></span></td>
<td><span
class="math inline">1.48366×10<sup>22</sup><em>L</em></span></td>
</tr>
<tr>
<td>Charge of the Electron</td>
<td><span class="math inline"><em>e</em><sup></sup></span></td>
<td><span
class="math inline">1.60218×10<sup>19</sup><em>C</em></span></td>
<td><span
class="math inline">3.02822×10<sup>1</sup><em>L</em></span></td>
</tr>
<tr>
<td>Unit Cycle</td>
<td><span class="math inline"><em>Θ</em></span></td>
<td><span
class="math inline">2<em>π</em>=6.28318... <em>R</em><em>a</em><em>d</em><em>i</em><em>a</em><em>n</em><em>s</em></span></td>
<td><span
class="math inline">1<em>τ</em>=6.28318... <em>R</em><em>a</em><em>d</em><em>i</em><em>a</em><em>n</em><em>s</em></span></td>
</tr>
</tbody>
</table>
<h2 id="fine-structure-constant">Fine Structure Constant</h2>
<p>As a consistency check, we compute the <em><a
href="https://en.wikipedia.org/wiki/Fine-structure_constant">Fine
Structure Constant</a></em> using Reduced Natural Units which is a unit
less ratio that should be independent of our system of units.</p>
<p><span
class="math inline">$\huge{\alpha=\frac{e^2}{4\pi\epsilon_o\hbar
c}=\frac{e^2}{2\tau}=0.00729735≈\frac{1}{137}}$</span></p>
<h4 id="dimensional-analysis">Dimensional Analysis</h4>
<p>The reader should be familiar with high school physics and chemistry
<a href="https://en.wikipedia.org/wiki/Dimensional_analysis">dimensional
analysis</a>.</p>
<ul>
<li><span
class="math inline">1 <em>m</em><em>e</em><em>t</em><em>e</em><em>r</em> (<em>m</em>)=100 <em>c</em><em>e</em><em>n</em><em>t</em><em>i</em><em>m</em><em>e</em><em>t</em><em>e</em><em>r</em><em>s</em> (<em>c</em><em>m</em>)</span></li>
<li><span
class="math inline">1 <em>k</em><em>i</em><em>l</em><em>o</em><em>m</em><em>e</em><em>t</em><em>e</em><em>r</em> (<em>k</em><em>m</em>)=1000 <em>m</em><em>e</em><em>t</em><em>e</em><em>r</em><em>s</em> (<em>m</em>)</span></li>
<li><span
class="math inline">1 <em>m</em><em>i</em><em>l</em><em>e</em>=5280 <em>f</em><em>e</em><em>e</em><em>t</em> (<em>f</em><em>t</em> <em>o</em><em>r</em> <sup></sup>)</span></li>
<li><span class="math inline">$1\ foot\ (ft\ or\ ') = 12\ inches\ (in\
or\ ")$</span></li>
<li><span class="math inline">$1\ inch\ (") = 2.54\ centimeters\
(cm)$</span></li>
</ul>
<p>How many kilometers are in 1 mile? <span class="math inline">$1\ mile
= 1\ mile \times \frac{5280\ ft}{mile} \times \frac{12\ in}{ft} \times
\frac{2.54\ cm}{in}\times \frac{1\ m}{100 cm} \times \frac{1\ km}{1000
m} = \frac{5280 \times 12 \times 2.54}{100 \times 1000}\ km =
\frac{160934.40}{100000}\ km = 1.6\ km$</span> Note that each unit in
the denominator cancels with one if the numerator until we are left with
only km.</p>
<h2 id="newtons-law-of-gravity">Newtons Law of Gravity</h2>
<p>The force of gravity (<span
class="math inline"><em>F</em><sub><em>g</em></sub></span>) between 2
masses, <span class="math inline"><em>m</em>1</span> and <span
class="math inline"><em>m</em>2</span> separated by distance <span
class="math inline"><em>r</em></span> is given by <a
href="https://en.wikipedia.org/wiki/Newton%27s_law_of_universal_gravitation">Newtons
Law of Gravity</a>:</p>
<p><span class="math inline">$F_{g} = G \frac{m_{1}
m_{2}}{r^{2}}$</span></p>
<p>Where <span class="math inline"><em>G</em></span>, is the <a
href="http://en.wikipedia.org/wiki/Gravitational_Constant">Gravitational
Constant</a>.</p>
<p><span class="math inline">$G = 6.67430 \times 10^{-11}\
N\frac{m^2}{kg^2}$</span></p>
<p>The strength of gravitational force follow the inverse square law
distributing gravitational flux over the surface area of a sphere (<span
class="math inline">4<em>π</em><em>r</em><sup>2</sup></span>).</p>
<h4 id="inverse-square-law">Inverse Square Law</h4>
<p>Any source of a signal strength (<span
class="math inline"><em>S</em><sub>0</sub></span>) that radiates
isotropically in 3-dimensional space will distribute that signal
strength (<span class="math inline"><em>S</em><sub>0</sub></span>) over
the surface area of a sphere (<span
class="math inline"><em>S</em><em>A</em>=4<em>π</em><em>r</em></span>)
of radius (<span class="math inline"><em>r</em></span>). Such that the
intensity (<span class="math inline"><em>I</em></span>) at distance
(<span class="math inline"><em>r</em></span>) is:</p>
<p><span class="math display">$$I(r) = \frac{S_0}{4 \pi
r^{2}}=\frac{S_0}{2 \tau r^{2}}$$</span> <img
src="lib/img/Inverse_square_law.svg.png" alt="inverse square law" />
#### <span class="math inline"><em>R</em><em>ν</em></span> Reduced
Gravitational Constant In this version of Newtons Law of Gravity we
introduce a new constant <span
class="math inline"><em>G</em><sub>0</sub></span>, the reduced
gravitational constant to accommodate for the factor of <span
class="math inline">4<em>π</em>=2<em>τ</em></span> which is has been
integrated in the SI version of the gravitational constant.</p>
<p><span class="math inline">$F_g =G \frac{m_{1} m_{2}}{r^{2}}= G_0
\frac{m_{1} m_{2}}{4 \pi r^{2}}=G_0 \frac{m_{1} m_{2}}{2 \tau
r^{2}}$</span></p>
<p>Where:</p>
<p><span class="math inline">$G = \frac{G_{0}}{2\tau} = 6.67384 \times
10^{-11} \frac{N \cdot m^2}{kg^2}$</span></p>
<p>Analyzing the units: <span class="math display">$$\frac{N \cdot
m^2}{kg^2} = \left( \frac{\left( kg \cdot \frac{m}{s^2} \right) \cdot
m^2}{kg^2} \right)=\frac{m^3}{s^2 kg}$$</span> Converting seconds to
meters with the SI speed of light as a conversion factor: <span
class="math display">$$\frac{m^3}{s^2
kg}\cdot\frac{1}{c^2}=\frac{m^3}{s^2
kg}\cdot\frac{s^2}{m^2}=\frac{m}{kg}$$</span></p>
<p>Thus where space and time are measured in units of meters, the
reduced gravitational constant, is:</p>
<p><span class="math display">$$\boxed{G_0=\frac{2\tau
G}{c^2}=\frac{2\tau \cdot 6.67384 \times 10^{-11}}{299792458^2}
\frac{m}{kg} = 9.33135 \times 10^-27 \frac{m}{kg}}$$</span></p>
<blockquote>
<p>Observation This implies that not only can space an time be measure
in units of meters, but so can mass.</p>
</blockquote>
<h3 id="relativistic-energy-momentum-relation">Relativistic Energy
Momentum Relation</h3>
<p>Einsteins <a
href="https://en.wikipedia.org/wiki/Energy%E2%80%93momentum_relation">Relativistic
Energy Momentum</a> relationship shows a Pythagorean relation between
the total energy (<span class="math inline"><em>E</em></span>), rest
mass (<span class="math inline"><em>m</em><sub>0</sub></span>) and
momentum (<span class="math inline"><em>p</em></span>) of a system.</p>
<p><span
class="math inline"><em>E</em><sup>2</sup>=(<em>m</em><sub>0</sub> ⋅ <em>c</em><sup>2</sup>)<sup>2</sup>+(<em>p</em> ⋅ <em>c</em>)<sup>2</sup></span></p>
<p>Where space and time are both measure in units of meters, c=1.</p>
<p><span
class="math inline"><em>E</em><sup>2</sup>=(<em>m</em><sub>0</sub>)<sup>2</sup>+(<em>p</em>)<sup>2</sup></span></p>
<p>From this we can see that Energy, Momentum and Mass have equivalent
units.</p>
<blockquote>
<p><em>While we do not really know what energy, mass and momentum are we
know that they are fundamentally “made” out of the same stuff because
they have the same units.</em></p>
</blockquote>
<h5 id="objects-of-mass-at-rest">Objects of mass at rest</h5>
<p>For an object at rest with no momentum (<span
class="math inline"><em>p</em>=0</span>) we see Einsteins famous
equations:</p>
<p><span
class="math inline"><em>E</em>=<em>m</em><sub>0</sub> ⋅ <em>c</em><sup>2</sup></span></p>
<p>Or, with <span class="math inline"><em>c</em>=1</span>, this is
much simpler to understand. Energy = Mass</p>
<p><span class="math inline"><em>E</em>=<em>m</em><sub>0</sub></span>
##### Zero mass objects moving at the speed of light And for objects
with no mass, like photos, (<span
class="math inline"><em>m</em><sub>0</sub>=0</span>):</p>
<p><span
class="math inline"><em>E</em>=<em>p</em><em>c</em></span></p>
<p>Or, with <span class="math inline"><em>c</em>=1</span>, this is
much simpler to understand. Energy = Momentum</p>
<p><span class="math inline"><em>E</em>=<em>p</em></span></p>
<h2 id="plancks-constant">Plancks Constant</h2>
<p>The <a href="https://en.wikipedia.org/wiki/Planck_constant">Reduced
Planck constant</a> , ħ, represents a conversion factor for relating the
frequency, <span class="math inline"><em>ω</em></span> (in <span
class="math inline">2<em>π</em></span> radians per second), of a photon
to the energy of that photon. This can easily be seen from the simple
but profound relationship:</p>
<p><span class="math inline"><em>E</em>= ℏ<em>ω</em></span></p>
<p>Where:</p>
<p><span
class="math inline">ℏ =1.054571726×10<sup>34</sup><em>J</em> ⋅ <em>s</em></span></p>
<p>and</p>
<p><span class="math inline">$J \cdot s =
{kg}\cdot\frac{m^2}{s}$</span></p>
<blockquote>
<p>Reduced Plancks Constant <span class="math inline">$\hbar =
\frac{h}{2\pi} = \frac{h}{\tau}$</span></p>
</blockquote>
<p>Simplifying our units by converting time and mass to units of meters:
<span class="math display">$$\boxed{\hbar=1.054571726 \times 10^{34}
{kg}\cdot\frac{m^2}{s}\cdot\frac{G_0}{c}=3.282462\times10^{-69}m^2}$$</span></p>
<p>Which suggest that the Plank constant can be interpreted as an areas
for which the square root of is suspiciously close to the Plank
length:</p>
<p><span
class="math display">$$\boxed{\sqrt{\hbar}=\sqrt{3.282462\times10^{-69}m^2}=5.72928\times10^{-35}m}$$</span></p>
<h4 id="planck-area">Planck Area</h4>
<p>The <a
href="https://en.wikipedia.org/wiki/Planck_units#Derived_units">Planck
Area</a> is the square of the <a
href="https://en.wikipedia.org/wiki/Planck_units#Planck_length">Planck
Length</a>.</p>
<p><span class="math inline">$l_{P}= \sqrt{\frac{\hbar
G}{c^3}}$</span></p>
<p>and <span class="math inline">$l_{P}^{2}= \frac{\hbar
G}{c^3}$</span></p>
<p>In <span class="math inline"><em>R</em><em>ν</em></span> units both
<span class="math inline"><em>c</em></span> and <span
class="math inline"><em>G</em><sub><em>o</em></sub></span> are 1.</p>
<p><span class="math inline">$l_{P} = \sqrt{\hbar}$</span></p>
<p>and <span
class="math inline"><em>l</em><sub><em>P</em></sub><sup>2</sup>= ℏ</span>
## Bekensteins Bound After having recently read <em>Three Roads to
Quantum Gravity</em> by Lee Smolin, I now suspect the meaning of this
areas is related to the <a
href="https://en.wikipedia.org/wiki/Bekenstein_bound">Bekensteins
Law</a> as applied to a surface areas surrounding a mass. Where the <a
href="https://en.wikipedia.org/wiki/Entropy_(statistical_thermodynamics)">thermodynamic
entropy</a>, <em>S</em>, is proportional to the the enclosed surface
area, <span class="math inline"><em>A</em></span>.</p>
<p><span
class="math inline">$S=\frac{1}{4}\cdot\frac{A}{G\hbar}$</span></p>
<p><span class="math inline">$S=\frac{k c^{3} A}{4 G \hbar}$</span></p>
<p><span class="math inline">$S \le \frac{2\pi k R E}{\hbar c} =
\frac{\tau R k E}{\hbar c}$</span></p>
<p>From our new values for <span
class="math inline"><em>G</em><sub>0</sub></span>and <span
class="math inline">ℏ</span> we can likely rewrite this:</p>
<p><span class="math inline">$S=\frac{\pi\cdot A}{\hbar G_0}$</span></p>
<p>With the limiting case being at the Plank scale.</p>
<p><span class="math inline">$S=\frac{\pi\cdot \sqrt{\hbar}}{\hbar
G_0}$</span></p>
<h2 id="planck-length">Planck Length</h2>
<p>https://en.wikipedia.org/wiki/Planck_length</p>
<p>The concept of the Planck Length comes from exploring the limits of
Quantum Mechanics and General Relativity. The limits of General
Relativity can be seen a the event horizon of a black hole, described by
the Schwarzschild Radius. And the limits of Quantum Mechanics can be
found in the Compton Wavelength for a given quanta.</p>
<p>The <a
href="https://simple.wikipedia.org/wiki/Schwarzschild_radius">Schwarzschild
Radius</a> is defined as the distance at which light cannot escape from
the gravitational field of a mass (m):</p>
<p>Classic Derivation.</p>
<p><span class="math inline">$r_S=\frac{2G m}{c^2}$</span></p>
<p>The reduced <a
href="https://en.wikipedia.org/wiki/Compton_wavelength">Compton
Wavelength</a> represents a lower limit on the wavelength for quanta
that can interact with a quantum particle with mass (m):</p>
<p><span class="math inline">$\lambda_C=\frac{h}{m c}$</span></p>
<p><span class="math inline">$\bar{\lambda_C}=\frac{2\pi\hbar}{m
c}=\frac{\tau\hbar}{m c}$</span></p>
<p>And set the Schwarzschild Radius equal to the Compton Wavelength:
<span
class="math inline"><em>r</em><sub><em>S</em></sub>=<em>λ</em><sub><em>C</em></sub></span></p>
<p><span class="math inline">$\frac{2Gm}{c^{2}}=\frac{h}{m
c}$</span></p>
<p><span class="math inline">$m^{2}= \frac{hc}{2G}$</span></p>
<p><span class="math inline">$m = \sqrt{\frac{hc}{2G}}$</span></p>
<p><span
class="math inline">$l_P=\frac{2G\sqrt{\frac{hc}{2G}}}{c^2}$</span>
<span class="math inline">$l_P=\frac{2G\sqrt{\frac{hc}{2G}}}{c^{2}}=
\sqrt{\frac{2Gh}{c^2}}$</span></p>
<p>With reduced Compton Wavelength <span
class="math inline">$r_S=\bar{\lambda_C}$</span></p>
<p><span class="math inline">$\frac{2Gm}{c^{2}}=\frac{\tau\hbar}{m
c}$</span></p>
<p><span class="math inline">$m^2=\frac{\tau\ \hbar\ c}{2G}$</span></p>
<p><span class="math inline">$m = \sqrt{\frac{\tau\ \hbar\
c}{2G}}$</span></p>
<p><span class="math inline">$l_P=\frac{2G\sqrt{\frac{\tau\ \hbar\
c}{2G}}}{c^2}$</span></p>
<p><span class="math inline">$l_P=\frac{2G\sqrt{\frac{\tau\ \hbar\
c}{2G}}}{c^{2}}=\sqrt{\frac{4\ \tau\ G\ \hbar}{c^3}}$</span></p>
<p>If we reduce the units in these equation to those of mass and time
measured in meters.</p>
<p><span class="math inline">$l_P=\sqrt{4\tau\hbar G_{o}}$</span></p>
<p>and</p>
<p><span class="math inline">$\lambda_C=\frac{\hbar}{m}$</span></p>
<p><span
class="math inline">$m=R_s=\lambda_C=\frac{\hbar}{m}$</span></p>
<p>This is known as the Planck Mass, <span
class="math inline"><em>M</em><sub><em>P</em></sub></span>. <span
class="math inline">$M_P=m=\sqrt{\hbar}$</span></p>
<p>Solving the Compton Wavelength for distance we find the classic Plank
Length:</p>
<p><span
class="math inline">$\lambda_C=\frac{\hbar}{\sqrt{\hbar}}=\frac{\sqrt{\hbar}}{\sqrt{\hbar}}\cdot\frac{\hbar}{\sqrt{\hbar}}=\sqrt{\hbar}=L_P$</span></p>
<p>Which is in precise agreement with the value we found in above. Thus
the Plank Length is:</p>
<p><span
class="math inline">$L_P=\sqrt{\hbar}=5.72928\times10^{-35}m$</span></p>
<p>When we measure distance, time, and mass in units of distance, c=1,
and the Plank Time, <span
class="math inline"><em>T</em><sub><em>P</em></sub></span>, is equal to
Plank Length, <span
class="math inline"><em>L</em><sub><em>P</em></sub></span>, which is
equal to the Plank Mass, <span
class="math inline"><em>M</em><sub><em>P</em></sub></span>:</p>
<p><span class="math display">$$\boxed{L_P=T_P=M_P}$$</span></p>
<table>
<colgroup>
<col style="width: 30%" />
<col style="width: 30%" />
<col style="width: 40%" />
</colgroup>
<thead>
<tr>
<th>Conversion Factor</th>
<th>Symbol</th>
<th>Value</th>
</tr>
</thead>
<tbody>
<tr>
<td>meters to Planck Length</td>
<td><span
class="math inline"><em>χ</em><sub><em>P</em></sub></span></td>
<td><span class="math inline">$1.74542\times10^{34}
\frac{L}{m}$</span></td>
</tr>
<tr>
<td>seconds to Planck Length</td>
<td><span
class="math inline"><em>τ</em><sub><em>p</em></sub></span></td>
<td><span class="math inline">$5.23264\times10^{42}
\frac{L}{s}$</span></td>
</tr>
<tr>
<td>mass to Planck Length</td>
<td><span
class="math inline"><em>G</em><sub><em>P</em></sub></span></td>
<td><span class="math inline">$1.62871\times10^8
\frac{L}{kg}$</span></td>
</tr>
<tr>
<td>energy to Planck Length</td>
<td><span
class="math inline"><em>E</em><sub><em>P</em></sub></span></td>
<td><span class="math inline">$1.81219\times10^9
\frac{L}{J}$</span></td>
</tr>
<tr>
<td>momentum to Planck Length</td>
<td><span
class="math inline"><em>P</em><sub><em>P</em></sub></span></td>
<td><span class="math inline">$5.43280\times10^{-1} \frac{L\cdot s}{kg
\cdot m}$</span></td>
</tr>
<tr>
<td>temperature to Planck Length</td>
<td><span
class="math inline"><em>k</em><sub><em>P</em></sub></span></td>
<td><span class="math inline">$2.501998\times10^{-14}
\frac{L}{K}$</span></td>
</tr>
<tr>
<td>charge to Planck Length</td>
<td><span
class="math inline"><em>C</em><sub><em>P</em></sub></span></td>
<td><span class="math inline">$1.89007\times10^{18}
\frac{L}{C}$</span></td>
</tr>
</tbody>
</table>
<p>Applying conversion factors from the table above, we can convert SI
values to Reduced Natural Units. <span
class="math inline">$c=\frac{1}{\sqrt{\epsilon_o \mu_o}}$</span></p>
<table>
<colgroup>
<col style="width: 23%" />
<col style="width: 23%" />
<col style="width: 23%" />
<col style="width: 30%" />
</colgroup>
<thead>
<tr>
<th>Quantity</th>
<th>Symbol</th>
<th>SI</th>
<th><span class="math inline"><em>ν</em></span></th>
</tr>
</thead>
<tbody>
<tr>
<td>Speed of Light</td>
<td><span class="math inline"><em>c</em></span></td>
<td><span class="math inline">$299792458 \frac{m}{s}$</span></td>
<td>1</td>
</tr>
<tr>
<td>Gravitational Constant</td>
<td><span class="math inline"><em>G</em><sub>0</sub></span></td>
<td><span class="math inline">$8.38659\times10^{-10} \frac{m^3}{kg \cdot
s^2}$</span></td>
<td>1</td>
</tr>
<tr>
<td>Boltzmanns Constant</td>
<td><span class="math inline"><em>k</em></span></td>
<td><span class="math inline">$k=1.380649\times10^-23
\frac{J}{K}$</span></td>
<td>1</td>
</tr>
<tr>
<td>Permittivity of Free Space</td>
<td><span
class="math inline"><em>ϵ</em><sub><em>o</em></sub></span></td>
<td><span class="math inline">$8.854187817620\times10^{-12}
\frac{C^{2}s^2}{kg \cdot m^3}$</span></td>
<td>1</td>
</tr>
<tr>
<td>Permeability of Free Space</td>
<td><span
class="math inline"><em>μ</em><sub><em>o</em></sub></span></td>
<td><span class="math inline">$\huge{\frac{1}{\epsilon_{o} \cdot
c^{2}}}$</span></td>
<td>1</td>
</tr>
<tr>
<td>Plancks Constant</td>
<td><span class="math inline"></span></td>
<td><span class="math inline">$1.054571726\times10^-34 \frac{kg \cdot
m^2}{s}$</span></td>
<td><span class="math inline">1<em>L</em><sup>2</sup></span></td>
</tr>
<tr>
<td>Mass of the Electron</td>
<td><span
class="math inline"><em>m</em><sub><em>e</em></sub></span></td>
<td><span
class="math inline">9.10938×10<sup>31</sup><em>k</em><em>g</em></span></td>
<td><span
class="math inline">1.48366×10<sup>22</sup><em>L</em></span></td>
</tr>
<tr>
<td>Charge of the Electron</td>
<td><span class="math inline"><em>e</em><sup></sup></span></td>
<td><span
class="math inline">1.60218×10<sup>19</sup><em>C</em></span></td>
<td><span
class="math inline">3.02822×10<sup>1</sup><em>L</em></span></td>
</tr>
</tbody>
</table>
<h2 id="fine-structure-constant-1">Fine Structure Constant</h2>
<p>https://en.wikipedia.org/wiki/Fine-structure_constant As a
consistency check, we compute the <em>Fine Structure Constant</em> using
Reduced Natural Units which is a unit less ratio that should be
independent of our system of units.</p>
<p><span
class="math inline">$\huge{\alpha=\frac{e^2}{4\pi\epsilon_o\hbar
c}=\frac{e^2}{4\pi}=0.00729735≈\frac{1}{137}}$</span></p>
<p>This check confirms that our system of Reduced Natural Units has
internally consistent values for <span
class="math inline"><em>c</em></span>, <span
class="math inline"><em>ϵ</em><sub><em>o</em></sub></span>, <span
class="math inline">ℏ</span> and <span
class="math inline"><em>e</em></span>. And also <span
class="math inline"><em>G</em><sub><em>o</em></sub></span> which was
used to computer prior values is also consistent.</p>
<h2 id="sage-code">Sage Code</h2>
<p>Unit Analysis computations have been performed with <a
href="https://www.sagemath.org/">Sage Math</a>.</p>
<div class="sourceCode" id="cb1"><pre
class="sourceCode bash"><code class="sourceCode bash"><span id="cb1-1"><a href="#cb1-1" aria-hidden="true" tabindex="-1"></a><span class="co"># Define constance</span></span>
<span id="cb1-2"><a href="#cb1-2" aria-hidden="true" tabindex="-1"></a><span class="ex">one</span> = 1.n<span class="er">(</span><span class="va">digits</span><span class="op">=</span>6<span class="kw">)</span></span>
<span id="cb1-3"><a href="#cb1-3" aria-hidden="true" tabindex="-1"></a><span class="ex">pi</span> = pi.n<span class="er">(</span><span class="va">digits</span><span class="op">=</span>6<span class="kw">)</span></span>
<span id="cb1-4"><a href="#cb1-4" aria-hidden="true" tabindex="-1"></a><span class="ex">tau</span> = 2 <span class="pp">*</span> pi</span>
<span id="cb1-5"><a href="#cb1-5" aria-hidden="true" tabindex="-1"></a><span class="ex">t</span> = tau</span>
<span id="cb1-6"><a href="#cb1-6" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb1-7"><a href="#cb1-7" aria-hidden="true" tabindex="-1"></a><span class="co"># Define the units</span></span>
<span id="cb1-8"><a href="#cb1-8" aria-hidden="true" tabindex="-1"></a><span class="ex">meters</span> = var<span class="er">(</span><span class="st">&#39;m&#39;</span><span class="kw">)</span></span>
<span id="cb1-9"><a href="#cb1-9" aria-hidden="true" tabindex="-1"></a><span class="ex">m</span> = one<span class="pp">*</span>meters</span>
<span id="cb1-10"><a href="#cb1-10" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb1-11"><a href="#cb1-11" aria-hidden="true" tabindex="-1"></a><span class="ex">seconds</span> = var<span class="er">(</span><span class="st">&#39;s&#39;</span><span class="kw">)</span></span>
<span id="cb1-12"><a href="#cb1-12" aria-hidden="true" tabindex="-1"></a><span class="ex">s</span> = seconds</span>
<span id="cb1-13"><a href="#cb1-13" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb1-14"><a href="#cb1-14" aria-hidden="true" tabindex="-1"></a><span class="ex">kilograms</span> = var<span class="er">(</span><span class="st">&#39;kg&#39;</span><span class="kw">)</span></span>
<span id="cb1-15"><a href="#cb1-15" aria-hidden="true" tabindex="-1"></a><span class="ex">kg</span> = kilograms</span>
<span id="cb1-16"><a href="#cb1-16" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb1-17"><a href="#cb1-17" aria-hidden="true" tabindex="-1"></a><span class="ex">newtons</span> = kg <span class="pp">*</span> m / s^2</span>
<span id="cb1-18"><a href="#cb1-18" aria-hidden="true" tabindex="-1"></a><span class="ex">N</span> = newtons</span>
<span id="cb1-19"><a href="#cb1-19" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb1-20"><a href="#cb1-20" aria-hidden="true" tabindex="-1"></a><span class="ex">joules</span> = N <span class="pp">*</span> m</span>
<span id="cb1-21"><a href="#cb1-21" aria-hidden="true" tabindex="-1"></a><span class="ex">J</span> = joules</span>
<span id="cb1-22"><a href="#cb1-22" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb1-23"><a href="#cb1-23" aria-hidden="true" tabindex="-1"></a><span class="ex">print</span><span class="er">(</span><span class="st">&quot;pi =&quot;</span><span class="ex">,</span> pi<span class="kw">)</span></span>
<span id="cb1-24"><a href="#cb1-24" aria-hidden="true" tabindex="-1"></a><span class="ex">print</span><span class="er">(</span><span class="st">&quot;tau =&quot;</span><span class="ex">,</span> t<span class="kw">)</span></span>
<span id="cb1-25"><a href="#cb1-25" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb1-26"><a href="#cb1-26" aria-hidden="true" tabindex="-1"></a><span class="co"># Speed of light in meters/second</span></span>
<span id="cb1-27"><a href="#cb1-27" aria-hidden="true" tabindex="-1"></a><span class="ex">speed_of_light</span> = 299792458 <span class="pp">*</span> meters/seconds</span>
<span id="cb1-28"><a href="#cb1-28" aria-hidden="true" tabindex="-1"></a><span class="ex">sol</span> = speed_of_light</span>
<span id="cb1-29"><a href="#cb1-29" aria-hidden="true" tabindex="-1"></a><span class="ex">c</span> = sol</span>
<span id="cb1-30"><a href="#cb1-30" aria-hidden="true" tabindex="-1"></a><span class="ex">print</span><span class="er">(</span><span class="st">&quot;si c =&quot;</span><span class="ex">,</span> c<span class="kw">)</span></span>
<span id="cb1-31"><a href="#cb1-31" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb1-32"><a href="#cb1-32" aria-hidden="true" tabindex="-1"></a><span class="ex">rnu_c</span> = c / c</span>
<span id="cb1-33"><a href="#cb1-33" aria-hidden="true" tabindex="-1"></a><span class="ex">print</span><span class="er">(</span><span class="st">&quot;R\u03BD c =&quot;</span><span class="ex">,</span> rnu_c<span class="kw">)</span></span>
<span id="cb1-34"><a href="#cb1-34" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb1-35"><a href="#cb1-35" aria-hidden="true" tabindex="-1"></a><span class="co"># Gravitational Constant</span></span>
<span id="cb1-36"><a href="#cb1-36" aria-hidden="true" tabindex="-1"></a><span class="ex">gravitational_constant</span> = 6.67384e-11 <span class="pp">*</span> N<span class="pp">*(</span>m^2/kg^2<span class="pp">)</span></span>
<span id="cb1-37"><a href="#cb1-37" aria-hidden="true" tabindex="-1"></a><span class="ex">G</span> = gravitational_constant</span>
<span id="cb1-38"><a href="#cb1-38" aria-hidden="true" tabindex="-1"></a><span class="ex">print</span><span class="er">(</span><span class="st">&quot;si G =&quot;</span><span class="ex">,</span> G<span class="kw">)</span></span>
<span id="cb1-39"><a href="#cb1-39" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb1-40"><a href="#cb1-40" aria-hidden="true" tabindex="-1"></a><span class="ex">rnu_G</span> = 4<span class="pp">*</span>pi<span class="pp">*</span>G/c^2</span>
<span id="cb1-41"><a href="#cb1-41" aria-hidden="true" tabindex="-1"></a><span class="ex">Go</span> = rnu_G</span>
<span id="cb1-42"><a href="#cb1-42" aria-hidden="true" tabindex="-1"></a><span class="ex">print</span><span class="er">(</span><span class="st">&quot;R\u03BD Go =&quot;</span><span class="ex">,</span> Go<span class="kw">)</span></span>
<span id="cb1-43"><a href="#cb1-43" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb1-44"><a href="#cb1-44" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb1-45"><a href="#cb1-45" aria-hidden="true" tabindex="-1"></a><span class="co"># Planck&#39;s Constant</span></span>
<span id="cb1-46"><a href="#cb1-46" aria-hidden="true" tabindex="-1"></a><span class="ex">reduced_plancks_constant</span> = 1.054571726e-34 <span class="pp">*</span> J<span class="pp">*</span>s</span>
<span id="cb1-47"><a href="#cb1-47" aria-hidden="true" tabindex="-1"></a><span class="ex">h_bar</span> = reduced_plancks_constant</span>
<span id="cb1-48"><a href="#cb1-48" aria-hidden="true" tabindex="-1"></a><span class="ex">print</span><span class="er">(</span><span class="st">&quot;si \u210F =&quot;</span><span class="ex">,</span> h_bar<span class="kw">)</span></span>
<span id="cb1-49"><a href="#cb1-49" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb1-50"><a href="#cb1-50" aria-hidden="true" tabindex="-1"></a><span class="ex">rnu_h_bar</span> = h_bar <span class="pp">*</span> Go / c</span>
<span id="cb1-51"><a href="#cb1-51" aria-hidden="true" tabindex="-1"></a><span class="ex">print</span><span class="er">(</span><span class="st">&quot;R\u03BD &quot;</span><span class="ex">u</span><span class="st">&quot;\u210F =&quot;</span><span class="ex">,</span> rnu_h_bar<span class="kw">)</span></span>
<span id="cb1-52"><a href="#cb1-52" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb1-53"><a href="#cb1-53" aria-hidden="true" tabindex="-1"></a><span class="co"># Planck Length</span></span>
<span id="cb1-54"><a href="#cb1-54" aria-hidden="true" tabindex="-1"></a><span class="ex">rnu_h_bar_str</span> = str<span class="er">(</span><span class="ex">rnu_h_bar</span><span class="kw">)</span> </span>
<span id="cb1-55"><a href="#cb1-55" aria-hidden="true" tabindex="-1"></a><span class="ex">numerical_part_str</span> = rnu_h_bar_str.split<span class="er">(</span><span class="st">&#39;*&#39;</span><span class="kw">)</span><span class="ex">[0]</span> </span>
<span id="cb1-56"><a href="#cb1-56" aria-hidden="true" tabindex="-1"></a><span class="ex">numerical_part_str</span> = numerical_part_str.strip<span class="er">(</span><span class="st">&#39;()&#39;</span><span class="kw">)</span></span>
<span id="cb1-57"><a href="#cb1-57" aria-hidden="true" tabindex="-1"></a><span class="ex">numerical_part</span> = float<span class="er">(</span><span class="ex">numerical_part_str</span><span class="kw">)</span></span>
<span id="cb1-58"><a href="#cb1-58" aria-hidden="true" tabindex="-1"></a><span class="ex">rnu_sqrt_h_bar</span> = numerical_part^<span class="er">(</span><span class="ex">1/2</span><span class="kw">)</span></span>
<span id="cb1-59"><a href="#cb1-59" aria-hidden="true" tabindex="-1"></a><span class="co"># ^ Sage cannot process sqrt on units... Lame.</span></span>
<span id="cb1-60"><a href="#cb1-60" aria-hidden="true" tabindex="-1"></a><span class="ex">lP</span> = rnu_sqrt_h_bar <span class="pp">*</span> m</span>
<span id="cb1-61"><a href="#cb1-61" aria-hidden="true" tabindex="-1"></a><span class="ex">print</span><span class="er">(</span><span class="st">&quot;R\u03BD \u221A\u210F =&quot;</span><span class="ex">,</span> lP<span class="kw">)</span></span></code></pre></div>
<h4 id="output">Output</h4>
<pre><code>pi = 3.14159
tau = 6.28319
si c = 299792458*m/s
Rν c = 1
si G = (6.67384e-11)*m^3/(kg*s^2)
Rν Go = (9.33135e-27)*m/kg
si ℏ = (1.05457e-34)*kg*m^2/s
Rν ℏ = (3.28246e-69)*m^2
Rν √ℏ = (5.72928e-35)*m
si lP = (1.61620e-35)*sqrt(m^2)
Rν lP = (2.77455e-47)*sqrt(m^3/kg)</code></pre>
<h1 id="terminology">Terminology</h1>
<h1 class="unnumbered" id="citations">Citations</h1>
<div id="refs" class="references csl-bib-body hanging-indent"
role="list">
<div id="ref-IsaacNewtonLetter" class="csl-entry" role="listitem">
<span>“Isaac <span>Newton</span> Letter to <span>Robert Hooke</span>,
1675.”</span> n.d.
</div>
</div>
</body>
</html>

BIN
build/b3.pdf Normal file

Binary file not shown.

822
build/b3.tex Normal file
View File

@ -0,0 +1,822 @@
% Options for packages loaded elsewhere
\PassOptionsToPackage{unicode}{hyperref}
\PassOptionsToPackage{hyphens}{url}
\PassOptionsToPackage{dvipsnames,svgnames,x11names}{xcolor}
\documentclass[
12pt,
]{book}
\usepackage{xcolor}
\usepackage[margin=1in]{geometry}
\usepackage{amsmath,amssymb}
\setcounter{secnumdepth}{5}
\usepackage{iftex}
\ifPDFTeX
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{textcomp} % provide euro and other symbols
\else % if luatex or xetex
\usepackage{unicode-math} % this also loads fontspec
\defaultfontfeatures{Scale=MatchLowercase}
\defaultfontfeatures[\rmfamily]{Ligatures=TeX,Scale=1}
\fi
\usepackage{lmodern}
\ifPDFTeX\else
% xetex/luatex font selection
\setmainfont[]{Libertinus Serif}
\setsansfont[]{Libertinus Sans}
\setmonofont[]{DejaVu Sans Mono}
\fi
% Use upquote if available, for straight quotes in verbatim environments
\IfFileExists{upquote.sty}{\usepackage{upquote}}{}
\IfFileExists{microtype.sty}{% use microtype if available
\usepackage[]{microtype}
\UseMicrotypeSet[protrusion]{basicmath} % disable protrusion for tt fonts
}{}
\makeatletter
\@ifundefined{KOMAClassName}{% if non-KOMA class
\IfFileExists{parskip.sty}{%
\usepackage{parskip}
}{% else
\setlength{\parindent}{0pt}
\setlength{\parskip}{6pt plus 2pt minus 1pt}}
}{% if KOMA class
\KOMAoptions{parskip=half}}
\makeatother
\usepackage{color}
\usepackage{fancyvrb}
\newcommand{\VerbBar}{|}
\newcommand{\VERB}{\Verb[commandchars=\\\{\}]}
\DefineVerbatimEnvironment{Highlighting}{Verbatim}{commandchars=\\\{\}}
% Add ',fontsize=\small' for more characters per line
\newenvironment{Shaded}{}{}
\newcommand{\AlertTok}[1]{\textcolor[rgb]{1.00,0.00,0.00}{\textbf{#1}}}
\newcommand{\AnnotationTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{#1}}}}
\newcommand{\AttributeTok}[1]{\textcolor[rgb]{0.49,0.56,0.16}{#1}}
\newcommand{\BaseNTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{#1}}
\newcommand{\BuiltInTok}[1]{\textcolor[rgb]{0.00,0.50,0.00}{#1}}
\newcommand{\CharTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{#1}}
\newcommand{\CommentTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textit{#1}}}
\newcommand{\CommentVarTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{#1}}}}
\newcommand{\ConstantTok}[1]{\textcolor[rgb]{0.53,0.00,0.00}{#1}}
\newcommand{\ControlFlowTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{\textbf{#1}}}
\newcommand{\DataTypeTok}[1]{\textcolor[rgb]{0.56,0.13,0.00}{#1}}
\newcommand{\DecValTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{#1}}
\newcommand{\DocumentationTok}[1]{\textcolor[rgb]{0.73,0.13,0.13}{\textit{#1}}}
\newcommand{\ErrorTok}[1]{\textcolor[rgb]{1.00,0.00,0.00}{\textbf{#1}}}
\newcommand{\ExtensionTok}[1]{#1}
\newcommand{\FloatTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{#1}}
\newcommand{\FunctionTok}[1]{\textcolor[rgb]{0.02,0.16,0.49}{#1}}
\newcommand{\ImportTok}[1]{\textcolor[rgb]{0.00,0.50,0.00}{\textbf{#1}}}
\newcommand{\InformationTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{#1}}}}
\newcommand{\KeywordTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{\textbf{#1}}}
\newcommand{\NormalTok}[1]{#1}
\newcommand{\OperatorTok}[1]{\textcolor[rgb]{0.40,0.40,0.40}{#1}}
\newcommand{\OtherTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{#1}}
\newcommand{\PreprocessorTok}[1]{\textcolor[rgb]{0.74,0.48,0.00}{#1}}
\newcommand{\RegionMarkerTok}[1]{#1}
\newcommand{\SpecialCharTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{#1}}
\newcommand{\SpecialStringTok}[1]{\textcolor[rgb]{0.73,0.40,0.53}{#1}}
\newcommand{\StringTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{#1}}
\newcommand{\VariableTok}[1]{\textcolor[rgb]{0.10,0.09,0.49}{#1}}
\newcommand{\VerbatimStringTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{#1}}
\newcommand{\WarningTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{#1}}}}
\usepackage{longtable,booktabs,array}
\usepackage{calc} % for calculating minipage widths
% Correct order of tables after \paragraph or \subparagraph
\usepackage{etoolbox}
\makeatletter
\patchcmd\longtable{\par}{\if@noskipsec\mbox{}\fi\par}{}{}
\makeatother
% Allow footnotes in longtable head/foot
\IfFileExists{footnotehyper.sty}{\usepackage{footnotehyper}}{\usepackage{footnote}}
\makesavenoteenv{longtable}
\usepackage{graphicx}
\makeatletter
\newsavebox\pandoc@box
\newcommand*\pandocbounded[1]{% scales image to fit in text height/width
\sbox\pandoc@box{#1}%
\Gscale@div\@tempa{\textheight}{\dimexpr\ht\pandoc@box+\dp\pandoc@box\relax}%
\Gscale@div\@tempb{\linewidth}{\wd\pandoc@box}%
\ifdim\@tempb\p@<\@tempa\p@\let\@tempa\@tempb\fi% select the smaller of both
\ifdim\@tempa\p@<\p@\scalebox{\@tempa}{\usebox\pandoc@box}%
\else\usebox{\pandoc@box}%
\fi%
}
% Set default figure placement to htbp
\def\fps@figure{htbp}
\makeatother
% definitions for citeproc citations
\NewDocumentCommand\citeproctext{}{}
\NewDocumentCommand\citeproc{mm}{%
\begingroup\def\citeproctext{#2}\cite{#1}\endgroup}
\makeatletter
% allow citations to break across lines
\let\@cite@ofmt\@firstofone
% avoid brackets around text for \cite:
\def\@biblabel#1{}
\def\@cite#1#2{{#1\if@tempswa , #2\fi}}
\makeatother
\newlength{\cslhangindent}
\setlength{\cslhangindent}{1.5em}
\newlength{\csllabelwidth}
\setlength{\csllabelwidth}{3em}
\newenvironment{CSLReferences}[2] % #1 hanging-indent, #2 entry-spacing
{\begin{list}{}{%
\setlength{\itemindent}{0pt}
\setlength{\leftmargin}{0pt}
\setlength{\parsep}{0pt}
% turn on hanging indent if param 1 is 1
\ifodd #1
\setlength{\leftmargin}{\cslhangindent}
\setlength{\itemindent}{-1\cslhangindent}
\fi
% set entry spacing
\setlength{\itemsep}{#2\baselineskip}}}
{\end{list}}
\usepackage{calc}
\newcommand{\CSLBlock}[1]{\hfill\break\parbox[t]{\linewidth}{\strut\ignorespaces#1\strut}}
\newcommand{\CSLLeftMargin}[1]{\parbox[t]{\csllabelwidth}{\strut#1\strut}}
\newcommand{\CSLRightInline}[1]{\parbox[t]{\linewidth - \csllabelwidth}{\strut#1\strut}}
\newcommand{\CSLIndent}[1]{\hspace{\cslhangindent}#1}
\setlength{\emergencystretch}{3em} % prevent overfull lines
\providecommand{\tightlist}{%
\setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}}
\usepackage[most]{tcolorbox}
\usepackage{graphicx}
\tcbuselibrary{breakable}
% =========================================================
% Concept Boxes
% =========================================================
\newtcolorbox{proposedbox}{
title=Proposed Concept,
colback=blue!5!white,
colframe=blue!75!black,
colbacktitle=blue!15!white,
fonttitle=\bfseries,
coltitle=black,
enhanced,
sharp corners,
breakable,
after = \par\vspace{6pt}
}
\newtcolorbox{establishedbox}{
title=Established Concept,
colback=green!5!white,
colframe=green!75!black,
colbacktitle=green!15!white,
fonttitle=\bfseries,
coltitle=black,
enhanced,
sharp corners,
breakable,
after = \par\vspace{6pt}
}
\newtcolorbox{speculativebox}{
title=Speculative Concept,
colback=purple!5!white,
colframe=purple!75!black,
colbacktitle=purple!15!white,
fonttitle=\bfseries,
coltitle=black,
enhanced,
sharp corners,
breakable,
after = \par\vspace{6pt}
}
\usepackage{bookmark}
\IfFileExists{xurl.sty}{\usepackage{xurl}}{} % add URL line breaks if available
\urlstyle{same}
\hypersetup{
colorlinks=true,
linkcolor={blue},
filecolor={Maroon},
citecolor={Blue},
urlcolor={Blue},
pdfcreator={LaTeX via pandoc}}
\author{}
\date{}
\begin{document}
\frontmatter
\renewcommand*\contentsname{Contents}
{
\setcounter{tocdepth}{3}
\tableofcontents
}
\mainmatter
\chapter{Introduction}\label{introduction}
\begin{quote}
``\emph{If I have seen further it is by standing on the shoulders of
Giants.}''
-- Isaac Newton (\citeproc{ref-IsaacNewtonLetter}{{``Isaac {Newton}
Letter to {Robert Hooke}, 1675,''} n.d.})
\end{quote}
\section{Conventions}\label{conventions}
In this book we'll use a few conventions.
\subsection{New Concepts}\label{new-concepts}
As many of the topics discussed in this book are a mix of
\textbf{established} math and physics, \textbf{proposed} dualistic
interpretations of established ideas, and also \textbf{speculative}
ideas that I don't yet know how to address, I wanted a way to clearly
distinguish these concepts. I've come up with the following convention
to highlight these classes of concepts to indicate their level of
mainstream acceptance.
In this book, established concept may be highlighted in green, and
represent mainstream physics or math concepts.
\begin{establishedbox}
Established Concept Einsteins Relativistic Dynamics Equations
\[E^2 = (m_{0} \cdot c^2)^2 + (p \cdot c)^2 \]
\end{establishedbox}
New ideas proposed by the author which have not been peer reviewed,
verified or tested, and should be looked at with scrutiny.
\begin{proposedbox}
Proposed Concept With the speed of light, \(c = 1\):
\[E^2 = m_{0}^2 + p^2 \]
\end{proposedbox}
Speculative Idea, that the author wonders about, but does not know how
to demonstrate, or ideas that need further treatment to prove or
disprove.
\begin{speculativebox}
Speculative Concept With the speed of light, \(c = 1\):
\[E^2 = m_{0}^2 + p^2 \]
\end{speculativebox}
\chapter{Chapter 1}\label{chapter-1}
Blah blah blah
\chapter{Example Content}\label{example-content}
In \(R\nu\) the
\href{https://en.wikipedia.org/wiki/Planck_units\#Planck_length}{Planck
Length} is the universal unit for measurement of distance, and is
defined approximately to be:
\[\boxed{L_P=\sqrt{\hbar}=5.72928\times10^{-35}m=1 L}\] Where \(1\ L\),
is 1 Planck Length of distance.
\subsection{SI Conversion Factors}\label{si-conversion-factors}
The following conversion factors can be used to convert observable
quantities of measure from the \emph{SI} system of units to \(R\nu\) to
\textasciitilde6 significant digits.
\begin{longtable}[]{@{}
>{\raggedright\arraybackslash}p{(\linewidth - 4\tabcolsep) * \real{0.3256}}
>{\raggedright\arraybackslash}p{(\linewidth - 4\tabcolsep) * \real{0.0930}}
>{\raggedright\arraybackslash}p{(\linewidth - 4\tabcolsep) * \real{0.5814}}@{}}
\toprule\noalign{}
\begin{minipage}[b]{\linewidth}\raggedright
Conversion Factor
\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright
Symbol
\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright
Value
\end{minipage} \\
\midrule\noalign{}
\endhead
\bottomrule\noalign{}
\endlastfoot
meters to Planck Length & \(\chi_P\) &
\(1.74542\times10^{34} \frac{L}{m}\) \\
seconds to Planck Length & \(\tau_p\) &
\(5.23264\times10^{42} \frac{L}{s}\) \\
mass to Planck Length & \(G_P\) & \(1.62871\times10^8 \frac{L}{kg}\) \\
energy to Planck Length & \(E_P\) & \(1.81219\times10^9 \frac{L}{J}\) \\
momentum to Planck Length & \(P_P\) &
\(5.43280\times10^{-1} \frac{L\cdot s}{kg \cdot m}\) \\
temperature to Planck Length & \(k_P\) &
\(2.501998\times10^{-14} \frac{L}{K}\) \\
charge to Planck Length & \(C_P\) &
\(1.89007\times10^{18} \frac{L}{C}\) \\
\end{longtable}
\subsection{Physical Constants}\label{physical-constants}
Applying conversion factors from the table above, we can convert SI
values to Reduced Natural Units. For example, performing this analysis
on the the speed of light yields a unit-less number with a value of 1:
\(c = 299792458 \frac{m}{s} = 299792458 \frac{m}{s} \cdot 1.74542\times10^{34} \frac{L}{m} \cdot \frac{1}{5.23264\times10^{42} \frac{L}{s}} = 1.00000\)
\begin{longtable}[]{@{}
>{\raggedright\arraybackslash}p{(\linewidth - 6\tabcolsep) * \real{0.2273}}
>{\raggedright\arraybackslash}p{(\linewidth - 6\tabcolsep) * \real{0.0909}}
>{\raggedright\arraybackslash}p{(\linewidth - 6\tabcolsep) * \real{0.4545}}
>{\raggedright\arraybackslash}p{(\linewidth - 6\tabcolsep) * \real{0.2273}}@{}}
\toprule\noalign{}
\begin{minipage}[b]{\linewidth}\raggedright
Quantity
\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright
Symbol
\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright
SI
\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright
\(\nu\)
\end{minipage} \\
\midrule\noalign{}
\endhead
\bottomrule\noalign{}
\endlastfoot
Speed of Light & \(c\) & \(299792458 \frac{m}{s}\) & 1 \\
Reduced Gravitational Constant & \(G_0\) &
\(8.38659\times10^{-10} \frac{m^3}{kg \cdot s^2}\) & 1 \\
Boltzmann's Constant & \(k\) & \(k=1.380649\times10^-23 \frac{J}{K}\) &
1 \\
Permittivity of Free Space & \(\epsilon_o\) &
\(8.854187817620\times10^{-12} \frac{C^{2}s^2}{kg \cdot m^3}\) & 1 \\
Permeability of Free Space & \(\mu_o\) &
\(\huge{\frac{1}{\epsilon_{o} \cdot c^{2}}}\) & 1 \\
Reduced Planck's Constant & \(\hbar\) &
\(1.054571726\times10^-34 \frac{kg \cdot m^2}{s}\) & \(1 L^2\) \\
Mass of the Electron & \(m_e\) & \(9.10938\times10^{-31} kg\) &
\(1.48366\times10^{-22} L\) \\
Charge of the Electron & \(e^-\) & \(-1.60218\times10^{-19} C\) &
\(-3.02822\times10^{-1} L\) \\
Unit Cycle & \(\Theta\) & \(2\pi = 6.28318...\ Radians\) &
\(1 \tau = 6.28318...\ Radians\) \\
\end{longtable}
\section{Fine Structure Constant}\label{fine-structure-constant}
As a consistency check, we compute the
\emph{\href{https://en.wikipedia.org/wiki/Fine-structure_constant}{Fine
Structure Constant}} using Reduced Natural Units which is a unit less
ratio that should be independent of our system of units.
\(\huge{\alpha=\frac{e^2}{4\pi\epsilon_o\hbar c}=\frac{e^2}{2\tau}=0.00729735\frac{1}{137}}\)
\subsubsection{Dimensional Analysis}\label{dimensional-analysis}
The reader should be familiar with high school physics and chemistry
\href{https://en.wikipedia.org/wiki/Dimensional_analysis}{dimensional
analysis}.
\begin{itemize}
\tightlist
\item
\(1\ meter\ (m) = 100\ centimeters\ (cm)\)
\item
\(1\ kilometer\ (km) = 1000\ meters\ (m)\)
\item
\(1\ mile = 5280\ feet\ (ft\ or\ ')\)
\item
\(1\ foot\ (ft\ or\ ') = 12\ inches\ (in\ or\ ")\)
\item
\(1\ inch\ (") = 2.54\ centimeters\ (cm)\)
\end{itemize}
How many kilometers are in 1 mile?
\(1\ mile = 1\ mile \times \frac{5280\ ft}{mile} \times \frac{12\ in}{ft} \times \frac{2.54\ cm}{in}\times \frac{1\ m}{100 cm} \times \frac{1\ km}{1000 m} = \frac{5280 \times 12 \times 2.54}{100 \times 1000}\ km = \frac{160934.40}{100000}\ km = 1.6\ km\)
Note that each unit in the denominator cancels with one if the numerator
until we are left with only km.
\section{Newton's Law of Gravity}\label{newtons-law-of-gravity}
The force of gravity (\(F_g\)) between 2 masses, \(m1\) and \(m2\)
separated by distance \(r\) is given by
\href{https://en.wikipedia.org/wiki/Newton\%27s_law_of_universal_gravitation}{Newton's
Law of Gravity}:
\(F_{g} = G \frac{m_{1} m_{2}}{r^{2}}\)
Where \(G\), is the
\href{http://en.wikipedia.org/wiki/Gravitational_Constant}{Gravitational
Constant}.
\(G = 6.67430 \times 10^{-11}\ N\frac{m^2}{kg^2}\)
The strength of gravitational force follow the inverse square law
distributing gravitational flux over the surface area of a sphere
(\(4\pi r^2\)).
\subsubsection{Inverse Square Law}\label{inverse-square-law}
Any source of a signal strength (\(S_0\)) that radiates isotropically in
3-dimensional space will distribute that signal strength (\(S_0\)) over
the surface area of a sphere (\(SA = 4 \pi r\)) of radius (\(r\)). Such
that the intensity (\(I\)) at distance (\(r\)) is:
\[I(r) = \frac{S_0}{4 \pi r^{2}}=\frac{S_0}{2 \tau r^{2}}\]
\pandocbounded{\includegraphics[keepaspectratio,alt={inverse square law}]{lib/img/Inverse_square_law.svg.png}}
\#\#\#\# \(R\nu\) Reduced Gravitational Constant In this version of
Newton's Law of Gravity we introduce a new constant \(G_0\), the reduced
gravitational constant to accommodate for the factor of \(4\pi = 2\tau\)
which is has been integrated in the SI version of the gravitational
constant.
\(F_g =G \frac{m_{1} m_{2}}{r^{2}}= G_0 \frac{m_{1} m_{2}}{4 \pi r^{2}}=G_0 \frac{m_{1} m_{2}}{2 \tau r^{2}}\)
Where:
\(G = \frac{G_{0}}{2\tau} = 6.67384 \times 10^{-11} \frac{N \cdot m^2}{kg^2}\)
Analyzing the units:
\[\frac{N \cdot m^2}{kg^2} = \left( \frac{\left( kg \cdot \frac{m}{s^2} \right) \cdot m^2}{kg^2} \right)=\frac{m^3}{s^2 kg}\]
Converting seconds to meters with the SI speed of light as a conversion
factor:
\[\frac{m^3}{s^2 kg}\cdot\frac{1}{c^2}=\frac{m^3}{s^2 kg}\cdot\frac{s^2}{m^2}=\frac{m}{kg}\]
Thus where space and time are measured in units of meters, the reduced
gravitational constant, is:
\[\boxed{G_0=\frac{2\tau G}{c^2}=\frac{2\tau \cdot 6.67384 \times 10^{-11}}{299792458^2} \frac{m}{kg} = 9.33135 \times 10^-27 \frac{m}{kg}}\]
\begin{quote}
Observation This implies that not only can space an time be measure in
units of meters, but so can mass.
\end{quote}
\subsection{Relativistic Energy Momentum
Relation}\label{relativistic-energy-momentum-relation}
Einsteins
\href{https://en.wikipedia.org/wiki/Energy\%E2\%80\%93momentum_relation}{Relativistic
Energy Momentum} relationship shows a Pythagorean relation between the
total energy (\(E\)), rest mass (\(m_0\)) and momentum (\(p\)) of a
system.
\(E^{2} = (m_0 \cdot c^2)^2 + (p \cdot c)^2\)
Where space and time are both measure in units of meters, c=1.
\(E^2=(m_0)^2+(p)^2\)
From this we can see that Energy, Momentum and Mass have equivalent
units.
\begin{quote}
\emph{While we do not really know what energy, mass and momentum are we
know that they are fundamentally ``made'' out of the same stuff because
they have the same units.}
\end{quote}
\paragraph{Objects of mass at rest}\label{objects-of-mass-at-rest}
For an object at rest with no momentum (\(p = 0\)) we see Einstein's
famous equations:
\(E = m_{0} \cdot c^2\)
Or, with \(c=1\), this is much simpler to understand. Energy = Mass
\(E = m_0\) \#\#\#\#\# Zero mass objects moving at the speed of light
And for objects with no mass, like photos, (\(m_{0}= 0\)):
\(E=pc\)
Or, with \(c=1\), this is much simpler to understand. Energy = Momentum
\(E=p\)
\section{Planck's Constant}\label{plancks-constant}
The \href{https://en.wikipedia.org/wiki/Planck_constant}{Reduced Planck
constant} , ħ, represents a conversion factor for relating the
frequency, \(\omega\) (in \(2\pi\) radians per second), of a photon to
the energy of that photon. This can easily be seen from the simple but
profound relationship:
\(E=\hbar\omega\)
Where:
\(\hbar=1.054571726 \times 10^{34} J \cdot s\)
and
\(J \cdot s = {kg}\cdot\frac{m^2}{s}\)
\begin{quote}
Reduced Planck's Constant \(\hbar = \frac{h}{2\pi} = \frac{h}{\tau}\)
\end{quote}
Simplifying our units by converting time and mass to units of meters:
\[\boxed{\hbar=1.054571726 \times 10^{34} {kg}\cdot\frac{m^2}{s}\cdot\frac{G_0}{c}=3.282462\times10^{-69}m^2}\]
Which suggest that the Plank constant can be interpreted as an areas for
which the square root of is suspiciously close to the Plank length:
\[\boxed{\sqrt{\hbar}=\sqrt{3.282462\times10^{-69}m^2}=5.72928\times10^{-35}m}\]
\subsubsection{Planck Area}\label{planck-area}
The
\href{https://en.wikipedia.org/wiki/Planck_units\#Derived_units}{Planck
Area} is the square of the
\href{https://en.wikipedia.org/wiki/Planck_units\#Planck_length}{Planck
Length}.
\(l_{P}= \sqrt{\frac{\hbar G}{c^3}}\)
and \(l_{P}^{2}= \frac{\hbar G}{c^3}\)
In \(R\nu\) units both \(c\) and \(G_o\) are 1.
\(l_{P} = \sqrt{\hbar}\)
and \(l_P^{2}=\hbar\) \#\# Bekenstein's Bound After having recently read
\emph{Three Roads to Quantum Gravity} by Lee Smolin, I now suspect the
meaning of this areas is related to the
\href{https://en.wikipedia.org/wiki/Bekenstein_bound}{Bekensteins Law}
as applied to a surface areas surrounding a mass. Where the
\href{https://en.wikipedia.org/wiki/Entropy_(statistical_thermodynamics)}{thermodynamic
entropy}, \emph{S}, is proportional to the the enclosed surface area,
\(A\).
\(S=\frac{1}{4}\cdot\frac{A}{G\hbar}\)
\(S=\frac{k c^{3} A}{4 G \hbar}\)
\(S \le \frac{2\pi k R E}{\hbar c} = \frac{\tau R k E}{\hbar c}\)
From our new values for \(G_0\)and \(\hbar\) we can likely rewrite this:
\(S=\frac{\pi\cdot A}{\hbar G_0}\)
With the limiting case being at the Plank scale.
\(S=\frac{\pi\cdot \sqrt{\hbar}}{\hbar G_0}\)
\section{Planck Length}\label{planck-length}
https://en.wikipedia.org/wiki/Planck\_length
The concept of the Planck Length comes from exploring the limits of
Quantum Mechanics and General Relativity. The limits of General
Relativity can be seen a the event horizon of a black hole, described by
the Schwarzschild Radius. And the limits of Quantum Mechanics can be
found in the Compton Wavelength for a given quanta.
The
\href{https://simple.wikipedia.org/wiki/Schwarzschild_radius}{Schwarzschild
Radius} is defined as the distance at which light cannot escape from the
gravitational field of a mass (m):
Classic Derivation.
\(r_S=\frac{2G m}{c^2}\)
The reduced
\href{https://en.wikipedia.org/wiki/Compton_wavelength}{Compton
Wavelength} represents a lower limit on the wavelength for quanta that
can interact with a quantum particle with mass (m):
\(\lambda_C=\frac{h}{m c}\)
\(\bar{\lambda_C}=\frac{2\pi\hbar}{m c}=\frac{\tau\hbar}{m c}\)
And set the Schwarzschild Radius equal to the Compton Wavelength:
\(r_S=\lambda_C\)
\(\frac{2Gm}{c^{2}}=\frac{h}{m c}\)
\(m^{2}= \frac{hc}{2G}\)
\(m = \sqrt{\frac{hc}{2G}}\)
\(l_P=\frac{2G\sqrt{\frac{hc}{2G}}}{c^2}\)
\(l_P=\frac{2G\sqrt{\frac{hc}{2G}}}{c^{2}}= \sqrt{\frac{2Gh}{c^2}}\)
With reduced Compton Wavelength \(r_S=\bar{\lambda_C}\)
\(\frac{2Gm}{c^{2}}=\frac{\tau\hbar}{m c}\)
\(m^2=\frac{\tau\ \hbar\ c}{2G}\)
\(m = \sqrt{\frac{\tau\ \hbar\ c}{2G}}\)
\(l_P=\frac{2G\sqrt{\frac{\tau\ \hbar\ c}{2G}}}{c^2}\)
\(l_P=\frac{2G\sqrt{\frac{\tau\ \hbar\ c}{2G}}}{c^{2}}=\sqrt{\frac{4\ \tau\ G\ \hbar}{c^3}}\)
If we reduce the units in these equation to those of mass and time
measured in meters.
\(l_P=\sqrt{4\tau\hbar G_{o}}\)
and
\(\lambda_C=\frac{\hbar}{m}\)
\(m=R_s=\lambda_C=\frac{\hbar}{m}\)
This is known as the Planck Mass, \(M_P\). \(M_P=m=\sqrt{\hbar}\)
Solving the Compton Wavelength for distance we find the classic Plank
Length:
\(\lambda_C=\frac{\hbar}{\sqrt{\hbar}}=\frac{\sqrt{\hbar}}{\sqrt{\hbar}}\cdot\frac{\hbar}{\sqrt{\hbar}}=\sqrt{\hbar}=L_P\)
Which is in precise agreement with the value we found in above. Thus the
Plank Length is:
\(L_P=\sqrt{\hbar}=5.72928\times10^{-35}m\)
When we measure distance, time, and mass in units of distance, c=1, and
the Plank Time, \(T_P\), is equal to Plank Length, \(L_P\), which is
equal to the Plank Mass, \(M_P\):
\[\boxed{L_P=T_P=M_P}\]
\begin{longtable}[]{@{}
>{\raggedright\arraybackslash}p{(\linewidth - 4\tabcolsep) * \real{0.3000}}
>{\raggedright\arraybackslash}p{(\linewidth - 4\tabcolsep) * \real{0.3000}}
>{\raggedright\arraybackslash}p{(\linewidth - 4\tabcolsep) * \real{0.4000}}@{}}
\toprule\noalign{}
\begin{minipage}[b]{\linewidth}\raggedright
Conversion Factor
\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright
Symbol
\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright
Value
\end{minipage} \\
\midrule\noalign{}
\endhead
\bottomrule\noalign{}
\endlastfoot
meters to Planck Length & \(\chi_P\) &
\(1.74542\times10^{34} \frac{L}{m}\) \\
seconds to Planck Length & \(\tau_p\) &
\(5.23264\times10^{42} \frac{L}{s}\) \\
mass to Planck Length & \(G_P\) & \(1.62871\times10^8 \frac{L}{kg}\) \\
energy to Planck Length & \(E_P\) & \(1.81219\times10^9 \frac{L}{J}\) \\
momentum to Planck Length & \(P_P\) &
\(5.43280\times10^{-1} \frac{L\cdot s}{kg \cdot m}\) \\
temperature to Planck Length & \(k_P\) &
\(2.501998\times10^{-14} \frac{L}{K}\) \\
charge to Planck Length & \(C_P\) &
\(1.89007\times10^{18} \frac{L}{C}\) \\
\end{longtable}
Applying conversion factors from the table above, we can convert SI
values to Reduced Natural Units. \(c=\frac{1}{\sqrt{\epsilon_o \mu_o}}\)
\begin{longtable}[]{@{}
>{\raggedright\arraybackslash}p{(\linewidth - 6\tabcolsep) * \real{0.2308}}
>{\raggedright\arraybackslash}p{(\linewidth - 6\tabcolsep) * \real{0.2308}}
>{\raggedright\arraybackslash}p{(\linewidth - 6\tabcolsep) * \real{0.2308}}
>{\raggedright\arraybackslash}p{(\linewidth - 6\tabcolsep) * \real{0.3077}}@{}}
\toprule\noalign{}
\begin{minipage}[b]{\linewidth}\raggedright
Quantity
\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright
Symbol
\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright
SI
\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright
\(\nu\)
\end{minipage} \\
\midrule\noalign{}
\endhead
\bottomrule\noalign{}
\endlastfoot
Speed of Light & \(c\) & \(299792458 \frac{m}{s}\) & 1 \\
Gravitational Constant & \(G_0\) &
\(8.38659\times10^{-10} \frac{m^3}{kg \cdot s^2}\) & 1 \\
Boltzmann's Constant & \(k\) & \(k=1.380649\times10^-23 \frac{J}{K}\) &
1 \\
Permittivity of Free Space & \(\epsilon_o\) &
\(8.854187817620\times10^{-12} \frac{C^{2}s^2}{kg \cdot m^3}\) & 1 \\
Permeability of Free Space & \(\mu_o\) &
\(\huge{\frac{1}{\epsilon_{o} \cdot c^{2}}}\) & 1 \\
Planck's Constant & \(\hbar\) &
\(1.054571726\times10^-34 \frac{kg \cdot m^2}{s}\) & \(1 L^2\) \\
Mass of the Electron & \(m_e\) & \(9.10938\times10^{-31} kg\) &
\(1.48366\times10^{-22} L\) \\
Charge of the Electron & \(e^-\) & \(-1.60218\times10^{-19} C\) &
\(-3.02822\times10^{-1} L\) \\
\end{longtable}
\section{Fine Structure Constant}\label{fine-structure-constant-1}
https://en.wikipedia.org/wiki/Fine-structure\_constant As a consistency
check, we compute the \emph{Fine Structure Constant} using Reduced
Natural Units which is a unit less ratio that should be independent of
our system of units.
\(\huge{\alpha=\frac{e^2}{4\pi\epsilon_o\hbar c}=\frac{e^2}{4\pi}=0.00729735\frac{1}{137}}\)
This check confirms that our system of Reduced Natural Units has
internally consistent values for \(c\), \(\epsilon_o\), \(\hbar\) and
\(e-\). And also \(G_o\) which was used to computer prior values is also
consistent.
\section{Sage Code}\label{sage-code}
Unit Analysis computations have been performed with
\href{https://www.sagemath.org/}{Sage Math}.
\begin{Shaded}
\begin{Highlighting}[]
\CommentTok{\# Define constance}
\ExtensionTok{one}\NormalTok{ = 1.n}\ErrorTok{(}\VariableTok{digits}\OperatorTok{=}\NormalTok{6}\KeywordTok{)}
\ExtensionTok{pi}\NormalTok{ = pi.n}\ErrorTok{(}\VariableTok{digits}\OperatorTok{=}\NormalTok{6}\KeywordTok{)}
\ExtensionTok{tau}\NormalTok{ = 2 }\PreprocessorTok{*}\NormalTok{ pi}
\ExtensionTok{t}\NormalTok{ = tau}
\CommentTok{\# Define the units}
\ExtensionTok{meters}\NormalTok{ = var}\ErrorTok{(}\StringTok{\textquotesingle{}m\textquotesingle{}}\KeywordTok{)}
\ExtensionTok{m}\NormalTok{ = one}\PreprocessorTok{*}\NormalTok{meters}
\ExtensionTok{seconds}\NormalTok{ = var}\ErrorTok{(}\StringTok{\textquotesingle{}s\textquotesingle{}}\KeywordTok{)}
\ExtensionTok{s}\NormalTok{ = seconds}
\ExtensionTok{kilograms}\NormalTok{ = var}\ErrorTok{(}\StringTok{\textquotesingle{}kg\textquotesingle{}}\KeywordTok{)}
\ExtensionTok{kg}\NormalTok{ = kilograms}
\ExtensionTok{newtons}\NormalTok{ = kg }\PreprocessorTok{*}\NormalTok{ m / s\^{}2}
\ExtensionTok{N}\NormalTok{ = newtons}
\ExtensionTok{joules}\NormalTok{ = N }\PreprocessorTok{*}\NormalTok{ m}
\ExtensionTok{J}\NormalTok{ = joules}
\ExtensionTok{print}\ErrorTok{(}\StringTok{"pi ="}\ExtensionTok{,}\NormalTok{ pi}\KeywordTok{)}
\ExtensionTok{print}\ErrorTok{(}\StringTok{"tau ="}\ExtensionTok{,}\NormalTok{ t}\KeywordTok{)}
\CommentTok{\# Speed of light in meters/second}
\ExtensionTok{speed\_of\_light}\NormalTok{ = 299792458 }\PreprocessorTok{*}\NormalTok{ meters/seconds}
\ExtensionTok{sol}\NormalTok{ = speed\_of\_light}
\ExtensionTok{c}\NormalTok{ = sol}
\ExtensionTok{print}\ErrorTok{(}\StringTok{"si c ="}\ExtensionTok{,}\NormalTok{ c}\KeywordTok{)}
\ExtensionTok{rnu\_c}\NormalTok{ = c / c}
\ExtensionTok{print}\ErrorTok{(}\StringTok{"R\textbackslash{}u03BD c ="}\ExtensionTok{,}\NormalTok{ rnu\_c}\KeywordTok{)}
\CommentTok{\# Gravitational Constant}
\ExtensionTok{gravitational\_constant}\NormalTok{ = 6.67384e{-}11 }\PreprocessorTok{*}\NormalTok{ N}\PreprocessorTok{*(}\NormalTok{m\^{}2/kg\^{}2}\PreprocessorTok{)}
\ExtensionTok{G}\NormalTok{ = gravitational\_constant}
\ExtensionTok{print}\ErrorTok{(}\StringTok{"si G ="}\ExtensionTok{,}\NormalTok{ G}\KeywordTok{)}
\ExtensionTok{rnu\_G}\NormalTok{ = 4}\PreprocessorTok{*}\NormalTok{pi}\PreprocessorTok{*}\NormalTok{G/c\^{}2}
\ExtensionTok{Go}\NormalTok{ = rnu\_G}
\ExtensionTok{print}\ErrorTok{(}\StringTok{"R\textbackslash{}u03BD Go ="}\ExtensionTok{,}\NormalTok{ Go}\KeywordTok{)}
\CommentTok{\# Planck\textquotesingle{}s Constant}
\ExtensionTok{reduced\_plancks\_constant}\NormalTok{ = 1.054571726e{-}34 }\PreprocessorTok{*}\NormalTok{ J}\PreprocessorTok{*}\NormalTok{s}
\ExtensionTok{h\_bar}\NormalTok{ = reduced\_plancks\_constant}
\ExtensionTok{print}\ErrorTok{(}\StringTok{"si \textbackslash{}u210F ="}\ExtensionTok{,}\NormalTok{ h\_bar}\KeywordTok{)}
\ExtensionTok{rnu\_h\_bar}\NormalTok{ = h\_bar }\PreprocessorTok{*}\NormalTok{ Go / c}
\ExtensionTok{print}\ErrorTok{(}\StringTok{"R\textbackslash{}u03BD "}\ExtensionTok{u}\StringTok{"\textbackslash{}u210F ="}\ExtensionTok{,}\NormalTok{ rnu\_h\_bar}\KeywordTok{)}
\CommentTok{\# Planck Length}
\ExtensionTok{rnu\_h\_bar\_str}\NormalTok{ = str}\ErrorTok{(}\ExtensionTok{rnu\_h\_bar}\KeywordTok{)}
\ExtensionTok{numerical\_part\_str}\NormalTok{ = rnu\_h\_bar\_str.split}\ErrorTok{(}\StringTok{\textquotesingle{}*\textquotesingle{}}\KeywordTok{)}\ExtensionTok{[0]}
\ExtensionTok{numerical\_part\_str}\NormalTok{ = numerical\_part\_str.strip}\ErrorTok{(}\StringTok{\textquotesingle{}()\textquotesingle{}}\KeywordTok{)}
\ExtensionTok{numerical\_part}\NormalTok{ = float}\ErrorTok{(}\ExtensionTok{numerical\_part\_str}\KeywordTok{)}
\ExtensionTok{rnu\_sqrt\_h\_bar}\NormalTok{ = numerical\_part\^{}}\ErrorTok{(}\ExtensionTok{1/2}\KeywordTok{)}
\CommentTok{\# \^{} Sage cannot process sqrt on units... Lame.}
\ExtensionTok{lP}\NormalTok{ = rnu\_sqrt\_h\_bar }\PreprocessorTok{*}\NormalTok{ m}
\ExtensionTok{print}\ErrorTok{(}\StringTok{"R\textbackslash{}u03BD \textbackslash{}u221A\textbackslash{}u210F ="}\ExtensionTok{,}\NormalTok{ lP}\KeywordTok{)}
\end{Highlighting}
\end{Shaded}
\subsubsection{Output}\label{output}
\begin{verbatim}
pi = 3.14159
tau = 6.28319
si c = 299792458*m/s
Rν c = 1
si G = (6.67384e-11)*m^3/(kg*s^2)
Rν Go = (9.33135e-27)*m/kg
si ℏ = (1.05457e-34)*kg*m^2/s
Rν ℏ = (3.28246e-69)*m^2
Rν √ℏ = (5.72928e-35)*m
si lP = (1.61620e-35)*sqrt(m^2)
Rν lP = (2.77455e-47)*sqrt(m^3/kg)
\end{verbatim}
\chapter{Terminology}\label{terminology}
\chapter*{Citations}\label{citations}
\addcontentsline{toc}{chapter}{Citations}
\protect\phantomsection\label{refs}
\begin{CSLReferences}{1}{1}
\bibitem[\citeproctext]{ref-IsaacNewtonLetter}
{``Isaac {Newton} Letter to {Robert Hooke}, 1675.''} n.d.
\end{CSLReferences}
\backmatter
\end{document}

185
build/conf/style.css Normal file
View File

@ -0,0 +1,185 @@
/* ------------------------------
Base book typography
------------------------------ */
body {
font-family: "Libertinus Serif", Georgia, serif;
max-width: 42em;
margin: auto;
padding: 3rem 1.25rem;
line-height: 1.65;
background: #fff;
color: #111;
}
/* ------------------------------
Headings
------------------------------ */
h1, h2, h3, h4 {
font-family: "Libertinus Sans", sans-serif;
font-weight: 600;
margin-top: 2em;
margin-bottom: 0.6em;
}
h1 {
font-size: 2.1rem;
border-bottom: 2px solid #ddd;
padding-bottom: 0.4rem;
}
h2 {
font-size: 1.6rem;
}
h3 {
font-size: 1.25rem;
}
/* ------------------------------
Front matter page
------------------------------ */
.frontmatter {
text-align: center;
margin-top: 10vh;
}
.frontmatter img {
max-width: 30%;
margin: 2rem auto;
display: block;
}
/* ------------------------------
Lists / paragraphs
------------------------------ */
p {
margin: 1em 0;
}
ul, ol {
padding-left: 1.5em;
margin: 1em 0;
}
/* ------------------------------
Math block spacing
------------------------------ */
.math.display {
margin: 1.2em 0;
}
/* ------------------------------
Callouts (final tuned spacing)
------------------------------ */
.callout-established,
.callout-proposed,
.callout-speculative {
border-radius: 6px;
padding: 5px; /* internal padding */
margin-top: 5px; /* external spacing tightened */
margin-bottom: 5px;
border-left: 6px solid;
background: #fefefe;
}
/* Title line */
.callout-established p:first-child strong,
.callout-proposed p:first-child strong,
.callout-speculative p:first-child strong {
display: block;
font-family: "Libertinus Sans", sans-serif;
font-weight: 600;
font-size: 1.05rem;
margin-bottom: 5px;
}
/* Paragraphs inside callouts */
.callout-established p,
.callout-proposed p,
.callout-speculative p {
margin-top: 5px;
margin-bottom: 5px;
line-height: 1.45; /* slightly condensed text spacing */
}
/* Remove top margin on first paragraph, bottom on last */
.callout-established p:first-child,
.callout-proposed p:first-child,
.callout-speculative p:first-child {
margin-top: 0;
}
.callout-established p:last-child,
.callout-proposed p:last-child,
.callout-speculative p:last-child {
margin-bottom: 0;
}
/* Math inside callouts */
.callout-established .math.display,
.callout-proposed .math.display,
.callout-speculative .math.display {
margin: 0.4em 0;
}
/* Colors */
.callout-established {
background: #e8f7e8;
border-left-color: #3a8d3a;
}
.callout-proposed {
background: #e8f0ff;
border-left-color: #3b6dd8;
}
.callout-speculative {
background: #f7e8ff;
border-left-color: #8b2be2;
}
/* ------------------------------
Images (in body content)
------------------------------ */
img {
max-width: 100%;
display: block;
margin: 1.2em auto;
}
/* ------------------------------
Blockquotes (normal ones)
------------------------------ */
blockquote {
border-left: 4px solid #ccc;
padding-left: 1em;
font-style: italic;
color: #444;
}
/* ------------------------------
Horizontal rule
------------------------------ */
hr {
margin: 3rem 0;
border: none;
border-top: 1px solid #ddd;
}
/* ------------------------------
Code (rare in your book)
------------------------------ */
code {
background: #f3f3f3;
padding: 0.1em 0.3em;
border-radius: 4px;
font-size: 0.95em;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

BIN
build/lib/img/Pii.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

BIN
build/lib/img/Pio.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

BIN
build/lib/img/Poi.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

BIN
build/lib/img/Poo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 350 350"><path fill="#aaa" d="M0 0h350v350H0z"/><g transform="translate(175 175)"><circle r="3"/><g fill="none" stroke-linecap="square"><g id="a"><path stroke="#eee" d="m-8-106 4-12H9"/><path stroke="#777" d="m9-118-4 12H-8"/></g><use xlink:href="#a" transform="rotate(12)"/><use xlink:href="#a" transform="rotate(24)"/><use xlink:href="#a" transform="rotate(36)"/><use xlink:href="#a" transform="rotate(48)"/><use xlink:href="#a" transform="rotate(60)"/><use xlink:href="#a" transform="rotate(72)"/><use xlink:href="#a" transform="rotate(84)"/><use xlink:href="#a" transform="rotate(96)"/><use xlink:href="#a" transform="rotate(108)"/><use xlink:href="#a" transform="rotate(120)"/><use xlink:href="#a" transform="rotate(132)"/><use xlink:href="#a" transform="rotate(144)"/><use xlink:href="#a" transform="rotate(156)"/><use xlink:href="#a" transform="rotate(168)"/><use xlink:href="#a" transform="rotate(180)"/><use xlink:href="#a" transform="rotate(-12)"/><use xlink:href="#a" transform="rotate(-24)"/><use xlink:href="#a" transform="rotate(-36)"/><use xlink:href="#a" transform="rotate(-48)"/><use xlink:href="#a" transform="rotate(-60)"/><use xlink:href="#a" transform="rotate(-72)"/><use xlink:href="#a" transform="rotate(-84)"/><use xlink:href="#a" transform="rotate(-96)"/><use xlink:href="#a" transform="rotate(-108)"/><use xlink:href="#a" transform="rotate(-120)"/><use xlink:href="#a" transform="rotate(-132)"/><use xlink:href="#a" transform="rotate(-144)"/><use xlink:href="#a" transform="rotate(-156)"/><use xlink:href="#a" transform="rotate(-168)"/><g id="b"><path stroke="#eee" d="m10-135-4-12H-7"/><path stroke="#777" d="m-7-147 4 12h13"/></g><use xlink:href="#b" transform="rotate(10)"/><use xlink:href="#b" transform="rotate(20)"/><use xlink:href="#b" transform="rotate(30)"/><use xlink:href="#b" transform="rotate(40)"/><use xlink:href="#b" transform="rotate(50)"/><use xlink:href="#b" transform="rotate(60)"/><use xlink:href="#b" transform="rotate(70)"/><use xlink:href="#b" transform="rotate(80)"/><use xlink:href="#b" transform="rotate(90)"/><use xlink:href="#b" transform="rotate(100)"/><use xlink:href="#b" transform="rotate(110)"/><use xlink:href="#b" transform="rotate(120)"/><use xlink:href="#b" transform="rotate(130)"/><use xlink:href="#b" transform="rotate(140)"/><use xlink:href="#b" transform="rotate(150)"/><use xlink:href="#b" transform="rotate(160)"/><use xlink:href="#b" transform="rotate(170)"/><use xlink:href="#b" transform="rotate(180)"/><use xlink:href="#b" transform="rotate(-10)"/><use xlink:href="#b" transform="rotate(-20)"/><use xlink:href="#b" transform="rotate(-30)"/><use xlink:href="#b" transform="rotate(-40)"/><use xlink:href="#b" transform="rotate(-50)"/><use xlink:href="#b" transform="rotate(-60)"/><use xlink:href="#b" transform="rotate(-70)"/><use xlink:href="#b" transform="rotate(-80)"/><use xlink:href="#b" transform="rotate(-90)"/><use xlink:href="#b" transform="rotate(-100)"/><use xlink:href="#b" transform="rotate(-110)"/><use xlink:href="#b" transform="rotate(-120)"/><use xlink:href="#b" transform="rotate(-130)"/><use xlink:href="#b" transform="rotate(-140)"/><use xlink:href="#b" transform="rotate(-150)"/><use xlink:href="#b" transform="rotate(-160)"/><use xlink:href="#b" transform="rotate(-170)"/></g></g></svg>

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

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

@ -0,0 +1 @@
!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}}}}})}();

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