aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSilvio Rhatto <rhatto@riseup.net>2021-03-04 15:29:27 -0300
committerSilvio Rhatto <rhatto@riseup.net>2021-03-04 15:29:27 -0300
commitd7ebfdb85cf73c027fb928518004533e428f3893 (patch)
tree23397f8fb433156d0e69dee35c6cfd1d76f5cd23
parentbc27cc5f209d9d90454c7f3d2a5b127ba5171905 (diff)
downloadblog-d7ebfdb85cf73c027fb928518004533e428f3893.tar.gz
blog-d7ebfdb85cf73c027fb928518004533e428f3893.tar.bz2
Feat: MathJax setup
-rw-r--r--.gitmodules6
-rw-r--r--assets/css/local.css (renamed from local.css)0
-rw-r--r--ikiwiki.yaml8
-rwxr-xr-xlib/IkiWiki/Plugin/mathjax.pm74
-rw-r--r--meta.md2
-rw-r--r--research/computing/suckless/sites.md7
-rw-r--r--research/economics/valor-social.md60
-rw-r--r--templates/page.tmpl6
m---------vendor/MathJax0
-rw-r--r--vendor/bootstrap/css/bootstrap-responsive.css (renamed from bootstrap/css/bootstrap-responsive.css)0
-rw-r--r--vendor/bootstrap/css/bootstrap-responsive.min.css (renamed from bootstrap/css/bootstrap-responsive.min.css)0
-rw-r--r--vendor/bootstrap/css/bootstrap.css (renamed from bootstrap/css/bootstrap.css)0
-rw-r--r--vendor/bootstrap/css/bootstrap.min.css (renamed from bootstrap/css/bootstrap.min.css)0
-rw-r--r--vendor/bootstrap/img/glyphicons-halflings-white.png (renamed from bootstrap/img/glyphicons-halflings-white.png)bin8777 -> 8777 bytes
-rw-r--r--vendor/bootstrap/img/glyphicons-halflings.png (renamed from bootstrap/img/glyphicons-halflings.png)bin12799 -> 12799 bytes
m---------vendor/ikiwiki-plugin-mathjax0
16 files changed, 126 insertions, 37 deletions
diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 0000000..46a8d54
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,6 @@
+[submodule "vendor/ikiwiki-plugin-mathjax"]
+ path = vendor/ikiwiki-plugin-mathjax
+ url = https://github.com/bk/ikiwiki-plugin-mathjax
+[submodule "vendor/MathJax"]
+ path = vendor/MathJax
+ url = https://github.com/mathjax/MathJax.git
diff --git a/local.css b/assets/css/local.css
index b94d3f7..b94d3f7 100644
--- a/local.css
+++ b/assets/css/local.css
diff --git a/ikiwiki.yaml b/ikiwiki.yaml
index 4780ec4..3467f1e 100644
--- a/ikiwiki.yaml
+++ b/ikiwiki.yaml
@@ -1,10 +1,10 @@
# IkiWiki::Setup::Yaml - YAML formatted setup file
#
# Setup file for ikiwiki.
-#
+#
# Passing this to ikiwiki --setup will make ikiwiki generate
# wrappers and build the wiki.
-#
+#
# Remember to re-run ikiwiki --setup any time you edit this file.
#
# name of the wiki
@@ -44,6 +44,7 @@ add_plugins:
- sidebar
- teximg
- favicon
+- mathjax
# plugins to disable
disable_plugins:
- openid
@@ -90,7 +91,7 @@ umask: 2
# group for wrappers to run in
#wrappergroup: ikiwiki
# extra library and plugin directory
-libdir: ''
+libdir: 'lib'
# environment variables
ENV: {}
# time zone name
@@ -212,6 +213,7 @@ pingurl: []
# mdwn plugin
# enable multimarkdown features?
#multimarkdown: 0
+multimarkdown: 1
# disable use of markdown discount?
#nodiscount: 0
diff --git a/lib/IkiWiki/Plugin/mathjax.pm b/lib/IkiWiki/Plugin/mathjax.pm
new file mode 100755
index 0000000..99b74c3
--- /dev/null
+++ b/lib/IkiWiki/Plugin/mathjax.pm
@@ -0,0 +1,74 @@
+package IkiWiki::Plugin::mathjax;
+
+use warnings;
+use strict;
+use IkiWiki 3.00;
+use MIME::Base64;
+
+# Strategy:
+## - filter replaces normal TeX delimiters with imath and dmath directives
+## (perhaps while considering a mathconf directive); also, it adds a script
+## block if there is any math on the page relevant.
+## - preprocess handles the directives themselves.
+##
+## Later: config hooks for mathjax script tag and mathjax config block
+##
+
+sub import {
+ hook(type => "filter", id => "mathjax", call => \&filter);
+ hook(type => "format", id=>"mathjax", call=> \&format);
+}
+
+sub format {
+ my %params = @_;
+ my $content = $params{content};
+ return $content unless $content =~ /\!\!mathjaxbegin/; #]/{{
+ $content =~ s{\!\!mathjaxbegin-i!! (.*?)\s\!\!mathjaxend-i\!\!}{'\('.decode_base64($1).'\)'}ges; #{
+ $content =~ s{\!\!mathjaxbegin-d!! (.*?)\s\!\!mathjaxend-d\!\!}{'\['.decode_base64($1).'\]'}ges; #{
+ my $scripttag = _scripttag();
+ $content =~ s{(</body>)}{$scripttag\n$1}i; #}{
+ return $content;
+}
+
+sub filter (@) {
+ my %params=@_;
+ my $content = $params{content};
+ return $content unless $content =~ /\$[^\$]+\$|\\[\(\[][\s\S]+\\[\)\]]/;
+ # first, handle display math...
+ $content =~ s{(?<!\\)\\\[(.+?)(?<!\\)\\\]}{_escape_mathjax('d', $1)}ges; #};[}
+ $content =~ s{(?<!\\)\$\$(.+?)(?<!\\)\$\$}{_escape_mathjax('d', $1)}ges; #};[}
+ # then, the inline math -- note that it must stay on one line
+ $content =~ s{(?<!\\)\\\((.+?)(?<!\\)\\\)}{_escape_mathjax('i', $1)}ge; #};[}
+ # note that the 'parsing' of $..$ is extremely fragile
+ $content =~ s{(?<!\\)\$(.+?)(?<!\\)\$}{_escape_mathjax('i', $1)}ge; #};[}
+ return $content;
+}
+
+sub _escape_mathjax {
+ my ($mode, $formula) = @_;
+ my %modes = qw/i inline d display/;
+ my $directive = "!!mathjaxbegin-$mode!! ";
+ $formula =~ s/"/&quot;/g;
+ $formula =~ s/&/&amp;/g; #"/}[{
+ $formula =~ s/</&lt;/g;
+ $formula =~ s/>/&gt;/g; #{"
+ $directive .= encode_base64($formula, " ");
+ $directive .= "!!mathjaxend-$mode!!";
+ return $directive;
+}
+
+sub _scripttag {
+ my $config = 'TeX-AMS_HTML'; # another possibility: TeX-AMS-MML_HTMLorMML
+ return '<script type="text/x-mathjax-config">'
+ . 'MathJax.Hub.Config({ TeX: { equationNumbers: {autoNumber: "AMS"} } });'
+ . '</script>'
+ . '<script async="async" type="text/javascript" '
+ # Serving MathJax script locally
+ #. 'src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.9/MathJax.js?config='
+ #. 'src="/js/MathJax.js?config='
+ . 'src="/vendor/MathJax/es5/tex-chtml.js?config='
+ . $config
+ . '"></script>';
+}
+
+1;
diff --git a/meta.md b/meta.md
index cbd6bb1..a11ed32 100644
--- a/meta.md
+++ b/meta.md
@@ -33,7 +33,7 @@ See [keys](/keys).
### Technology
-* This is a [statically-generated website](/static).
+* This is a [statically-generated website](/research/suckless/sites).
* That tries to implement [IndieWebCamp principles](http://indiewebcamp.com/principles).
<!--
* Using the same tags from [Fluxo de Links](https://links.fluxo.info) so
diff --git a/research/computing/suckless/sites.md b/research/computing/suckless/sites.md
index 67149d5..5ca19d2 100644
--- a/research/computing/suckless/sites.md
+++ b/research/computing/suckless/sites.md
@@ -56,6 +56,13 @@ You can create passwordless SSH keys and use [rrsync](http://www.guyrutenberg.co
Now simply run `make web_deploy` with the above mentioned `Makefile` do sync your static site!
+## MathJax
+
+* [Setup Instructions for MathJax on Ikiwiki](https://www.math.cmu.edu/~gautam/sj/blog/20130930-ikiwiki/010-setup.html).
+* [GitHub - bk/ikiwiki-plugin-mathjax: MathJax plugin for IkiWiki](https://github.com/bk/ikiwiki-plugin-mathjax).
+* [GitHub - mathjax/MathJax: Beautiful and accessible math in all browsers](https://github.com/mathjax/MathJax).
+* [MathJax documentation](https://docs.mathjax.org).
+
## Ikiwiki references
* [Ikiwiki](http://ikiwiki.info).
diff --git a/research/economics/valor-social.md b/research/economics/valor-social.md
index f12280c..7a68f88 100644
--- a/research/economics/valor-social.md
+++ b/research/economics/valor-social.md
@@ -118,10 +118,10 @@ perguntas, podemos recorrer a um mínimo de sistematização. Considerando
um grupo social de _m_ pessoas, podemos definir a função *valor social*
como sendo
-[[!teximg code="S = \displaystyle\sum_{p=1}^{m}\frac{\left(p\ n_p\right)^{v}}{mr}"]]
+$$S = \displaystyle\sum_{p=1}^{m}\frac{\left(p\ n_p\right)^{v}}{mr}$$
-onde [[!teximg code="n_p"]] é a quantidade de acordos existentes envolvendo _p_
-pessoas[4], cada acordo com viralidade[5] _v_ e _r < m_ é o número de
+onde $n_p$ é a quantidade de acordos existentes envolvendo $p$
+pessoas[4], cada acordo com viralidade[5] $v$ e $r < m$ é o número de
pessoas que *poderiam* [6] ter efetuado acordos mas que ficaram de fora
(isto é, não fizeram acordo nenhum). O valor social assim definido exibe
uma série de propriedades interessantes sob o ponto de vista das
@@ -137,15 +137,15 @@ múltiplas partes possui maior ação coletiva (maior participação
coletiva, maior coletividade) do que uma sociedade com acordos entre
apenas poucas partes.
-Já a quantidade _m_ de pessoas do grupo e o total _r_ de pessoas que não
+Já a quantidade $m$ de pessoas do grupo e o total $r$ de pessoas que não
participaram de nenhum tipo de acordo contribuem na diminuição do valor
-social: se poucas pessoas (em relação ao total _m_) fazem acordo, temos
-uma sociedade com pouca ajuda múltipla e, portanto, para que _S_ atinja
-valores significativos, é preciso que _m_ se torne quantitativamente
-menor em relação aos valores dos componentes [[!textimg code="\left(p\ n_p\right)^{v}"]].
-O mesmo vale para _r_: os componentes devem ser mais significativos do
+social: se poucas pessoas (em relação ao total $m$) fazem acordo, temos
+uma sociedade com pouca ajuda múltipla e, portanto, para que $S$ atinja
+valores significativos, é preciso que $m$ se torne quantitativamente
+menor em relação aos valores dos componentes $\left(p\ n_p\right)^{v}$.
+O mesmo vale para $r$: os componentes devem ser mais significativos do
que a quantidade de pessoas que poderiam estar em acordos mas que
-ficaram de fora, ou seja, _S_ leva em conta a inclusão ou exclusão
+ficaram de fora, ou seja, $S$ leva em conta a inclusão ou exclusão
social da ação coletiva[7].
Por fim, a viralidade potencializa a multiplicação de acordos: quanto
@@ -165,25 +165,25 @@ sistemas dinâmicos.
Por simplificação, podemos reescrever a equação anterior como
-[[!teximg code="S = k\displaystyle\sum_{p=1}^{m}\left(p\ n_p\right)^{v}"]]
+$$S = k\displaystyle\sum_{p=1}^{m}\left(p\ n_p\right)^{v}$$
-onde [[!teximg code="k = \frac{1}{mr}"]]. É claro que o valor de _k_
+onde $k = \frac{1}{mr}$. É claro que o valor de $k$
pode mudar num dado grupo social – por exemplo: mais pessoas ingressando
ou saindo do grupo ou então com um aumento ou diminuição de protagonistas
de acordos – mas podemos considerá-lo como constante num dado momemto, ou seja,
-[[!teximg code="k = k(t)"]] e independente de outras variáveis.
+$k = k(t)$ e independente de outras variáveis.
O que realmente nos interessa agora, no entanto, é que chega um momento
em que o grupo social está com tantos acordos que, da forma como
-definimos na equação [eq:simples], _S_ começa a crescer absurdamente e
+definimos na equação [eq:simples], $S$ começa a crescer absurdamente e
já não passa a representar o valor efetivo de um corpo social onde a
ajuda múltipla se faz presente. Em outras palavras: chega um momento em
que as pessoas já estão tão endividadas de acordos a cumprir que mais
dívidas não afetarão consideravelmente no seu comportamento de ajuda
-múltipla. Para refrear o crescimento indiscriminado de _S_,
+múltipla. Para refrear o crescimento indiscriminado de $S$,
redefiniremos nossa função como
-[[!teximg code="S = k\ ln\displaystyle\sum_{p=1}^{m}\left(p\ n_p\right)^{v}"]]
+$$S = k\ ln\displaystyle\sum_{p=1}^{m}\left(p\ n_p\right)^{v}$$
onde _ln_ cumpre um amortecimento no crescimento da somatória, mostrando
que o valor efetivo do grupo cresce logaritmicamente: temos um rápido
@@ -191,16 +191,16 @@ crescimento do valor conforme os acordos se iniciam e se multiplicam e,
conforme o endividamento social cresce, a sociedade atinge patamares de
valor altos demais para que um maior acréscimo se torne significativo.
-Temos que, pela própria definição, _S_ é uma função de estado, uma vez
+Temos que, pela própria definição, $S$ é uma função de estado, uma vez
que, definido um grupo social e suas interações a partir das variáveis
-_n_, _m_, _v_, _r_, etc, temos que _S_ é um indicativo do estado do
+$n$, $m$, $v$, $r$, etc, temos que $S$ é um indicativo do estado do
sistema – indicando, por exemplo, se ele possui mais ou menos acordos (e
qual a potência e alcance dos acordos) do que outro grupo social
igualmente caracterizado. Além disso, obedece a
-[[!teximg code="\frac{dS}{dt} \geq 0"]]
+$$\frac{dS}{dt} \geq 0$$
-Portanto, chamaremos nossa última definição de _S_ (equação [eq:valor])
+Portanto, chamaremos nossa última definição de $S$ (equação [eq:valor])
como *entropia econômica do grupo social*. Tal entropia mede,
inicialmente, *o grau de endividamento do corpo social.* O endividamento
é então a única forma de acúmulo possível: uma vez que alguém ajuda
@@ -231,7 +231,7 @@ tem um aumento indesejável, aqui se torna o comportamento almejado.
Sendo os acordos diretos, isto é, não mediados, temos ainda mais
descontrole: é importantíssimo que tais acordos não sejam mediados por
bancos de dados. Por banco de dados entendemos qualquer iniciativa de
-tentar *efetivamente* calcular _S_ para um dado grupo social (e não o
+tentar *efetivamente* calcular $S$ para um dado grupo social (e não o
registro pessoal que cada indivíduo mantiver a respeitodos acordos que
participou). A mera existência de um banco de dados centralizado capaz
de calcular a cada instante o valor social tem os seguintes riscos:
@@ -254,7 +254,7 @@ de calcular a cada instante o valor social tem os seguintes riscos:
É com esse sentido de oposição aos bancos de dados que estabelecemos o
conceito de valor social: não nos interessa calcular efetivamente o
-valor de _S_ para um dado grupo social e muito menos caracterizar cada
+valor de $S$ para um dado grupo social e muito menos caracterizar cada
grupo em função desses parâmetros, o que além de policialesco não
representa o real valor social do grupo (afinal, nem discutimos as
diferenças qualitativas de cada acordo). Queremos, ao contrário, mostrar
@@ -305,30 +305,30 @@ Referências
ou apoio mútuo (mas que eventualmente possa ter o mesmo
significado).
-2. É claro que o valores de _v_ podem ser estipulados em cada acordo.
+2. É claro que o valores de $v$ podem ser estipulados em cada acordo.
3. Por *conservar valor* não queremos dizer que a moeda não sofre
valorização e desvalorização, mas sim que a moeda “congela”
trabalho.
-4. Começamos nossa somatória com _p = 1_ pois, apesar de ser um caso
+4. Começamos nossa somatória com $p = 1$ pois, apesar de ser um caso
em princípio bizarro (uma pessoa fazendo acordo consigo mesmo), não
deixa de ser uma possibilidade: posso, por exemplo, fazer um acordo
comigo mesmo e, caso o cumpra, ajudarei mais pessoas, sendo caso
clássico disso é a solidariedade de ex-viciados, por exemplo. Outro
- argumento para manter _p = 1_ é a simplicidade.
+ argumento para manter $p = 1$ é a simplicidade.
5. Poderíamos, é claro, supor um sistema onde cada acordo tivesse uma
- viralidade _v_ própria, mas a complexidade do cálculo seria
+ viralidade $v$ própria, mas a complexidade do cálculo seria
desnecessária para esta primeira exposição do assunto.
-6. Que fique claro: _r_ não inclui pessoas que não podem ajudar, mas
+6. Que fique claro: $r$ não inclui pessoas que não podem ajudar, mas
apenas as que podem mas que ficaram de fora dos acordos.
-7. Alternativamente, poderíamos definir o divisor como _m^r_ ao invés
- de _mr_, o que faria com que _S_ fosse muito mais sensível à
+7. Alternativamente, poderíamos definir o divisor como $m^r$ ao invés
+ de $mr$, o que faria com que $S$ fosse muito mais sensível à
inclusão ou exclusão social. Optamos, no entanto, por uma abordagem
- em que _m_ e _r_ contribuem com igual teor.
+ em que $m$ e $r$ contribuem com igual teor.
8. Num sistema mais próximo da realidade teríamos trocentas outras
variáveis.
diff --git a/templates/page.tmpl b/templates/page.tmpl
index 424d923..9fc2611 100644
--- a/templates/page.tmpl
+++ b/templates/page.tmpl
@@ -15,12 +15,12 @@
<TMPL_IF FAVICON>
<link rel="icon" href="<TMPL_VAR BASEURL><TMPL_VAR FAVICON>" type="image/x-icon" />
</TMPL_IF>
-<link rel="stylesheet" href="<TMPL_VAR BASEURL>bootstrap/css/bootstrap.min.css" type="text/css" />
-<link rel="stylesheet" href="<TMPL_VAR BASEURL>bootstrap/css/bootstrap-responsive.min.css" />
+<link rel="stylesheet" href="<TMPL_VAR BASEURL>vendor/bootstrap/css/bootstrap.min.css" type="text/css" />
+<link rel="stylesheet" href="<TMPL_VAR BASEURL>vendor/bootstrap/css/bootstrap-responsive.min.css" />
<TMPL_IF LOCAL_CSS>
<link rel="stylesheet" href="<TMPL_VAR BASEURL><TMPL_VAR LOCAL_CSS>" type="text/css" />
<TMPL_ELSE>
-<link rel="stylesheet" href="<TMPL_VAR BASEURL>local.css" type="text/css" />
+<link rel="stylesheet" href="<TMPL_VAR BASEURL>assets/css/local.css" type="text/css" />
</TMPL_IF>
<TMPL_IF EDITURL>
<link rel="alternate" type="application/x-wiki" title="Edit this page" href="<TMPL_VAR EDITURL>" />
diff --git a/vendor/MathJax b/vendor/MathJax
new file mode 160000
+Subproject 1335230503dddfeb0e07687308a55795d9c005e
diff --git a/bootstrap/css/bootstrap-responsive.css b/vendor/bootstrap/css/bootstrap-responsive.css
index fcd72f7..fcd72f7 100644
--- a/bootstrap/css/bootstrap-responsive.css
+++ b/vendor/bootstrap/css/bootstrap-responsive.css
diff --git a/bootstrap/css/bootstrap-responsive.min.css b/vendor/bootstrap/css/bootstrap-responsive.min.css
index d1b7f4b..d1b7f4b 100644
--- a/bootstrap/css/bootstrap-responsive.min.css
+++ b/vendor/bootstrap/css/bootstrap-responsive.min.css
diff --git a/bootstrap/css/bootstrap.css b/vendor/bootstrap/css/bootstrap.css
index 2f56af3..2f56af3 100644
--- a/bootstrap/css/bootstrap.css
+++ b/vendor/bootstrap/css/bootstrap.css
diff --git a/bootstrap/css/bootstrap.min.css b/vendor/bootstrap/css/bootstrap.min.css
index c10c7f4..c10c7f4 100644
--- a/bootstrap/css/bootstrap.min.css
+++ b/vendor/bootstrap/css/bootstrap.min.css
diff --git a/bootstrap/img/glyphicons-halflings-white.png b/vendor/bootstrap/img/glyphicons-halflings-white.png
index 3bf6484..3bf6484 100644
--- a/bootstrap/img/glyphicons-halflings-white.png
+++ b/vendor/bootstrap/img/glyphicons-halflings-white.png
Binary files differ
diff --git a/bootstrap/img/glyphicons-halflings.png b/vendor/bootstrap/img/glyphicons-halflings.png
index a996999..a996999 100644
--- a/bootstrap/img/glyphicons-halflings.png
+++ b/vendor/bootstrap/img/glyphicons-halflings.png
Binary files differ
diff --git a/vendor/ikiwiki-plugin-mathjax b/vendor/ikiwiki-plugin-mathjax
new file mode 160000
+Subproject 25435b6a1462626a2f713b78b2a348377b9ecaf