This guide explains how to use this project and what is expected behaviour.
Setup [guide-0001]
Setup [guide-0001]
Steps to setup the project:
- Run
raco pkg install --auto tr
in the project - Creates a directory
mkdir your-site
and goes into it - Run
raco tr init
then updatesite.json
(check Shell Commands for more CLI interaction)
raco tr init
do the following
- Create
.gitignore
with_tmp/ _build/ assets/
- Create
site.json
with{ "domain": "your domain", "title": "your site title", "description": "your site description" }
git clone https://git.sr.ht/\~dannypsnl/tr-assets assets
Create directory
content
andcontent/post
git init
Now you can add some *.scrbl
in content/
directory as you wanted. Each *.scrbl
is called a card.
Directory content/post
is treated specially in that RSS only use cards in this directory as items.
A card addr.scrbl
(no matter its full path) has an address addr
, and the address must be unique in the whole TR project.
The content of card mostly are just HTML in at-exp form, scribble HTML describes more about what can be used.
Further guide will teach you what's in the toolbox.
Configuration [guide-0009]
Configuration [guide-0009]
By default, the configuration file is site.json
, in some tr
command you can config to use different configuration (read CLI --help
result to learn).
{ "domain": "your domain", "title": "your site title", "description": "your site description" }
Optional options are
"output-path"
, default value is"_build"
, wheretr build
command produces files for publish. You can runpython3 -m http.server -d _build
to view result, or upload it to host.
"mode"
, default value is"release"
, when the value is"dev"
.TR produces
sourcemap.json
in the output path, that enables Meta/Ctrl + E to edit the current page.
Metadata [guide-0002]
Metadata [guide-0002]
There are several metadata can be set to a card, list as below:
@taxon{...}
it accepts a text@title{...}
it accepts a list of forms@author{...}
it only accepts a card address@author/literal{...}
it accepts a text@date{...}
it accepts a text, but I suggest inyyyy/mm/dd
format@doi{...}
it accepts a DOI format like10.1145/3571239
@orcid{...}
it accepts a ORCID format text@meta/text{...}
it accepts arbitrary text as metadata@meta/link{...}
it accepts a link@toc/depth[n]
it accepts an integer, which is the depth of generated TOC, the default value is2
Example. A Regular card [guide-0008]
Example. A Regular card [guide-0008]
Here I made an example to show what will actually be put in your *.scrbl
file.
@date{2025-07-05} @taxon{Example} @title{A card} @author{people-addr} @p{Hello, brabrabra...}
Link to other cards [guide-0003]
Link to other cards [guide-0003]
You can use @mention{addr}
to mention a card, it will tell addr
it has a backlinks, e.g. I can mention the guide itself Guide. If the mentioned card has taxon Reference
, it will not be a related card, but a references card, let me mention a cool book as an example 10 PRINT CHR$(205.5+RND(1)); : GOTO 10.
You can use @transclude{addr}
to include a card, it will tell addr
it has a context. This guide itself is an example of transclude.
Embed external web page
Since you can use any HTML, iframe
for sure is counted, you can embed external web page, e.g.
Math Support [guide-0004]
Math Support [guide-0004]
tr
use Katex in two forms: @m{...}
and @mm{...}
. One for inline and one for block, e.g. @m{a \in \R}
produces
; @mm{ \int_{a}^{b} x^2 \,dx }
produces
Except Katex, tr
also supports backend LaTeX solution, you can put tikz program in @tikzcd{...}
block to draw quiver, for example
Or @texfig{...}
for more flexible input (anything allowed in LaTeX document block). For example
@texfig{ ... }
If you want to use packages, write as below (the change is introduced since texfig now must manually assigns LaTeX header part)
@texfig[#:header @" \\usepackage{tikz} \\usetikzlibrary{spath3, intersections, backgrounds} "]{ ... }
We support @typst{...}
which use Typst as backend, check Typst backend for more information.
Support Code in Card [guide-0007]
Support Code in Card [guide-0007]
You can write @tr/code{...}
to extend card, for example
@tr/code{#lang racket (provide (all-defined-out)) (define RR "\\mathbb{R}") }
then you can use @m{@RR}
to get
. Check tr/code for more details.
Shell Commands [guide-0005]
Shell Commands [guide-0005]
If you face error like raco tr
cannot find such command, run raco setup
.
- Run
raco tr build
to build HTMLs - Run
raco tr watch
to watch content changes and build on fly - Run
raco tr next
to get next available address, for example, you might like to runvi $(raco tr next xxx).scrbl
to work on a new file (replacevi
with any command line editor command) - Run
raco tr meta
to get metadata of address, I recommend you use| jq .
after the command to get pretty output.
Special form [guide-0006]
Special form [guide-0006]
There are some special forms for certain purpose
@bibtex[...]
it accepts a string that is bibtex format