ox-hugo を使う

2019-03-31 1219 words 3 mins read

ox-hugo の中で LaTeX の数式への参照を使う

ox-hugo の中で LaTeX の数式を書いて、それを参照することができるはずですが、 そのままでは動きません。

(org)
\begin{equation}
\label{eq:01}
\y = ax + b
\end{equation}

と書くと、次が出力されます:

\begin{equation} \label{eq:01} \y = ax + b \end{equation}

ここで式(\ref{eq:02})を参照します。 以下の設定をしない場合は式(\ref{eq:02})を参照できません。

static/mathjax-config.js を次の内容で作成してください (ox-hugo の test からコピーしました):

ソースコード 1: static/mathjax-config.js (javascript)
window.MathJax = {
    displayAlign: "center",
    displayIndent: "0em",
    "HTML-CSS": { scale: 100,
                  linebreaks: { automatic: "false" },
                  webFont: "TeX"
                },
    SVG: {scale: 100,
          linebreaks: { automatic: "false" },
          font: "TeX"},
    NativeMML: {scale: 100},
    TeX: { equationNumbers: {autoNumber: "AMS"},
           MultLineWidth: "85%",
           TagSide: "right",
           TagIndent: ".8em"
         }
};

これを Javasctipt を使うテンプレートの中で呼びだします:

(html)
<script src='https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.4/MathJax.js?config=TeX-MML-AM_CHTML' async></script>
<script src="{{ "mathjax-config.js" | absURL }}"></script>

参照してみます:

\begin{equation} \label{eq:02} \y = ax + b \end{equation}

ここで式(\ref{eq:01})を参照します。

目次の制御

ox-hugo が出力する目次を Summary の中に出力させない

ox-hugo が出力される目次が、 Summary の中に 表示されてしまいます。 それを防ぐための方法です。

ファイルのコピー

から、テーマの layouts/partials ディレクトリへコピーします。 summary_minus_toc.html はこのような内容です:

ソースコード 2: layouts/partials/summary_minus_toc.html (html)
{{- with .Description -}}
    {{- . | markdownify | printf "<p>%s</p>" | safeHTML -}}
{{- else -}}
    {{- $summary_has_org_toc := substr .Content 0 30 | findRE "[\".]ox-hugo-toc" -}}
    {{- if $summary_has_org_toc -}}
        {{- $content_splits := split .RawContent "<!--endtoc-->" -}} <!-- Need to use .RawContent as we will be parsing for 'more' comment later. -->
        <!-- If Org TOC is present, the special comment endtoc would also be present.
             In that case, output only the part *after* that comment as Summary. -->
        {{- $summary_raw := index $content_splits 1 -}}
        {{- $summary_splits := split $summary_raw "" -}}
        {{- if eq (len $summary_splits) 2 -}}
            {{- index $summary_splits 0 | markdownify -}}
        {{- else -}}
            {{- $summary_raw | markdownify | truncate 300 -}}
        {{- end -}}
    {{- else -}}
        <!-- Print the whole Summary if endtoc special comment is not found. -->
        {{- .Summary |  printf "<p>%s</p>" | safeHTML -}}
    {{- end -}}
{{- end -}}

生の HTML が出るのは嫌なので、少し改造します:

ソースコード 3: 変更した summary_minus_toc.html (html)
{{- with .Description -}}
    {{- . | markdownify | printf "<p>%s</p>" | safeHTML -}}
{{- else -}}
    {{- $summary_has_org_toc := substr .Content 0 30 | findRE "[\".]ox-hugo-toc" -}}
    {{- if $summary_has_org_toc -}}
        {{- $content_splits := split .RawContent "<!--endtoc-->" -}} <!-- Need to use .RawContent as we will be parsing for 'more' comment later. -->
        <!-- If Org TOC is present, the special comment endtoc would also be present.
             In that case, output only the part *after* that comment as Summary. -->
        {{- $summary_raw := index $content_splits 1 -}}
        {{- $summary_splits := split $summary_raw "<!--more-->" -}}
        {{- if eq (len $summary_splits) 2 -}}
            {{- index $summary_splits 0 | markdownify -}}
        {{- else -}}
            {{- $summary_raw | markdownify | plainify | truncate 300 -}}
        {{- end -}}
    {{- else -}}
        <!-- Print the whole Summary if endtoc special comment is not found. -->
        {{- .Summary |  printf "<p>%s</p>" | safeHTML -}}
    {{- end -}}
{{- end -}}
(html)
{{- $summary_raw | markdownify | truncate 300 -}}

(html)
{{- $summary_raw | markdownify | plainify | truncate 300 -}}

に変更しただけです。

これはこのように動きます:

  • #+DESCRIPTION: があれば、それが使われます
  • ox-hugo が目次を作成していたら(=ox-hugo-toc= というクラスがあれば)、 それを削除し、 Summary とします。

テーマの中での使用方法

次のようにして、 Summary を埋め込むテンプレートの中で 使ってください:

ソースコード 4: テーマの中での使用方法 (html)
{{ partial "summary_minus_toc.html" . }}

ox-hugo に目次を作成させないようにする

ox-hugo はデフォルトで目次を生成します。 それを止めるには、 org-hugo-export-with-tocnil に設定します。 また、 org-html-use-infojst だと、 常に 目次が 出力されてしまうので、 nil に設定しておきます。

ソースコード 5: ox-hugo に目次を作成させないようにする (emacs-lisp)
(setq org-hugo-export-with-toc nil)
(setq org-html-use-infojs nil)

各サブツリーで次のようにすると、目次は出力されません:

(org)
:EXPORT_OPTIONS: toc:nil

各サブツリーで次のようにすると、目次が出力されます:

(org)
:EXPORT_OPTIONS: toc:t

もしくは、次のようにすると、指定したレベルまでの目次が出ます:

(org)
:EXPORT_OPTIONS: toc:1

Details と summary

ox-hugo を使って Details と Summary を書く方法です。

(org)
#+begin_details
#+begin_summary
これは Summary
#+end_summary
これは detail
#+end_details
これは Summary

これは detail


Tags: Hugo ox-hugo

Related Articles:


We notice you're using an adblocker. If you like our webite please keep us running by whitelisting this site in your ad blocker. We’re serving quality, related ads only. Thank you!

I've whitelisted your website.

Not now
This website uses cookies to ensure you get the best experience on our website. Learn more Got it