# 옵시디언 퍼블리시와 아스키매스의 사용 타협점은 am 코드 블록을 쓰는 것이다. ```am a = b + c f @ f = f lim_(n->oo) a_n = b ``` 행렬의 경우에는 변환이 필요했다. ```am A = [1, 2; 3, 4], I = [1, 0; 0, 1], B = [a_1, a_2; a_3, a_4] ``` 아래는 사용한 publish.js 의 대략적인 로직이다. ```js MathJax = { loader: {load: ['input/asciimath', 'output/chtml']} } const script = document.createElement('script'); script.onload = function () { myInitCode(); }; script.src = 'https://cdn.jsdelivr.net/npm/mathjax@3/es5/startup.js?ts=' + new Date().getTime(); document.head.appendChild(script); function myInitCode() { Array.prototype.slice.call(document.getElementsByTagName('pre')) .forEach(pre => { const codes = pre.children[0].innerHTML.split('\n').filter(e => e); const para = codes.reduce((acc, code) => acc + '`' + extractAndReplaceWithFunction(code, parseMatrixString) + '`' + '<br/>', ''); pre.outerHTML = '<p style="text-align:center">' + para + '</p>'; }); } function extractAndReplaceWithFunction(str, parseFunction) { const regex = /\[([^\]]+)\]/g; let result = str; let match; while ((match = regex.exec(str)) !== null) { let content = match[1].trim(); let parsedContent = parseFunction(content); result = result.replace(match[0], JSON.stringify(parsedContent)); } return result; } function parseMatrixString(str) { str = str.trim(); if (str.startsWith('[') && str.endsWith(']')) { str = str.slice(1, -1); } let rows = str.split(';'); let result = []; for (let row of rows) { row = row.trim(); let elements = row.split(','); elements = elements.map(el => Number(el.trim())); result.push(elements); } return result; } ```