マクロツイーター

はてダから移行した記事の表示が崩れてますが、そのうちに直せればいいのに(えっ)

「段落」でない「段落」の話

コレに関する、全くまとまりのない話。

「段落」な「段落」

文書作成の指南書などの多くでは、「適切な段落の構成」の重要性――例えば「一つの段落では一つの題目を扱う」――が説かれる。段落(paragraph)は文よりも上位にある最小の文章の構成単位であり、組版上もそれらが纏まりを成すことが視認しやすいように何らかの効果が施される。書籍では段落の区切りで改行するとともに、区切り直後の行頭に一定の空き(段落字下げ)を入れることが多く、Web ページでは段落間に縦方向の空きを入れるのが一般的である。これが上掲のツイートで「意味論的段落」であり、基本的に、私は「段落」といえばこの概念を指すとずっと思っていた。

(なお、文書の章立ての階層の中にも「段落(paragraph)」と呼ばれるものがある(LaTeX では「(章立て的)段落」は見出しに \paragraph 命令を置くことで示される。*1)が、この 2 つは別の概念と考えられる。一般に章立ての「段落」は複数の「意味論的段落」からなる。ここでは章立ての「段落」には触れない。)

HTML4 の「段落」でない謎の「段落」

かなり以前(HTML4 が普及し出していた頃)に正確な HTML を身に着けようとしていて次のような疑問に突き当たったことがある。 「(意味論的)段落」は多くの場合は(組版上均質な)文の列なのであるが、時として、

  • 箇条書き(ul、ol、dl 要素)
  • 引用部(blockquote 要素)
  • 表組み(table 要素)

等の「別行立て」の要素を内部に含むことがある。(ちょうどこの段落がその例である。)問題は、そのような「段落」は HTML4 ではどのように表すのが正しいのか、ということである。周知の通り、(W3C*2)HTML では p 要素中にブロック要素(「別行立て」の要素に対応するもの)を含めることは許されない。だから、当該の「段落」を 1 つの p 要素とするのは文法的に正しくない。多分、多くの人が、「段落」の中の「ブロック要素で区切られた各部分」を p 要素にするという書き方をしていると思うが、果たしてそれで意味的に正しいのか。

これの答えを知るには、「そもそも HTML4 の p 要素とは何なのか」を正しく理解する必要がある。お馴染みの「<p> は改行でも『1 行空ける』でもなく段落だ」にあるとおり、HTML4 では p 要素は段落(paragraph)を表す、とされている。しかし、これまでの話の論理的帰結として、この「段落」は明らかに(当時の)私の知っている「段落」(=意味論的段落)ではない。それでは一体この「段落」とは何なのか。それを知るための最も的確な方法は、HTML4 の仕様書を読むことであろう。そこで、私は実際に仕様書に当たってみた。その結果は驚くべきものであった:

HTML4 における「段落」の定義は仕様書のどこにも載っていない。

この結果に私は呆然とした。「p は『段落』」と書いてあるだけで、その「段落」の定義は全く不明なのである。既に HTML4 では「意味論マークアップ」が提唱されていたが、これでは何を p 要素でマークアップすればいいのか全然解らない。

もう一つの「段落」

この HTML4 についてずっと抱いていた謎は、組版の関係の文献を読むうちに解けていった。組版の分野では、日常的な(と私がこれまで考えていた)意味での「段落」とは別の概念(上掲ツイートで「組版的段落」)があってそれが「段落」と呼ばれているのである。例えば、「意味論的段落」の中の「ブロック要素で区切られた各部分」は「組版的段落」であると考えて間違いないだろう。HTML4 の仕様書のいう「段落」も「組版的段落」と考えられる――つまりそれは確かに特定の分野で普通に「段落」と呼ばれるものであったということである。

TeX の「段落」、LaTeX の「段落」

TeX組版エンジンであるから、「意味論的段落」ではなく「組版的段落」を対象とするマークアップを採用している。例えば、先に「別行立て要素を含む(意味論的)段落」の例として挙げたものは、書籍の体裁(段落下げで段落を示す)では

 かなり以前(HTML4 が普及……
  ・箇条書き……
  ・引用部……
  ・表組み……
等の「別行立て」の要素を内部……

のように、別行立ての直後の行頭において「段落下げを行わない」ことで「意味論的段落」が継続していることを示す。 plain TeX でこのような「意味論的段落」を組む場合は、「等の…」の箇所を「段落下げのない組版的段落」として マークアップする。(つまり、改段落(空行か \par)の後に明示的な \noindent が置かれる。)

対して、LaTeX では同じものを次のようにマークアップする。

(空行)
かなり以前(HTML4が普及……
\begin{itemize}
\item 箇条書き……
\item 引用部……
\item 表組み……
\end{itemize} % この直後には空行がない
等の「別行立て」の要素を内部……

\end{itemize} の後に空行(改段落)がないことで、「段落」が続いていることを指示している(その結果として、箇条書きの直後の段落下げが消える)。すなわち、LaTeXTeX の「空行で改『段落』を表す」という方式を受け継ぎつつも、対象を「組版的段落」から「意味論的段落」に変更しようと意図していることが窺える。

HTML5 では

先に HTML4 には「段落」の定義が載ってないと述べたが、実は HTML5(策定作業中)には「段落(paragraph)」の定義が載っている(「paragraph」の出現が全てリンクになっていて、その先が以下の定義が書いてある段落*3になっている)。

A paragraph is typically a run of phrasing content that forms a block of text with one or more sentences that discuss a particular topic, as in typography, but can also be used for more general thematic grouping. For instance, an address is also a paragraph, as is a part of a form, a byline, or a stanza in a poem.

「as in typography」とあるのでこれは「組版的」なのだろう。しかし、何か「意味論的」の意味も少し混ざっていて、結局よく解らないように思う。実際のとところ、「組版的」にしても「意味論的」にしても完全に他方から自由ではなく、またそもそも明確に定義できるものでもないのであろう。(私自身もできない。)

ただまだ不思議に思うことがある。HTML5 で「意味論的段落」はどのようにマークアップされるべきか、ということである。上述の段落下げの例で見たように、ある「組版的段落」が「意味論的段落」を開始するか否かは組版結果に影響する。ここでアドホックに「段落下げなし」という属性を与える*4のは HTML5 の精神と相容れないであろう。

*1:LaTeX では章立て自体は直接にはマークアップされない。HTML5 の section 要素に相当するものはない。

*2:MSHTML5(Microsoft 版の HTML 仕様;IE5〜6 に対応する)では p 要素がブロック要素を含むことを許していた。

*3:これは「意味論的」か「組版的」か?

*4:つまり、例えば noindent という class 属性を与えてそれにスタイルを設定する。