最終更新日時:

Markdownのようなものの書き方v1

はじめに

 本ブログの全ての記事とコメントでは、MarkdownとTeXを合わせたような本ブログ独自の構文で記述することができる。それらについてを以下で解説していく。
 なお、随時アップデートを重ねていくが、vの後に続く数字が同じ間では互換性をもつ。すなわち、v1であるならばアップデートしても互換性はあるが、v1とv2では一部の互換性がなくなる。

バージョンの記述

 #version[version]により[]内のマークダウンのバージョンでこの宣言以下解釈される。これは文頭に置くべき宣言であり、存在しないときは自動的に最新のバージョンのマークダウンを適用する。
 例えば、バージョン1(v1)であるならば

#version[1]

と記述する。また、#version[version]は行の始めに記述しなければならない。

テキストの記述

見出し

 #を重ねて用いることで見出しを記述することができる。
 動作例として

# 見出し1
## 見出し2
### 見出し3

と記述すれば

見出し1

見出し2

見出し3

と出力する。
 見出しのレベルは#と##と###の3種類が用意されており、#と見出し名の間はパースの都合上半角スペースを入れておくべきである。1#defや#undefといった命令との衝突を避けるためまた、これは行の始めに記述しなければならない。

強調

 **text**により文字列を太字にすることができる。
 動作例として

**太字になる。**

と記述すれば

太字になる。

と出力する。

打ち消し線

 ~~text~~により文字列を打ち消し線を入れることができる。
 動作例として

~~打ち消し線が入る。~~

と記述すれば

打ち消し線が入る。

と出力する。

折り畳み

 [>(title)contents<]によりcontentsを折りたたむことができる。
 動作例として

[>(折り畳み1)
 折り畳み1の内容。
[>(折り畳み2)
 折り畳み2の内容。
<]
# 基本的になんでも記述可能
<]

と記述すれば

 折り畳み1の内容。

 折り畳み2の内容。

基本的になんでも記述可能

と出力する。
 これは例で示したように階層化することができる。また、[>(title)と<]はそれぞれ行の始めに記述しなければならない。

段落

 文字列を入力することで段落が自動生成される。\\を入力することで改行をすることができ、一行分の空行を挟むことで段落が変わる。
 動作例として

 一段落目 \\
 一段落目改行

 二段落目 \\
 二段落目改行

と記述すれば

 一段落目
 一段落目改行

 二段落目
 二段落目改行

と出力する。

文字色

 \color{r,g,b}{content}によりcontentにrgbで指定した色を付けることができる。
 動作例として

\color{255,0,0}{レッド}・\color{0,255,0}{グリーン}・\color{0,0,255}{ブルー} \\
\color{0,174,239}{シアン}・\color{236,0,140}{マゼンタ}・\color{255,212,0}{イエロー}

と記述すれば

レッドグリーンブルー
シアンマゼンタイエロー

と出力する。

リンク

ジャンプ

 [text](url){blank}によりリンクを張り付けることができる。
 動作例として

[Google](https://google.com) \\
[Google](https://google.com){blank}

と記述すれば

Google
Google

と出力する。

親子ページ間ジャンプ

 \jump{content}{page}{path}によりcontentをクリックすることにより、現在の記事の親記事からpathで示された子記事のpageページ目にジャンプすることができる。ただし、これは[text](url)で代用が可能でもある。

画像埋め込み

 ![text](url)により画像を埋め込むことができる。
 動作例として

![ダミー画像](https://placehold.jp/150x150.png)

と記述すれば

ダミー画像

と出力する。

注釈

 ^[text]により注釈を記述することができる。
 動作例として

注釈元のテキスト^[注釈のテキスト]

と記述すれば

注釈元のテキスト2注釈のテキスト

と出力する。
 また、マウスオーバーすることにより注釈のテキストを表示させることができ、注釈をクリックすると、一番下の注釈のリストまでスクロールする。

水平線

 ___により水平線を挿入することができる。
 動作例として

テキスト1___テキスト2

と記述すれば

テキスト1


テキスト2

と出力する。

ソースコード

インラインコード

 `code`によりソースコードを記述することができる。
 動作例として

 `max`は与えられた引数のうち、最大値であるものを返す。

と記述すれば

 maxは与えられた引数のうち、最大値であるものを返す。

と出力する。

ブロックコード

 ```language code ```によりソースコードを記述することができる。
 動作例として

```c++
template <class T>
T max(T x, T y) { return (x < y) ? y : x; }
```
```html
<p>ソースコード例1</p>
<p>ソースコード例2</p>
```

と記述すれば

template <class T>
T max(T x, T y) { return (x < y) ? y : x; }
C++
<p>テキスト1</p>
<p>テキスト2</p>
Markup

と出力する。
 また、```languageと```はそれぞれ行の始めに記述しなければならない。
 languageはシンタックスハイライトをする対象のプログラミング言語を示し、大文字小文字の区別は必要ない。また、これは省略可能であり、そのときは単にテキストとして認識する。
 特に、languageにmarkupと記述することにより直接HTMLコードを記述することができる。

数式

インライン数式

 $formula$によりTeX\TeXライクな数式を記述することができる。
 動作例として

 $x^{n}-1$は円分多項式$F_{k}(x)$の積により記述可能である。

と記述すれば

 xn1x^{n}-1は円分多項式Fk(x)F_{k}(x)の積により記述可能である。

と出力する。

ブロック数式

 $$formula$$によりTeX\TeXライクな数式を記述することができる。
 動作例として

$$
A =
\begin{pmatrix}
a & b & c \\
d & e & f
\end{pmatrix}
$$

と記述すれば

A=(abcdef)A =\begin{pmatrix}a & b & c \\d & e & f\end{pmatrix}

と出力する。
 また、それぞれの$$は行の始めに記述しなければならない。

引用

 >contents<により引用の記述をすることができる。
 動作例として

>
引用階層1
>>
引用階層3
< 引用階層2
<<

と記述すれば

引用階層1

引用階層3

引用階層2

と出力する。
 これは例で示したように階層化かつ>と<を重ねて記述することができる。また、>と<はそれぞれ行の始めに記述する必要があり、その直後に引用の内容を記述することができる。

ボックス

 []contents[]により箱の記述をすることができる。
 動作例として

[]
コンテンツ
[]

と記述すれば

コンテンツ

と出力する。
 また、これは階層化することをサポートしていないため、ボックスの中にボックスを記述することはできない。

リスト

 \begin{list}{list_mark}{constructor}{destructor}によりリストを記述をすることができる。
 動作例として

\begin{list}{・}{___}{___}
\item 項目1
\begin{list}{・}{___}{___}
\item 項目2
\item 項目3
\item 項目4
\end{list}
\item 項目5
\end{list}

と記述すれば


  • 項目1


    • 項目2

    • 項目3

    • 項目4


  • 項目5


と出力する。
 また、それぞれの引数は省略可能である。

ページ切り替え

 \newpage{pagename}{args}...により記事のページを切り替えることができる。pagenameは新しいページ名であり、argsは見出しや注釈といった項目の番号のオフセットのリセットフラグを示す。
 例えば、caption_offsetと記述すれば見出しの番号を、note_offsetと記述すれば注釈の番号をリセットする。

定義

マクロ

 #def[macro][text]によりマクロを定義することができ、#undef[macro]によりマクロの定義を解除することができる。定義したマクロによる置換をするには引数argsを用いて[macro]{args}...とする必要がある。なお、引数の括弧については、引数が存在しないならば省略可能である。引数が置換される文字列は、第1引数ならば$1、第2引数ならば$2、・・・、第n引数ならば$nとなる。
 動作例として

マクロテスト1:[aaa] \\
#def[aaa][bbb]
マクロテスト2:[aaa] \\
#undef[aaa]
マクロテスト3:[aaa] \\
#def[aaa][ccc]
マクロテスト4:[aaa] \\
#undef[aaa]
#def[aaa][$1ddd$2]
マクロテスト5:[aaa] \\
マクロテスト6:[aaa]{a}{b}
#undef[aaa]

リンクの書き換え \\
#def[google][https://google.com]
[トップページ]([google])に飛ぶ
#undef[google]

と記述すれば

マクロテスト1:[aaa]
マクロテスト2:bbb
マクロテスト3:[aaa]
マクロテスト4:ccc
マクロテスト5:1ddd1ddd2
マクロテスト6:adddb

リンクの書き換え
Google

と出力する。
 このとき、マクロ名に[と]を含めることはできなく、マクロに関する命令はそれぞれ行の始めに記述しなければならない。
 また、マクロからマクロを呼び出すことは可能であるが、同一マクロの再帰は不可である。
 動作例として

#def[aaa]["[bbb][ccc][a]
#def[bbb][[aa]
#def[ccc][a]]
マクロテスト1:[aaa]aa]"[aaa] \\
マクロテスト2:[aaa]aa]aa]aa]aa]aa]"
#undef[aaa]
#undef[bbb]
#undef[ccc]

と記述すれば

マクロテスト1:"[aaa]"[aaa][a""[aaa][a
マクロテスト2:"[aaa]"[aaa]"[aaa]"[aaa]"[aaa]"[aaa][a"

と出力する。

カウンタ

 \counter{name}{init}により初期値initのカウンタnameを作成することができる。
 動作例として

カウンタの作成 \
\counter{cnt}{0}
カウンタを5にする \\
\setcounter{cnt}{5}
カウンタを3進める \\
\stepcounter{cnt}{3}
カウンタを-2進める \\
\stepcounter{cnt}{-2}
カウンタの値の出力 \\
\refcounter{cnt}

と記述すれば

カウンタの作成
カウンタを5にする
カウンタを3進める
カウンタを-2進める
カウンタの値の出力
6

と出力する。
 これを応用することにより連番のリストを作成することができる。

#def[print_cnt][\stepcounter{$1}{1}\refcounter{$1}).]
\begin{list}{[print_cnt]{li}}{\counter{li}{0}}
\item 項目1
\begin{list}{[print_cnt]{li}}
\item 項目2
\item 項目3
\end{list}
\item 項目4
\item 項目5
\end{list}
#undef[print_cnt]

と記述することにより

  • 項目1

    • 項目2

    • 項目3

  • 項目4

  • 項目5

とすることができる。

Markdownの無効化

 \-{contents\-}によりMarkdownを無効化することができる。
 動作例として

\-{
 **Markdown**は~~無効化~~される。^[これも出ない]。
$$
f(x)=x^{2}-1
$$
 数式も出力されない。
\-}

と記述すれば

 **Markdown**は~~無効化~~される。^[これも出ない]。 $$f(x)=x^{2}-1$$ 数式も出力されない。

と出力する。
 ただし、マクロと改行\\に関しては無効化されない。Markdownを無効化している文脈中では\sharpおよび\backslashと記述することでシャープおよびバックスラッシュが出力されるため、これを用いることで改行記号を記述することができる。
 これに関しては、マクロにより

#def[#][\sharp]
#def[\][\backslash]
\-{
 簡単に[#][#]と[\][\]を記述することができる。
\-}
#undef[#]
#undef[\]

と記述することにより

 簡単に##と\\を記述することができる。

のようにすることもできる。




1#defや#undefといった命令との衝突を避けるため
2注釈のテキスト