Featured image of post シンタックスハイライトを自分好みの色にする

シンタックスハイライトを自分好みの色にする

シンタックスハイライトの色をスタイルシートで変更してみます。

シンタックスハイライトの色を変更したい

グレーの背景でやさしい表現も良いんですが、やっぱり背景は黒 ですよね。
どうも、黒好き星人です。

黒になったらどんな感じになるんだろうと、ワクワクしながらブラウザのデベロッパーツールで黒くしてみたら、文字が見にくい。

そりゃそうです。
やさしいグレーの背景に合わせた文字の色ですから。

さぁ、文字色も含めてカスタマイズです。

シンタックスハイライトって何?

結果からお見せすると、こんな感じです

変更前

Hugo におけるシンタックスハイライト

Go の機能を使う方法と、highlight.js を使う方法の2種類が主流のようです。
私は aether で採用されていることもあり、後者で行うことにしました。

私のやり方はイレギュラーかも・・・

私のやり方はちょっとイレギュラーな形かもしれません。
highlight.js のテーマを変更してみたものの、一部しか反映されなかったんです・・・。

ということで k-kaz のやり方

aether の中を覗いていたら、シンタックスハイライト用と思われるスタイルシートを発見しました。

themes/aether/static/css/xcode.css

もしかしたら、この影響でうまく反映されなかったのかもしれません。

というか、絶対そうだ。

よく見付けた、私!!

ここで指定されているスタイルを自分好みに変えていきます。
基本的には色だけ変えていけば良いのですが、スタイルの組み合わせもご自由に。

xcode.css みたいに、スタイルシート専用のファイルを用意しても良いし、既存のファイルに追記する形でも良いです。

私は assets/sass/hoge.scss に追記しましたが、新規で用意する場合は static/css/hoge.css として <head>~</head> で読み込むなり、CSS内で読み込むなりして反映させましょう。

いまのスタイルシートはこんな感じ

/* 背景真っ黒!!
   プログラム毎に class が変わるのでワイルドカードで */
code[class*="language-"] {
  background: #000 !important;
  color: #fffaf0;
}

/* ここから下がコード用のスタイル */
.hljs-comment,
.hljs-quote {
  color: #90ee90;
}

.hljs-keyword,
.hljs-selector-tag,
.hljs-literal {
  color: #ffff00;
}

.hljs-name {
  color: #4682b4;
}

.hljs-variable,
.hljs-template-variable {
  color: #660;
}

.hljs-string {
  color: #ff7f50;
}

.hljs-regexp,
.hljs-link {
  color: #080;
}

.hljs-title,
.hljs-tag,
.hljs-symbol,
.hljs-bullet,
.hljs-meta {
  color: #c0c0c0;
}

.hljs-number {
  color: #7cfc00;
}

.hljs-section,
.hljs-class .hljs-title,
.hljs-type,
.hljs-attr,
.hljs-built_in,
.hljs-builtin-name,
.hljs-params {
  color: #87ceeb;
}

.hljs-attribute,
.hljs-subst {
  color: #87ceeb;
}

.hljs-formula {
  background-color: #eee;
  font-style: italic;
}

.hljs-addition {
  background-color: #baeeba;
}

.hljs-deletion {
  background-color: #ffc8bd;
}

.hljs-selector-id,
.hljs-selector-class {
  color: #ff8c00;
}

.hljs-doctag,
.hljs-strong {
  font-weight: bold;
}

.hljs-emphasis {
  font-style: italic;
}

せっかくなので、正しいやり方も紹介

いつか、自分が使うことになるかもしれないしね。

Go 機能を使う場合

今は、Go に搭載されている機能で、シンタックスハイライトが可能になっています。

config.toml で有効化

pygmentsCodefences = true
pygmentsUseClasses = true

スタイルの選択

hugo gen chromastyles --style=hoge > syntax.css

hoge のところを好きなテーマにしてあげると、そのスタイルシートが syntax.css に出力され、これを <head>~</head> の中で読み込んであげれば良いです。

テーマは下記を参考にしてください。
Pygments style gallery!

monokai って結構有名ですよね。
いろんなエディタのテーマで紹介されます。

highlight.js を使う場合

私が使っている aether ではこちらを採用しています。

スタイルの選択

こちらにもテーマが沢山あって、下記から選ぶことができます。
highlight.js demo

設定の仕方

下記を <head>~</head> に入れてあげましょう。

<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.15.6/styles/default.min.css">
<script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.15.6/highlight.min.js"></script>
<script>hljs.initHighlightingOnLoad();</script>

9.15.6 は現在の最新バージョンです。ここは値が変わるので、使用する場合は公式サイトで確認をお願いします。
尚、一番上にあるファイル名 default.min.css を好きなテーマに変えてあげると、スタイルが反映されます。

aether の場合

themes/aether/layouts/partials/scripts.html で、上記を読み込んでいるので、そこを変えてあげれば良いはずなんですけど、1行目(テーマ)が見当たらず。もしかしたら、そこを省略して、自前のスタイルシートを使っていたのかなと思えてきました。

ということで、最初に紹介した スタイルシートで調整 という方法をとったんですが、aether の場合はそれが正解っぽいですね。

他のテーマならこの手順で良いかと思います。

Hugo で構築されています。
テーマ StackJimmy によって設計されています。