--- /dev/null
+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/"/"/g;
+ $formula =~ s/&/&/g; #"/}[{
+ $formula =~ s/</</g;
+ $formula =~ s/>/>/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;
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
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
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
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
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:
É 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
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.