음, 새 수식 플러그인으로 업그레이드한 후 깨진 콘텐츠를 변환하고 수정하는 데 말하기 민망할 정도로 많은 시간을 보냈습니다. 그래서 여기에서 제가 사용했던 중요한 명령어들을 공유합니다. (조금 지저분한 해킹 기법이지만, 너무 게을러져서 그러네요.) 그래도 수동으로 콘텐츠를 수정해야 하는 부분이 있었지만, 우리 경우에는 그렇게 많지 않았습니다.
참고: 이는 영감을 위한 목적입니다. "나는 아무 책임도 지지 않는다…"라는 시를 떠올려 보세요. 이해하지 못하는 경우 맹목적으로 실행하지 마십시오.
# \\ 를 \ 로 대체 (이 경우 \\\\ 도 \\ 로 변환됨)
Post.where('raw ~ ?', "\\\\").each{|p| p.raw=p.raw.gsub(/\\\\/, "\\"); p.save; print "."; $stdout.flush;}; puts "";
# {align} 을 {aligned} 로 대체하고 모든 별표(*) 버전 제거
Post.where('raw ~ ?', "\\\\begin\\{align").each{|p| p.raw=p.raw.gsub(/(begin|end)\{align.*?\}/, "\\1{aligned}"); p.save; print "."; $stdout.flush;}; puts "";
# {array} 를 {matrix} 로 대체하고 모든 별표(*) 버전 제거
Post.where('raw ~ ?', "\\\\begin\\{array").each{|p| p.raw=p.raw.gsub(/(begin|end)\{array\*?\}/, "\\1{matrix}"); p.save; print "."; $stdout.flush;}; puts "";
# `\begin{equation}` 을 `$$` 로 대체
Post.where('raw ~ ?', "\\\\begin\\{equation").each{|p| p.raw=p.raw.gsub(/\s*\\(begin|end)\{equation\*?\}\s*/, "$$"); p.save; print "."; $stdout.flush;}; puts "";
# `$$` 앞뒤에 새 줄 추가
Post.where('raw ~ ?', "\\$\\$").each{|p| p.raw=p.raw.gsub(/\$\$/,"\n$$\n"); p.save; print "."; $stdout.flush;}; puts "";
# `{aligned}` 블록 앞뒤에 `$$` 추가
Post.where('raw ~ ?', "\\\\begin\\{align").each{|p| p.raw=p.raw.gsub(/\s*(\\begin\{align)/m,"\n$$\n\\1").gsub(/(\\end\{align.*?\})\s*/m,"\\1\n$$\n"); p.save; print "."; $stdout.flush;}; puts "";
# ... {aligned} 안의 이중 `$$` 수정
Post.where('raw ~ ?', "\\\\begin\\{aligned").each{|p| p.raw=p.raw.gsub(/(\\end\{align.*?\}\n\$\$)\n\$\$/,"\\1").gsub(/\$\$\n(\$\$\n\\begin\{align)/,"\\1"); p.save; print "."; $stdout.flush;}; puts "";
## 위 두 명령어를 {aligned} 외에 가지고 있을 수 있는 다른 환경에 적용
# 다음 항목에 대해서는 수동 수정을 권장합니다:
# `> ` 인용 환경 내에 `$$` 가 나타나는 게시글. 시작과 끝의 `$$` 에만 접두사를 붙여야 하며, 즉 `> $$` 처럼,
# 그 사이의 콘텐츠에는 붙여서는 안 됩니다. 그렇지 않으면 수식보다 부호(>)로 렌더링됩니다.
# 해당 게시글을 식별하려면 다음을 실행하세요:
Post.where('raw ~ ?', ">\\s*\\n\\s*\\$\\$").each{|p| puts "https://discourse.domain.com/p/#{p.id}";};
# ... 또는, 자동 수정을 시도해 보세요. 다만 위험할 수 있습니다.
# (우리는 잘 작동했지만, 몇몇 게시글은 추가적인 수동 작업이 필요했습니다):
Post.where('raw ~ ?', ">\\s*\\n\\s*\\$\\$").each{|p| p.raw=p.raw.gsub(/(>\s*)\$\$(.*?)\$\$\s*?\n/m,"\\1> $$\\2> $$\n>"); p.save; print "."; $stdout.flush;}; puts "";
# 외관상, 선택 사항: 3개 이상의 연속된 새 줄을 2개 새 줄로 대체
Post.where('raw ~ ?', "\\n{3,}").each{|p| p.raw=p.raw.gsub(/\n{3,}/,"\n\n"); p.save; print "."; $stdout.flush;}; puts "";
# 선택 사항: `$$` 앞뒤의 2개 이상의 연속된 새 줄을
# 단일 새 줄로 대체
# 경고: 현재 플러그인 버전에서는 문제없지만, 향후 버전에서는 다르게 표시될 수 있습니다 (?). 예를 들어 실제 LaTeX에서는
# 텍스트 앞의 $$ 뒤의 빈 줄이 세로 간격에 차이를 만듭니다.
Post.where('raw ~ ?', "\\n\\$\\$\\n{2,}|\\n{2,}\\$\\$").each{|p| p.raw=p.raw.gsub(/\n\$\$\n{2,}/,"\n$$\n").gsub(/\n{2,}\$\$/,"\n$$"); p.save; print "."; $stdout.flush;}; puts "";