このエントリーをはてなブックマークに追加

Hakyll で日本語文中の余分な空白を削除する

Posted: 2016-09-18

静的サイト作成ツール Hakyll で日本語を含むページを作成したとき、以下の図の反転部分のように余分な空白が入ってしまうことがあります。

これは内部で動いている Pandoc が Markdown ファイルに含まれている改行文字を空白文字に変換するために起こります。

このような挙動を望まないユーザーのために 1.16.0.1 から east_asian_line_breaks という拡張が加えられています。以下でその使い方を説明します。

まず上記の拡張を使うため <project-name>.cabal で使用する pandoc のバージョンが 1.16.0.1 以降になるようにしてください。また以下で示すコードにおいて集合の演算を使うため、それをそのまま使う場合は <project-name>.cabal の依存関係に containers も追加してください。

依存関係の設定が終わったら、以下のように site.hs を変更します。

import qualified Data.Set as S
import Text.Pandoc.Options (Extension(Ext_east_asian_line_breaks), readerExtensions)
-- omission --
customPandocCompiler =
    let
        defaultExtensions = readerExtensions defaultHakyllReaderOptions
        newExtensions = S.insert Ext_east_asian_line_breaks defaultExtensions
        readerOptions = defaultHakyllReaderOptions { readerExtensions = newExtensions }
    in
        pandocCompilerWith readerOptions defaultHakyllWriterOptions

今回追加する Ext_east_asian_line_breakswriterExtensions ではなく readerExtensions に追加するようです。その後、この customPandocCompilerpandocCompiler を置き換え、stack build してください。

最後に stack exec site clean, stack exec site watch で出来上がりを確認して終わりです。