Hugo + Mathjax 설정
I. 인라인 수식 에러
한동안 수식 에러를 많나 고생하였다. $$
...
$$
코드는 잘 적용이 되었다. 그런데, 글 중간에 수식을 넣는 건 잘 되지 않았다. $
...
$
표현하면 수식문법이 그대로 나와서 글의 가독성이 조금 떨어져 있었다. 통계수식을 넣어주면, 그냥 무언가 전문가스럽다! 전문가도 아니지만 ㅎㅎ
$x_{i}$
내가 표현하고자 하는 것 Vs.x_{i}
실제로 화면에 나오는 것
그리고, 한동안 헤매었다. 길은 알고 있었으나, 역시 적용이 쉽지 않았다. 아래는 해결 방안을 공유한다.
II. 테마에서 사용되는 Latex 문법 확인
Hugo
블로그 사용자분들은 테마를 사용할 것이다. 필자는 mainroad
를 사용하는데, Mathjax
를 사용하는 것을 확인하였고, config.toml
에서 확인하였다.
- 테마에 관심이 있으신 분들은.. 다음을 참조하시기를 바란다. mainroad 홈페이지
[Params]
..
..
mathjax = true # Enable MathJax
mathjaxPath = "https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.6/MathJax.js" # Specify MathJax path
mathjaxConfig = "TeX-AMS-MML_HTMLorMML" # Specify MathJax config
..
..
그리고, Mathjax + Hugo + inline math
위주로 검색을 진행하였다.
III. Reference
아래 세 글을 읽고 적용하였더니, 생각보다 쉬웠다.
순차적으로 글을 읽으면서 어느정도 정리가 되었다. 일단 layouts-partials
폴더를 찾아야 한다.
IV. 주의점
- 여기서 조금 헤매였다. 필자는
layouts-partials
폴더를 직접 만들고,Mathjax
설정을 다시 하려고 시도했다. 그럴 필요가 없다. 왜? - 테마를 차용해서 사용 중이기 때문이다. 그래서
config.toml
에 사용한다고 지정까지 하지 않았나? 그러면,themes-mainroad-layouts-partials
에서math
와 관련된html
파일을 찾아서 수정해야 한다. 다행히mathjax.html
을 찾았다. - 당연히, 각자의 테마의 경로는 조금 다를 수 있다. 즉, 각 테마에 따라 다르게 적용되지만, 큰 흐름은 아래 해결법과 크게 다르지 않을 것 같다. (2020.4월 기준)
V. mathjax.html 소스코드 수정
처음 파일을 열었을 때에는 아래와 같은 소스코드만 존재했다.
{{ if and .IsPage (eq (.Param "mathjax") true) }}
<script src="{{ .Param "mathjaxPath" | default "https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.6/MathJax.js" }}{{ with .Param "mathjaxConfig" | default "TeX-AMS-MML_HTMLorMML" }}?config={{ . }}{{ end }}" async>
</script>
{{ end }}
음.. 기본 세팅이 위와 같이 되어 있었던 것이다. 위 코드 해석은 대충 감은 오지만, 일단 신경 쓰지 말자. 그리고, Reference
를 활용하여 필요한 부분만 가져온다. 그리고 적용하면 아래와 같다.
{{ if and .IsPage (eq (.Param "mathjax") true) }}
<script src="{{ .Param "mathjaxPath" | default "https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.6/MathJax.js" }}{{ with .Param "mathjaxConfig" | default "TeX-AMS-MML_HTMLorMML" }}?config={{ . }}{{ end }}" async>
MathJax.Hub.Config({
tex2jax: {
inlineMath: [['$','$'], ['\\(','\\)']],
displayMath: [['$$','$$']],
processEscapes: true,
processEnvironments: true,
skipTags: ['script', 'noscript', 'style', 'textarea', 'pre'],
TeX: { equationNumbers: { autoNumber: "AMS" },
extensions: ["AMSmath.js", "AMSsymbols.js"] }
}
});
MathJax.Hub.Queue(function() {
// Fix <code> tags after MathJax finishes running. This is a
// hack to overcome a shortcoming of Markdown. Discussion at
// https://github.com/mojombo/jekyll/issues/199
var all = MathJax.Hub.getAllJax(), i;
for(i = 0; i < all.length; i += 1) {
all[i].SourceElement().parentNode.className += ' has-jax';
}
});
MathJax.Hub.Config({
// Autonumbering by mathjax
TeX: { equationNumbers: { autoNumber: "AMS" } }
});
</script>
{{ end }}
VI. 테스트
인라인 코드를 적용해보자. $\nabla F(\mathbf{x}_{n})$ 뭔지 모르는 수학공식을 인터넷에서 찾아서 적용했더니, 보시다시피 잘 나온다. $
를 제거하면 \nabla F(\mathbf{x}_{n})
이 코드다.
도움이 되기를 바라며..
원래 필자는 tistory
에 글을 올리고 있었는데, hugo + github.io
블로그를 2020년 3월 중순 부터 만들어서 올리고 있다. 현재 강의 교재를 만드느라 정신이 없지만, 추후에 어떻게 블로그를 만드는지 한번 정리해서 올리도록 하겠다.
오늘도 Happy To Learn and Code!