LaTeX→Qiita用MathJax変換マクロ@EmEditor


EmEditorのマクロ機能を使って簡単な$\mathrm{\LaTeX}$文書をQiita用に変換する.
ついでに式番号も自動で振る.

変換対象
\section{定義}
\subsection{性質1}
\subsubsection{性質2}

\begin{align}
y=a,\label{eq:1}
\end{align}
ああああ
\begin{align}
y=b,
\end{align}
いいいい
\begin{align}
y=c,\label{eq:2}
\end{align}
ここで\ref{eq:1}\ref{eq:2}より…

\section{定義}
\begin{align}
f=a,
\end{align}

LaTeX2Qiita.jsee@EmEditor


# 定義
## 性質1
### 性質2


```math
\begin{align}
y=a,\tag{1}\label{eq:1}
\end{align}
```

ああああ

```math
\begin{align}
y=b,
\end{align}
```

いいいい

```math
\begin{align}
y=c,\tag{2}\label{eq:2}
\end{align}
```

ここで__($\ref{eq:1}$)__と__($\ref{eq:2}$)__より…

# 定義

```math
\begin{align}
f=a,
\end{align}
```

上記をそのままQiita記事として貼り付けると以下のように表示される:

定義

性質1

性質2

\begin{align}
y=a,\tag{1}\label{eq:1}
\end{align}

ああああ

\begin{align}
y=b,
\end{align}

いいいい

\begin{align}
y=c,\tag{2}\label{eq:2}
\end{align}

ここで($\ref{eq:1}$)($\ref{eq:2}$)より…

定義

\begin{align}
f=a,
\end{align}

ちなみに$\mathrm{\LaTeX}$では以下の図のように出力される:

ソース
\documentclass{jsarticle}
\usepackage{amsmath}
\begin{document}

\section{定義}
\subsection{性質1}
\subsubsection{性質2}

\begin{align}
y=a,\label{eq:1}
\end{align}
ああああ
\begin{align}
y=b,
\end{align}
いいいい
\begin{align}
y=c,\label{eq:2}
\end{align}
ここで\ref{eq:1}\ref{eq:2}より…

\section{定義}
\begin{align}
f=a,
\end{align}

\end{document}

マクロ本体

数式はいつも\align環境で書いてるのでそれにだけ対応.
テキスト形式で保存してマクロメニューから追加するだけ.

LaTeX2Qiita.jsee
document.selection.Replace( "\%.*", '', eeFindReplaceRegExp|eeReplaceAll );
document.selection.Replace( "\\begin{align}", "\n```math\n\\begin{align}", eeReplaceAll );
document.selection.Replace( "\\end{align}", "\\end{align}\n```\n",eeReplaceAll );
document.selection.Replace( '\\\\Ref\{(.*?)\}', '__\(\$\\\\ref\{$1\}\$\)__', eeFindReplaceRegExp|eeReplaceAll);
document.selection.Replace( "\\label", "\\tag{}\\label", eeReplaceAll );
document.selection.Replace( "(<|>)", '\ $1\ ', eeFindReplaceRegExp|eeReplaceAll );
document.selection.Replace( "\\\\section\{(.*?)\}", '# $1', eeFindReplaceRegExp|eeReplaceAll );
document.selection.Replace( "\\\\subsection\{(.*?)\}", '## $1', eeFindReplaceRegExp|eeReplaceAll );
document.selection.Replace( "\\\\subsubsection\{(.*?)\}", '### $1', eeFindReplaceRegExp|eeReplaceAll );
document.selection.StartOfDocument();
for (var i=1; document.selection.Replace( "\\tag{}", "\\tag{"+i+"}", eeFindNext )>0;++i){}

トラブルシューティング

 うまくいってるはずなのに表示がおかしいときは,F5更新したり,下付き添字のアンダーバーをエスケープしてみたりする.