見出し画像

【自動化ツール講座 #4】noteの表作成ツール「CSV→LaTeX表変換Chrome拡張機能」を大幅アップデート

毎度、rorosukeです。

前回、noteエディタ上のCSVデータをLaTeXタグに変換して、表組表現する拡張機能を公開しました。それがこちらです。

そこで、TSV・Markdown対応、特殊文字のエスケープ対応、上罫線の問題への対処といったバージョンアップ予告をしていましたが、今回、予告通りバージョンアップをして、すでに公開済みです。

インストールはこちらで行えます。

予告した以外にも、さまざまな改善をしていますので、それらを次にまとめます。

  • TSV(タブ区切り)データに対応

  • Markdown表に対応

  • 特殊文字の自動エスケープ

  • 上罫線強化オプション

  • CSV・TSV・Markdownへの逆変換

  • Excel用コピー機能 ・英数字フォント選択(ゴシック/明朝)

最後の「Excel」とのデータのやり取りについては、おまけ的につけたものだったのですが、想像以上に便利かもしれません。

新ツールのダイアログ

バージョンアップ版は、起動すると次のダイアログが表示されます。いくつか項目が追加されていますが、使い方は基本一緒です。

新バージョンのダイアログ

TSV・Markdown表に自動対応

TSVとはタブ区切りのデータです。また、Markdownとはマークダウン記法で記述されたデータです。

TSV

項目	数
リンゴ	1個
バナナ	3個

Markdown

| 項目 | 数 |
|---|---|
| リンゴ | 1個 |
| バナナ | 3個 |

こうしたな形式のデータを表変換できます。

タブ区切りはExcelのデータについて、セル範囲を選択してコピーしたときに、クリップボードに保存される形式です。つまり、これをnoteエディタにプレーンテキストとして貼り付ければ、本ツールで直接LaTeX変換することができます。

Markdownも同様に対応しています。
たとえば、noteをAIに作らせるとき「マークダウン記法で出力して」と依頼すると、表もマークダウン式で表示されます。noteにはマークダウン式の表をレンダリングする機能がありませんが、本ツールを使えば簡単に表に変換できます。

TSV・Markdownのどちらも自動判定しているので、操作はCSVのときと同じで、選択して表スタイルを選ぶだけです。



特殊文字の自動エスケープ

LaTeXでは、いくつかの特殊文字について機能が割り当てられていて、そのまま表示できない場合があります。その1つが %です。LaTeXではこれがコメントアウト文字として機能するため、変換すると表が崩れます。

たとえば「10%」というデータがあったとき、これをそのまま表にすると、セルには「10」としか表示されません。「%」そのものを表示するには、%に割り当てられている機能を発動させない工夫(エスケープ)が必要になります。

今回、LaTeXの特殊文字を一括でエスケープする処理を追加しました。対象の文字は次の通りです。

% _ ^ # $ & { } ~ \

表の中の文字にこれらが含まれていても、自動的にエスケープ処理をして、それらの文字そのものが表示されるようにしています。

なお、エスケープしたくない場合も想定して、エスケープのオンオフができるようにしてあります。デフォルトはオンですが、エスケープなしで変換したい場合はオフにしてください。

| 項目 | 割引率 |
|---|---|
| リンゴ | 10% |
| バナナ | 30% |

「%」があっても次のように表示されます。

$$
\begin{array}{|c|c|}
\\[-1.15em]\hline
\textsf{\small{項目}} & \textsf{\small{割引率}}
\\ \hline
\textsf{\small{リンゴ}} & \textsf{\small{10\%}}
\\ \hline
\textsf{\small{バナナ}} & \textsf{\small{30\%}}
\\ \hline
\end{array}
$$

例外:__snake__ のように単語の前後にアンダースコアが2個ずつ付くパターンが少し特殊なので説明します。この場合、noteに貼り付けたときに、noteエディタがMarkdownの太字として処理して、アンダースコアが消えます。これはnoteエディタの仕様なので、本ツールでは対処できません。貼り付け後に自力で前後にアンダースコアを入力してください。



上罫線強化

前回の記事では「上の罫線が出たり出なかったりしている。どうするか検討中」と書きました。

罫線の出方については、いまだ法則性がよくわかっていません。プレビューと実際の表示が異なることもありますし、表示媒体によっても表示のされ方が安定しないようです。たとえば、pcのブラウザ上では罫線が欠けるのに、スマホのブラウザでは表示されるといった感じです。

現時点では明確な法則が分からないため、結局「\\[-1.15em]\hline」を入れるか入れないか選択できるようしました。チェックボックスでオン/オフの切り替えができます。デフォルトはオンにしています。



完全相互変換

LaTeXコード化された複数行を選択して、拡張機能アイコンをクリックすると、次の変換メニューが表示されます。

LaTeXコードを選択して拡張機能を呼び出すと
変換メニューが表示されます

これで次の出力形式に逆変換できます。

  • CSV

  • TSV

  • Markdown

変換を繰り返すことで、
CSV → LaTeX → Markdown → LaTeX → TSV
のように、データ形式を巡回していくこともできます。



Excel連携

表といえばExcelですから、Excelとのやり取りも簡単にできるようにしました。そのために追加したのが、正変換メニュー(CSV/TSV/Markdown選択時)と逆変換メニュー(LaTeX選択時)の両方に追加された、

「Excel用コピー」メニュー

です。

通常の「TSVに戻す」はnoteのエディタにテキストを挿入しますが、「Excel用コピー」はTSVデータをクリップボードに直接保存します。これによって、そのままExcelに貼り付けることができます。

表(変換前でも変換後でもOK)を選択して
「Excel用コピー」を選ぶとクリップボードに保存される
そのままExcelへの貼り付けができる

セル内改行(本ツールでは;;で指定)を含む表のExcel用コピーでは、;; がExcelのセル内改行として変換されます。逆に、Excelのセル内改行を含むデータをnoteにプレーンテキストとして貼り付けて選択すると、;; として認識してLaTeX変換します。

注意:Excelへの貼り付けに失敗するパターン
Excelのセルが点線枠(コピー待機状態)のときに貼り付けると、Excelの内部クリップボードが優先されて、期待したデータが貼り付けられないことがあります。貼り付け前にEscキーを押して点線枠を解除してから、Ctrl+Vで貼り付けてください。



英数字フォント選択

LaTeX変換する際に、英数字フォントについてゴシック(サンセリフ)と明朝(セリフ)を選択できるようにしました。デフォルトはゴシックです。

ゴシック

$$
\begin{array}{cc}
\\[-1.15em]\hline
\textsf{\small{apple}} & \textsf{\small{\$10}}
\\ \hline
\textsf{\small{banana}} & \textsf{\small{\$30}}
\\ \hline
\end{array}
$$

明朝

$$
\begin{array}{cc}
\\[-1.15em]\hline
\textrm{\small{apple}} & \textrm{\small{\$10}}
\\ \hline
\textrm{\small{banana}} & \textrm{\small{\$30}}
\\ \hline
\end{array}
$$

注意:日本語は対象外
この指示は、あくまでも英数字のみを対象としています。日本語フォントについては、KaTeXの管理外なので対象外です。英数字のみの表や、英数字のデータを多く含む表で使うと効果的です。



まとめ:相互変換よくないですか?

noteにおいて表組(テーブル)は、記事を作成する上でかなり厄介な問題です。いまのところインライン表現するとなるとLaTeXで記述するしかありません。

しかし、本ツールを使うことで、少なくともCSV,TSV,MarkdownそしてExcelとの相互変換ができるようになり、表組を積極的に使うことがかなり楽になるものと思います。

もともと相互変換まで実装する予定はなかったのですが、作っているうちに、その方がより汎用性が高まると思って実装することにしました。最初は、変換→逆変換を繰り返すと、データがどんどん破壊されてしまい、どうなることかという状態でしたが、なんとかまとまりました。

というわけで、このツールを「あらゆる表データのハブ」として使用していたければ幸いです。

以上。

いいなと思ったら応援しよう!

ROROSUKE LABO 記事なり、プログラムなりが役に立ったと思った方は、 チップの応援よろしくお願いいたします。 次の開発もがんばろうかな、という気になりますのだ (笑)