
Obsidianプラグインを公開しました MdTex (MarkdownをLuaLaTeXで美しいPDFに)
先日公開した記事では、デスクトップアプリを使用してMarkdownファイルをPDF化する方法について説明しました。しかし、Obsidian上で同じ作業を完結できるのが理想的だと考えたため、今回新たに専用のプラグインを開発しました。このプラグインは、ユーザーがObsidian内でMarkdownファイルをPDF化する際の手間を大幅に軽減し、効率的なドキュメント作成を支援することを目的としています。
プラグインの機能自体は、前回紹介したデスクトップアプリのものと大きく変わりませんが、いくつかの改良点があります。その中でも特に注目すべき点は、pandoc-crossrefを活用することで画像のクロスリファレンスが可能になったことです。これにより、画像を他の部分から参照する際の記述が簡潔かつ明確になり、ドキュメント全体の整合性が向上します。一方で、表やコードブロックのクロスリファレンス機能については現時点では未対応ですが、今後のアップデートでこれらの点を改善する予定です。
また、コードブロックの描画方法も大きく変更しました。新しい仕様では、コードブロックにキャプションを追加できるように設計されています。具体的には、言語の指定に加えてキャプションを記述することで、コードブロックがより説明的で視覚的にわかりやすくなります。詳しい設定方法については、以下のサンプルを参照してください。
テストファイル
以下は、今回のプラグインで出力したPDFのサンプルです。このファイルは、コードブロックのキャプションや画像のクロスリファレンス機能を活用した例を示しています。
---
title: MdTexテストファイル
author: Mekann
date: 2024-12-19
---
\clearpage
\tableofcontents
\clearpage
# Latexとは
>[TeX](https://texwiki.texjp.org/?TeX "TeX (73d)") は [Donald Ervin Knuth](https://www-cs-faculty.stanford.edu/~knuth/) によって開発された,フリーの「**組版システム**」です。 すなわち,活版印刷のような「文字や図版などの要素を紙面に配置する」という作業をコンピュータで行います。
>
>[LaTeX](https://texwiki.texjp.org/?LaTeX "LaTeX (32d)") は TeX の上に構築されたフリーの文書処理システムです。 [Leslie Lamport](https://lamport.org/) によって開発されました。 TeX は「組版のために開発された言語」でもあり,そのままでは使いにくい点もあるので,LaTeX によって一般的な文書作成に便利な機能拡張がなされています。
\clearpage
# サンプル
## ソースコード
```python:hello.py
print("Hello World")
```
```python
print("Hello World")
```
```
print("Hello World")
```
## 画像
![[26783057a0dce2d52b7d3347560b5b7d_MD5.png]][Hello World]{#fig:sample}
[@fig:sample]は最も基本的なコードです。
## 数式
$$
\frac{\pi}{2} =
\left( \int_{0}^{\infty} \frac{\sin x}{\sqrt{x}} dx \right)^2 =
\sum_{k=0}^{\infty} \frac{(2k)!}{2^{2k}(k!)^2} \frac{1}{2k+1} =
\prod_{k=1}^{\infty} \frac{4k^2}{4k^2 - 1}
$$
[引用元:LaTeX入門/簡単な数式(2) - TeX Wiki](https://texwiki.texjp.org/?LaTeX%E5%85%A5%E9%96%80%2F%E7%B0%A1%E5%8D%98%E3%81%AA%E6%95%B0%E5%BC%8F%282%29)
## 表
| 見出し1 | 見出し2 | 見出し3 |
| ---- | ---- | ---- |
| データ1 | データ2 | データ3 |
| データ4 | データ5 | データ6 |
| データ7 | データ8 | データ9 |
| 左寄せ | 中央寄せ | 右寄せ |
| :--- | :--: | ---: |
| データ1 | データ2 | データ3 |
| データ4 | データ5 | データ6 |
| データ7 | データ8 | データ9 |
## リンク
[参考:TeX Wiki](https://texwiki.texjp.org/)





カスタマイズ可能なコードブロック
コードブロック部分にはlistingsパッケージを採用し、柔軟なスタイル変更が可能です。以下のカスタムヘッダーを使用することで、出力の色やフォントサイズを自由に調整できます。
---
header-includes:
- |
\\usepackage{listings}
\\usepackage{color}
\\usepackage{setspace}
\\lstset{
frame=single,
framesep=3pt,
basicstyle=\\ttfamily\\scriptsize,
keywordstyle=\\color{blue}\\bfseries,
commentstyle=\\color{green!50!black},
stringstyle=\\color{red},
breaklines=true,
numbers=left,
numberstyle=\\tiny\\color{gray},
stepnumber=1,
tabsize=4
}
\\lstdefinelanguage{zsh}{
morekeywords={ls, cd, pwd, echo, export, alias, unalias, function},
sensitive=true,
morecomment=[l]{\\#},
morestring=[b]",
morestring=[b]'
}
---

最後に
初めてのObsidianプラグイン開発であり、まだ多くの改善の余地があります。特に、表やコードブロックのクロスリファレンス機能を実装することで、さらに高機能なプラグインに進化させたいと考えています。また、ユーザーからのフィードバックを積極的に取り入れ、必要な機能や修正点を迅速に反映していく予定です。
もしこのプラグインを試してみて、不具合や追加してほしい機能があれば、ぜひお気軽にお知らせください。