feat: use latex hugo template

This commit is contained in:
Youwen Wu 2025-06-21 02:30:42 -07:00
parent 1d12f5614d
commit 9004c27ceb
Signed by: youwen
GPG key ID: 865658ED1FE61EC3
56 changed files with 1666 additions and 2 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

732
static/css/latex.css Normal file
View file

@ -0,0 +1,732 @@
/*!
* Taken from LaTeX.css (https://latex.now.sh/)
*
* Source: https://github.com/vincentdoerig/latex-css
* Licensed under MIT (https://github.com/vincentdoerig/latex-css/blob/master/LICENSE)
*
* Modified for this usecase.
*/
@font-face {
font-family: 'Latin Modern';
font-style: normal;
font-weight: normal;
font-display: swap;
src: url('./fonts/LM-regular.woff2') format('woff2'),
url('./fonts/LM-regular.woff') format('woff'),
url('./fonts/LM-regular.ttf') format('truetype');
}
@font-face {
font-family: 'Latin Modern';
font-style: italic;
font-weight: normal;
font-display: swap;
src: url('./fonts/LM-italic.woff2') format('woff2'),
url('./fonts/LM-italic.woff') format('woff'),
url('./fonts/LM-italic.ttf') format('truetype');
}
@font-face {
font-family: 'Latin Modern';
font-style: normal;
font-weight: bold;
font-display: swap;
src: url('./fonts/LM-bold.woff2') format('woff2'),
url('./fonts/LM-bold.woff') format('woff'),
url('./fonts/LM-bold.ttf') format('truetype');
}
@font-face {
font-family: 'Latin Modern';
font-style: italic;
font-weight: bold;
font-display: swap;
src: url('./fonts/LM-bold-italic.woff2') format('woff2'),
url('./fonts/LM-bold-italic.woff') format('woff'),
url('./fonts/LM-bold-italic.ttf') format('truetype');
}
@font-face {
font-family: 'Libertinus';
font-style: normal;
font-weight: normal;
font-display: swap;
src: url('./fonts/Libertinus-regular.woff2') format('woff2');
}
@font-face {
font-family: 'Libertinus';
font-style: italic;
font-weight: normal;
font-display: swap;
src: url('./fonts/Libertinus-italic.woff2') format('woff2');
}
@font-face {
font-family: 'Libertinus';
font-style: normal;
font-weight: bold;
font-display: swap;
src: url('./fonts/Libertinus-bold.woff2') format('woff2');
}
@font-face {
font-family: 'Libertinus';
font-style: italic;
font-weight: bold;
font-display: swap;
src: url('./fonts/Libertinus-bold-italic.woff2') format('woff2');
}
@font-face {
font-family: 'Libertinus';
font-style: normal;
font-weight: 600;
font-display: swap;
src: url('./fonts/Libertinus-semibold.woff2') format('woff2');
}
@font-face {
font-family: 'Libertinus';
font-style: italic;
font-weight: 600;
font-display: swap;
src: url('./fonts/Libertinus-semibold-italic.woff2') format('woff2');
}
/* Box sizing rules */
*,
*::before,
*::after {
box-sizing: border-box;
}
:root {
--body-color: hsl(0, 5%, 10%);
--body-bg-color: hsl(210, 20%, 98%);
--link-visited: hsl(0, 100%, 33%);
--link-focus-outline: hsl(220, 90%, 52%);
--pre-bg-color: hsl(210, 28%, 93%);
--kbd-bg-color: hsl(210, 5%, 100%);
--kbd-border-color: hsl(210, 5%, 70%);
--table-border-color: black;
--border-width-thin: 1.36px;
--border-width-thick: 2.27px;
--sidenote-target-border-color: hsl(55, 55%, 70%);
--footnotes-border-color: hsl(0, 0%, 39%);
--text-indent-size: 1.463rem; /* In 12pt [Latin Modern font] LaTeX article
\parindent =~ 17.625pt; taking also into account the ratio
1pt[LaTeX] = (72 / 72.27) * 1pt[HTML], with default 12pt/1rem LaTeX.css font
size, the indentation value in rem CSS units is:
\parindent =~ 17.625 * (72 / 72.27) / 12 = 1.463rem. */
}
.latex-dark {
--body-color: hsl(0, 0%, 86%);
--body-bg-color: hsl(0, 0%, 16%);
--link-visited: hsl(196 80% 77%);
--link-focus-outline: hsl(215, 63%, 73%);
--pre-bg-color: hsl(0, 1%, 25%);
--kbd-bg-color: hsl(0, 0%, 16%);
--kbd-border-color: hsl(210, 5%, 70%);
--table-border-color: white;
--sidenote-target-border-color: hsl(0, 0%, 59%);
--footnotes-border-color: hsl(0, 0%, 59%);
--proof-symbol-filter: invert(80%);
}
@media (prefers-color-scheme: dark) {
.latex-dark-auto {
--body-color: hsl(0, 0%, 86%);
--body-bg-color: hsl(0, 0%, 16%);
--link-visited: hsl(196 80% 77%);
--link-focus-outline: hsl(215, 63%, 73%);
--pre-bg-color: hsl(0, 1%, 25%);
--kbd-bg-color: hsl(0, 0%, 16%);
--kbd-border-color: hsl(210, 5%, 70%);
--table-border-color: white;
--sidenote-target-border-color: hsl(0, 0%, 59%);
--footnotes-border-color: hsl(0, 0%, 59%);
--proof-symbol-filter: invert(80%);
}
}
/* Remove default margin */
body,
h1,
h2,
h3,
h4,
p,
ul[class],
ol[class],
li,
figure,
figcaption,
dl,
dd {
margin: 0;
}
/* Make default font-size 1rem and add smooth scrolling to anchors */
html {
font-size: 1rem;
}
@media (prefers-reduced-motion: no-preference) {
html {
scroll-behavior: smooth;
}
}
body.libertinus {
font-family: 'Libertinus', Georgia, Cambria, 'Times New Roman', Times, serif;
}
body {
font-family: 'Latin Modern', Georgia, Cambria, 'Times New Roman', Times, serif;
line-height: 1.8;
max-width: 90ch;
min-height: 100vh;
overflow-x: hidden;
margin: 0 auto;
padding: 2rem 1.25rem;
counter-reset: theorem definition sidenote-counter;
color: var(--body-color);
background-color: var(--body-bg-color);
text-rendering: optimizeLegibility;
}
/* Justify and hyphenate all paragraphs */
p {
text-align: justify;
hyphens: auto;
-webkit-hyphens: auto;
-moz-hyphens: auto;
margin-top: 1rem;
}
/* Indents paragraphs like in LaTeX documents*/
.indent-pars p {
text-indent: var(--text-indent-size);
}
.indent-pars p.no-indent,
p.no-indent {
text-indent: 0;
}
.indent-pars ol p,
.indent-pars ul p {
text-indent: 0;
}
.indent-pars h2 + p,
.indent-pars h3 + p,
.indent-pars h4 + p {
text-indent: 0;
}
/* A elements that don't have a class get default styles */
a:not([class]) {
text-decoration-skip-ink: auto;
}
/* Make links red */
a,
a:visited {
color: var(--link-visited);
}
a:focus {
outline-offset: 2px;
outline: 2px solid var(--link-focus-outline);
}
/* Make images easier to work with */
img {
max-width: 100%;
height: auto;
display: block;
}
/* Inherit fonts for inputs and buttons */
input,
button,
textarea,
select {
font: inherit;
}
/* Prevent textarea from overflowing */
textarea {
width: 100%;
}
/* Natural flow and rhythm in articles by default */
article > * + * {
margin-top: 1em;
}
/* Styles for inline code or code snippets */
code,
pre,
kbd {
font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New',
monospace;
font-size: 85%;
}
pre {
padding: 1rem 1.4rem;
max-width: 100%;
overflow: auto;
border-radius: 4px;
background: var(--pre-bg-color);
}
pre code {
font-size: 95%;
position: relative;
}
kbd {
background: var(--kbd-bg-color);
border: 1px solid var(--kbd-border-color);
border-radius: 2px;
padding: 2px 4px;
font-size: 75%;
}
/* Better tables */
table:not(.borders-custom) {
border-collapse: collapse;
border-spacing: 0;
width: auto;
max-width: 100%;
border-top: var(--border-width-thick) solid var(--table-border-color);
border-bottom: var(--border-width-thick) solid var(--table-border-color);
/* display: block; */
overflow-x: auto; /* does not work because element is not block */
/* white-space: nowrap; */
counter-increment: caption;
}
/* add bottom border on column table headings */
table:not(.borders-custom) tr > th[scope='col'] {
border-bottom: var(--border-width-thin) solid var(--table-border-color);
}
/* add right border on row table headings */
table:not(.borders-custom) tr > th[scope='row'] {
border-right: var(--border-width-thin) solid var(--table-border-color);
}
table:not(.borders-custom) > tbody > tr:first-child > td,
table:not(.borders-custom) > tbody > tr:first-child > th {
border-top: var(--border-width-thin) solid var(--table-border-color);
}
table:not(.borders-custom) > tbody > tr:last-child > td,
table:not(.borders-custom) > tbody > tr:last-child > th {
border-bottom: var(--border-width-thin) solid var(--table-border-color);
}
th,
td {
text-align: left;
padding: 0.5rem;
line-height: 1.1;
}
/* Table caption */
caption {
text-align: left;
font-size: 0.923em;
/* border-bottom: 2pt solid #000; */
padding: 0 0.25em 0.25em;
width: 100%;
margin-left: 0;
}
caption::before {
content: 'Table ' counter(caption) '. ';
font-weight: bold;
}
/* allow scroll on the x-axis */
.scroll-wrapper {
overflow-x: auto;
}
/* if a table is wrapped in a scroll wrapper,
the table cells shouldn't wrap */
.scroll-wrapper > table td {
white-space: nowrap;
}
/* Table custom borders */
table.borders-custom {
border-collapse: collapse;
border-spacing: 0;
width: auto;
max-width: 100%;
overflow-x: auto;
counter-increment: caption;
}
.border-top-thick {
border-top: var(--border-width-thick) solid var(--table-border-color);
}
.border-right-thick {
border-right: var(--border-width-thick) solid var(--table-border-color);
}
.border-bottom-thick {
border-bottom: var(--border-width-thick) solid var(--table-border-color);
}
.border-left-thick {
border-left: var(--border-width-thick) solid var(--table-border-color);
}
.border-top-thin {
border-top: var(--border-width-thin) solid var(--table-border-color);
}
.border-right-thin {
border-right: var(--border-width-thin) solid var(--table-border-color);
}
.border-bottom-thin {
border-bottom: var(--border-width-thin) solid var(--table-border-color);
}
.border-left-thin {
border-left: var(--border-width-thin) solid var(--table-border-color);
}
/* Table column alignment */
.col-1-l tr > :nth-child(1),
.col-2-l tr > :nth-child(2),
.col-3-l tr > :nth-child(3),
.col-4-l tr > :nth-child(4),
.col-5-l tr > :nth-child(5),
.col-6-l tr > :nth-child(6),
.col-7-l tr > :nth-child(7),
.col-8-l tr > :nth-child(8),
.col-9-l tr > :nth-child(9),
.col-10-l tr > :nth-child(10),
.col-11-l tr > :nth-child(11),
.col-12-l tr > :nth-child(12) {
text-align: left;
}
.col-1-c tr > :nth-child(1),
.col-2-c tr > :nth-child(2),
.col-3-c tr > :nth-child(3),
.col-4-c tr > :nth-child(4),
.col-5-c tr > :nth-child(5),
.col-6-c tr > :nth-child(6),
.col-7-c tr > :nth-child(7),
.col-8-c tr > :nth-child(8),
.col-9-c tr > :nth-child(9),
.col-10-c tr > :nth-child(10),
.col-11-c tr > :nth-child(11),
.col-12-c tr > :nth-child(12) {
text-align: center;
}
.col-1-r tr > :nth-child(1),
.col-2-r tr > :nth-child(2),
.col-3-r tr > :nth-child(3),
.col-4-r tr > :nth-child(4),
.col-5-r tr > :nth-child(5),
.col-6-r tr > :nth-child(6),
.col-7-r tr > :nth-child(7),
.col-8-r tr > :nth-child(8),
.col-9-r tr > :nth-child(9),
.col-10-r tr > :nth-child(10),
.col-11-r tr > :nth-child(11),
.col-12-r tr > :nth-child(12) {
text-align: right;
}
/* Center align the title */
h1:first-child {
text-align: center;
}
/* Nested ordered list for ToC */
nav ol {
counter-reset: item;
padding-left: 2rem;
}
nav li {
display: block;
}
nav li:before {
content: counters(item, '.') ' ';
counter-increment: item;
padding-right: 0.85rem;
}
/* Center definitions (most useful for display equations) */
dl dd {
text-align: center;
}
/* Theorem */
.theorem {
counter-increment: theorem;
display: block;
margin: 12px 0;
font-style: italic;
}
.theorem::before {
content: 'Theorem ' counter(theorem) '. ';
font-weight: bold;
font-style: normal;
}
/* Lemma */
.lemma {
counter-increment: theorem;
display: block;
margin: 12px 0;
font-style: italic;
}
.lemma::before {
content: 'Lemma ' counter(theorem) '. ';
font-weight: bold;
font-style: normal;
}
/* Proof */
.proof {
display: block;
margin: 12px 0;
font-style: normal;
position: relative;
}
.proof::before {
content: 'Proof.' attr(title);
font-style: italic;
}
.proof:after {
content: '◾️';
filter: var(--proof-symbol-filter);
position: absolute;
right: -12px;
bottom: -2px;
}
/* Definition */
.definition {
counter-increment: definition;
display: block;
margin: 12px 0;
font-style: normal;
}
.definition::before {
content: 'Definition ' counter(definition) '. ';
font-weight: bold;
font-style: normal;
}
/* Center align author name, use small caps and add vertical spacing */
.author {
margin: 0.85rem 0;
font-variant-caps: small-caps;
text-align: center;
}
/* Sidenotes */
.sidenote {
font-size: 0.8rem;
float: right;
clear: right;
width: 18vw;
margin-right: -20vw;
margin-bottom: 1em;
text-indent: 0;
}
.sidenote.left {
float: left;
margin-left: -20vw;
margin-bottom: 1em;
text-indent: 0;
}
/* (WIP) add border when a sidenote is clicked on */
.sidenote:target {
border: var(--sidenote-target-border-color) 1.5px solid;
padding: 0 .5rem;
scroll-margin-block-start: 10rem;
}
/* sidenote counter */
.sidenote-number {
counter-increment: sidenote-counter;
}
.sidenote-number::after,
.sidenote::before {
position: relative;
vertical-align: baseline;
}
/* add number in main content */
.sidenote-number::after {
content: counter(sidenote-counter);
font-size: 0.7rem;
top: -0.5rem;
left: 0.1rem;
}
/* add number in front of the sidenote */
.sidenote-number ~ .sidenote::before {
content: counter(sidenote-counter) ' ';
font-size: 0.7rem;
top: -0.5rem;
}
label.sidenote-toggle:not(.sidenote-number) {
display: none;
}
/* sidenotes inside blockquotes are indented more */
blockquote .sidenote {
margin-right: -24vw;
width: 18vw;
}
label.sidenote-toggle {
display: inline;
cursor: pointer;
}
input.sidenote-toggle {
display: none;
}
@media (max-width: 1050px) {
label.sidenote-toggle:not(.sidenote-number) {
display: inline;
}
.sidenote {
display: none;
}
.sidenote-toggle:checked + .sidenote {
display: block;
margin: 0.5rem 1.25rem 1rem 0.5rem;
float: left;
left: 1rem;
clear: both;
width: 95%;
}
/* tweak indentation of sidenote inside a blockquote */
blockquote .sidenote {
margin-right: -25vw;
width: 16vw;
}
}
/* Make footnote text smaller and left align it (looks bad with long URLs) */
.footnotes p {
text-align: left;
line-height: 1.5;
font-size: 85%;
margin-bottom: 0.4rem;
}
.footnotes {
border-top: 1px solid var(--footnotes-border-color);
}
/* Center title and paragraph */
.abstract,
.abstract p {
text-align: center;
margin-top: 0;
}
.abstract {
margin: 2.25rem 0;
}
.abstract > h2 {
font-size: 1rem;
margin-bottom: -0.2rem;
}
/* Format the LaTeX symbol correctly (a higher up, e lower) */
.latex span:nth-child(1) {
text-transform: uppercase;
font-size: 0.75em;
vertical-align: 0.28em;
margin-left: -0.48em;
margin-right: -0.15em;
line-height: 1ex;
}
.latex span:nth-child(2) {
text-transform: uppercase;
vertical-align: -0.5ex;
margin-left: -0.1667em;
margin-right: -0.125em;
line-height: 1ex;
}
/* Heading typography */
h1 {
font-size: 2.5rem;
line-height: 3.25rem;
margin-bottom: 1.625rem;
}
h2 {
font-size: 1.7rem;
line-height: 2rem;
margin-top: 3rem;
}
h3 {
font-size: 1.4rem;
margin-top: 2.5rem;
}
h4 {
font-size: 1.2rem;
margin-top: 2rem;
}
h5 {
font-size: 1rem;
margin-top: 1.8rem;
}
h6 {
font-size: 1rem;
font-style: italic;
font-weight: normal;
margin-top: 2.5rem;
}
h3,
h4,
h5,
h6 {
line-height: 1.625rem;
}
h1 + h2 {
margin-top: 1.625rem;
}
h2 + h3,
h3 + h4,
h4 + h5 {
margin-top: 0.8rem;
}
h5 + h6 {
margin-top: -0.8rem;
}
h2,
h3,
h4,
h5,
h6 {
margin-bottom: 0.8rem;
}

33
static/css/main.css Normal file
View file

@ -0,0 +1,33 @@
footer .theme-by {
text-align: center;
margin: 100px 0 0;
}
.pager {
list-style: none;
text-align: center;
margin: 20px 0 0;
padding-left: 0;
}
.pager ul {
display: block;
}
.pager .previous > a {
margin: 20px 0 0;
float: left;
display: block;
}
.pager .next > a {
margin: 20px 0 0;
float: right;
display: block;
}
@media (min-width: 800px) {
html {
font-size: 1.2rem;
};
}

File diff suppressed because one or more lines are too long