HUGO
Menu
GitHub 87548 stars Mastodon

引用塊渲染鉤子

創建引用塊渲染鉤子模板以覆蓋 Markdown 引用塊到 HTML 的渲染。
New in v0.132.0

上下文

引用塊_渲染鉤子_ 模板接收以下 上下文

AlertType
(string) 當 Typealert 時適用,這是轉換為小寫的警報類型。請參閱下面的 警報 部分。
AlertTitle
New in v0.134.0
(template.HTML) 當 Typealert 時適用,這是警報名稱。請參閱下面的 警報 部分。
AlertSign
New in v0.134.0
(string) 當 Typealert 時適用,這是警報符號。通常用於指示警報是否可在圖形上折疊,這是 +- 或空字符串之一。請參閱下面的 警報 部分。
Attributes
(map) Markdown 屬性,如果您的站點配置如下則可用:
markup:
  goldmark:
    parser:
      attribute:
        block: true
[markup]
  [markup.goldmark]
    [markup.goldmark.parser]
      [markup.goldmark.parser.attribute]
        block = true
{
   "markup": {
      "goldmark": {
         "parser": {
            "attribute": {
               "block": true
            }
         }
      }
   }
}
Ordinal
(int) 頁面上引用塊的從零開始的序號。
Page
(page) 對當前頁面的引用。
PageInner
(page) 對通過 RenderShortcodes 方法嵌套的頁面的引用。詳見
Position
(string) 引用塊在頁面內容中的位置。
Text
(template.HTML) 引用塊文本,如果 Typealert 則不包括第一行。請參閱下面的 警報 部分。
Type
(string) 引用塊類型。如果引用塊具有警報指示符則返回 alert,否則返回 regular。請參閱下面的 警報 部分。

示例

在默認配置中,Hugo 根據 CommonMark 規范 渲染 Markdown 引用塊。要創建執行相同操作的渲染鉤子:

layouts/_markup/render-blockquote.html
<blockquote>
  {{ .Text }}
</blockquote>

要將引用塊渲染為帶有可選引用和標題的 HTML figure 元素:

layouts/_markup/render-blockquote.html
<figure>
  <blockquote {{ with .Attributes.cite }}cite="{{ . }}"{{ end }}>
    {{ .Text }}
  </blockquote>
  {{ with .Attributes.caption }}
    <figcaption class="blockquote-caption">
      {{ . | safeHTML }}
    </figcaption>
  {{ end }}
</figure>

然後在您的 Markdown 中:

> Some text
{cite="https://www.hugodoc.com" caption="Some caption"}

警報

警報也稱為 calloutsadmonitions,是用於強調關鍵信息的引用塊。

基本語法

使用基本 Markdown 語法,每行警報的第一行是警報指示符,由感嘆號後跟警報類型組成,並用括號包裹。例如:

content/example.md
> [!NOTE]
> 用戶在瀏覽內容時應該了解的有用信息。

> [!TIP]
> 幫助更好地或更輕松地完成事情的建議。

> [!IMPORTANT]
> 用戶實現目標需要了解的關鍵信息。

> [!WARNING]
> 需要用戶立即注意以避免問題的緊急信息。

> [!CAUTION]
> 關於某些行動的風險或負面結果的警告。

基本語法與 GitHubObsidianTypora 兼容。

擴展語法

使用擴展 Markdown 語法,您可以選擇包含警報符號和/或警報名稱。警報符號是 +- 之一,通常用於指示警報是否可在圖形上折疊。例如:

content/example.md
> [!WARNING]+ 輻射危險
> 請勿在沒有防護裝備的情況下靠近或處理。

擴展語法與 Obsidian 兼容。

擴展語法與 GitHub 或 Typora 不兼容。如果您包含警報符號或警報名稱,這些應用程序會將 Markdown 渲染為引用塊。

示例

如果存在警報指示符,此引用塊渲染鉤子會渲染多語言警報,否則根據 CommonMark 規范渲染引用塊。

layouts/_markup/render-blockquote.html
{{ $emojis := dict
  "caution" ":exclamation:"
  "important" ":information_source:"
  "note" ":information_source:"
  "tip" ":bulb:"
  "warning" ":information_source:"
}}

{{ if eq .Type "alert" }}
  <blockquote class="alert alert-{{ .AlertType }}">
    <p class="alert-heading">
      {{ transform.Emojify (index $emojis .AlertType) }}
      {{ with .AlertTitle }}
        {{ . }}
      {{ else }}
        {{ or (i18n .AlertType) (title .AlertType) }}
      {{ end }}
    </p>
    {{ .Text }}
  </blockquote>
{{ else }}
  <blockquote>
    {{ .Text }}
  </blockquote>
{{ end }}

要覆蓋標簽,請在您的 i18n 文件中創建這些條目:

caution: 警告
important: 重要
note: 注意
tip: 提示
warning: 警告
caution = '警告'
important = '重要'
note = '注意'
tip = '提示'
warning = '警告'
{
   "caution": "警告",
   "important": "重要",
   "note": "注意",
   "tip": "提示",
   "warning": "警告"
}

雖然您可以使用一個帶有條件邏輯的模板(如上所示),但您也可以為每種 Type 的引用塊創建單獨的模板:

layouts/
  └── _markup/
      ├── render-blockquote-alert.html
      └── render-blockquote-regular.html

PageInner 詳情

PageInner 的主要用途是相對於包含的 Page 解析鏈接和 頁面資源。例如,創建一個 “include” 短代碼,從多個內容文件組合頁面,同時保留腳注和目錄的全局上下文:

layouts/_shortcodes/include.html
{{ with .Get 0 }}
  {{ with $.Page.GetPage . }}
    {{- .RenderShortcodes }}
  {{ else }}
    {{ errorf "短代碼 %q 無法找到 %q。參見 %s" $.Name . $.Position }}
  {{ end }}
{{ else }}
  {{ errorf "短代碼 %q 需要一個位置參數來指示要包含的文件的邏輯路徑。參見 %s" .Name .Position }}
{{ end }}

然後在您的 Markdown 中調用短代碼:

content/posts/post-1.md
{{% include "/posts/post-2" %}}

在渲染 /posts/post-2 時觸發的任何渲染鉤子將獲得:

  • 調用 Page 時獲得 /posts/post-1
  • 調用 PageInner 時獲得 /posts/post-2

如果不相關,PageInner 會回退到 Page 的值,並且始終返回一個值。

PageInner 方法僅與調用 RenderShortcodes 方法的短代碼相關,並且您必須使用 Markdown 表示法 調用短代碼。

作為實際示例,Hugo 的嵌入式鏈接和圖像渲染鉤子使用 PageInner 方法來解析 Markdown 鏈接和圖像目標。請參閱各自的源代碼:


Last updated: January 1, 0001
Improve this page