수학 식 인용(quoting math)에 대해 살펴봤습니다. (PR을 작성하거나 기존 PR에 기여하는 것을 고려하고 있습니다.)
여기서 초기 생각과 조사 결과를 정리해 둡니다.
- 인용(quoting) 처리는 주로 다음 구성 요소를 통해 이루어지는 것 같습니다:
buildQuote함수TopicController.selectedText- 인용에 전달되는 콘텐츠는
this.quoteState.buffer에서 옵니다. 이 값은QuoteButton._selectionChanged에서 설정됩니다 (다른 곳에서도 설정될 수 있음). - 여기서
selectedText를 호출합니다. - 그리고
toMarkdown을 호출합니다.
buildQuote함수는 포스트 객체를 인자로 받습니다. 이는 포스트의 완전한 JSON 설명인 것 같습니다. 예시.
따라서 제 첫인상은 다음 중 어느 한 지점이 패치될 수 있다는 것입니다:
toMarkdown은 요소를 다양한 HTML 태그와 매칭시킵니다. MathJax는 감지할 수 있는 커스텀 요소를 사용하는 것 같습니다 (SVG 렌더링은 아닐 수 있음). KaTeX도 마찬가지일까요?selectedText는 코드 블록이나 원박스(onebox)와 같은 요소에 대해 일부 매칭을 수행합니다. MathJax/KaTeX 요소를 감지하고 변환할 수 있을까요? (참고: 변환 로직을 메인 Discourse 코드베이스가 아닌 discourse-math 플러그인에 추가할 수 있도록 여기서 훅(hook)이나 유사한 기제를 제공하는 것이 좋은 아이디어일 것입니다.)- 다른 지점들은 이 두 가지 중 어느 쪽보다 적합해 보이지 않습니다.
접근 방식과 원시 수학(raw math)을 가져오는 방법에 대한 다른 생각들.
KaTeX / MathJax+SVG[1]의 작동 방식에 따라, 각 수학 인스턴스는 루트 HTML 요소를 가질 것이라고 생각합니다 (접근성 등을 위해 숨겨진 요소가 여러 개 있을 수 있음). 따라서 수학 식이 존재하는 위치를 안다면, $로 구분된 콘텐츠 인스턴스를 원시 포스트에서 파싱할 수 있을 것입니다. (단, 인터프리터는 까다로울 수 있습니다 – 코드베이스에 이미 하나 있는 건가요?)
대안으로, MathJax는 우클릭 > TeX 보기(esq)와 같은 기능을 가지고 있습니다 (이는 $ 쌍 사이의 문자열 그대로여야 합니다). 이를 어떻게 연결할지 확신이 서지 않지만, MathJax v2, v3, KaTeX 모두에서 이것이 가능하다면, 선택된 포맷된 수학을 $...$로 대체하는 데 이를 사용할 수 있을 것입니다. (참고: 이는 인라인 수학에 대해 작동하며, $$...$$ 또는 [/.../] 구분자를 사용하는 다른 유형의 경우를 다루어야 합니다.)
현재 문제점:
- 훅을 구현하는 방법이나, Discourse 코드베이스에서 더 나은 대안이나 더 나은 구현 방식이 있는지 알지 못합니다.
- MathJax/KaTeX에 대해 조사해야 할 여러 미지수가 있습니다.
- HTML 요소 – 이를 어떻게 신뢰성 있게 감지할 수 있을까요?
- 원시 TeX 코드를 어떻게 가져올 수 있을까요?
패치할 위치나 대상, 다른 가능한 구현 방법 등에 대해 다른 아이디어가 있으시면 게시해 주시기 바랍니다.
MathJax+SVG는 지원되지 않는다고 생각하므로, 이것이 문제가 아닐 수 있습니다. ↩︎