201

我在 Github 上托管一个 Jekyll 博客,并用 Markdown 写我的帖子。当我添加图像时,我按以下方式进行:

![name of the image](http://link.com/image.jpg)

然后在文本中显示图像。

但是,我如何告诉 Markdown 添加显示在图像下方或上方的标题?

4

13 回答 13

348

我知道这是一个老问题,但我想我仍然会分享我添加图片说明的方法。您将无法使用captionorfigcaption标签,但这将是一个简单的替代方案,无需使用任何插件。

在你的降价中,你可以用强调标签包裹你的标题,并将其直接放在图像下方,而无需像这样插入新行:

![](path_to_image)
*image_caption*

这将生成以下 HTML:

<p>
    <img src="path_to_image" alt>
    <em>image_caption</em>
</p>

然后在您的 CSS 中,您可以使用以下选择器对其进行样式设置,而不会干扰em页面上的其他标签:

img + em { }

请注意,图像和标题之间不能有空行,因为那样会生成:

<p>
    <img src="path_to_image" alt>
</p>
<p>
    <em>image_caption</em>
</p>

您还可以使用除em. 只要确保有标签,否则您将无法对其进行样式设置。

于 2015-05-21T06:45:58.727 回答
186

您可以为此使用表。它工作正常。

| ![space-1.jpg](http://www.storywarren.com/wp-content/uploads/2016/09/space-1.jpg) | 
|:--:| 
| *Space* |

结果:

在此处输入图像描述

于 2017-07-19T12:52:23.907 回答
154

如果您不想使用任何插件(这意味着您可以直接将其推送到 GitHub,而无需先生成站点),您可以创建一个名为image.htmlin的新文件_includes

<figure class="image">
  <img src="{{ include.url }}" alt="{{ include.description }}">
  <figcaption>{{ include.description }}</figcaption>
</figure>

然后显示您的降价中的图像:

{% include image.html url="/images/my-cat.jpg" description="My cat, Robert Downey Jr." %}
于 2013-10-14T12:30:40.200 回答
88

用于带有标题的图像的正确 HTML 是<figure>带有<figcaption>.

没有与此等效的 Markdown,因此,如果您只是偶尔添加标题,我鼓励您将该 html 添加到您的 Markdown 文档中:

Lorem ipsum dolor sit amet, consectetur adipiscing elit...

<figure>
  <img src="{{site.url}}/assets/image.jpg" alt="my alt text"/>
  <figcaption>This is my caption text.</figcaption>
</figure>

Vestibulum eu vulputate magna...

Markdown 规范鼓励您在这种情况下嵌入 HTML,因此它会显示得很好。它也比弄乱插件简单得多。

如果您尝试使用其他 Markdown-y 功能(如表格、星号等)来生成字幕,那么您只是在琢磨如何使用 Markdown。

于 2017-07-06T14:32:41.453 回答
11

我发现在投票率最高的答案上的一个小改动是使用 jekyll 语法向某事物添加一个类,然后以这种方式对其进行样式设置。

所以在帖子中你会有:

![My image](/images/my-image.png)

{:.image-caption}
*The caption for my image*

然后在您的 CSS 文件中,您可以执行以下操作:

.image-caption {
  text-align: center;
  font-size: .8rem;
  color: light-grey;

出来看起来不错!

于 2017-03-27T11:50:20.897 回答
8

这个问题有两种语义正确的解决方案:

  1. 使用插件
  2. 创建自定义包含

1.使用插件

我已经尝试了几个插件来做到这一点,我最喜欢的是jekyll-figure.

1.1。安装jekyll-figure

一种安装方法jekyll-figure是添加gem "jekyll-figure"到插件组中的 Gemfile。

然后bundle install从您的终端窗口运行。

1.2. 利用jekyll-figure

只需将您的降价包装在{% figure %}{% endfigure %}标签中。

您的标题位于开始{% figure %}标签中,您甚至可以使用降价设置它的样式!

例子:

{% figure caption:"Le logo de **Jekyll** et son clin d'oeil à Robert Louis Stevenson" %}
    ![Le logo de Jekyll](/assets/images/2018-08-07-jekyll-logo.png)
{% endfigure %}

1.3. 样式它

现在您的图像和标题在语义上是正确的,您可以根据需要应用 CSS:

  • figure(对于图像和标题)
  • figure img(仅用于图像)
  • figcaption(仅用于字幕)

2. 创建自定义包含

您需要在文件夹中创建一个image.html文件_includes,并在 Markdown 中使用 Liquid 将其包含在内

2.1。创建 _includes/image.html

image.html在您的 _includes 文件夹中创建文档:

<!-- _includes/image.html -->
<figure>
    {% if include.url %}
    <a href="{{ include.url }}">
    {% endif %}
    <img
        {% if include.srcabs %}
            src="{{ include.srcabs }}"
        {% else %}
            src="{{ site.baseurl }}/assets/images/{{ include.src }}"
        {% endif %}
    alt="{{ include.alt }}">
    {% if include.url %}
    </a>
    {% endif %}
    {% if include.caption %}
        <figcaption>{{ include.caption }}</figcaption>
    {% endif %}
</figure>

2.2. 在 Markdown 中,使用 Liquid 包含图像

/assets/images带有标题的图像:

This is [Jekyll](https://jekyllrb.com)'s logo :

{% include image.html
    src="jekyll-logo.png" <!-- image filename (placed in /assets/images) -->
    alt="Jekyll's logo" <!-- alt text -->
    caption="This is Jekyll's logo, featuring Dr. Jekyll's serum!" <!-- Caption -->
%}

使用绝对 URL 的(外部)图像:(更改src=""srcabs=""

This is [Jekyll](https://jekyllrb.com)'s logo :

{% include image.html
    srcabs="https://jekyllrb.com/img/logo-2x.png" <!-- absolute URL to image file -->
    alt="Jekyll's logo" <!-- alt text -->
    caption="This is Jekyll's logo, featuring Dr. Jekyll's serum!" <!-- Caption -->
%}

可点击的图像:(添加url=""参数)

This is [Jekyll](https://jekyllrb.com)'s logo :

{% include image.html
    src="https://jekyllrb.com/img/logo-2x.png" <!-- absolute URL to image file -->
    url="https://jekyllrb.com" <!-- destination url -->
    alt="Jekyll's logo" <!-- alt text -->
    caption="This is Jekyll's logo, featuring Dr. Jekyll's serum!" <!-- Caption -->
%}

没有标题的图像:

This is [Jekyll](https://jekyllrb.com)'s logo :

{% include image.html
    src="https://jekyllrb.com/img/logo-2x.png" <!-- absolute URL to image file -->
    alt="Jekyll's logo" <!-- alt text -->
%}

2.3. 样式它

现在您的图像和标题在语义上是正确的,您可以根据需要应用 CSS:

  • figure(对于图像和标题)
  • figure img(仅用于图像)
  • figcaption(仅用于字幕)
于 2018-08-04T05:45:10.483 回答
3

您可以尝试pandoc用作您的转换器。这是一个 jekyll 插件来实现这一点。Pandoc 将能够自动添加与您的alt属性相同的图形标题。

但是你必须推送编译好的站点,因为 github 不允许在 Github 页面中使用插件以确保安全。

于 2013-10-13T08:32:47.527 回答
3

安德鲁的@andrew-wei 回答效果很好。您也可以将几个链接在一起,具体取决于您要执行的操作。例如,这会为您提供带有 alt、标题和标题的图像,并在标题的不同部分使用换行符和粗体和斜体:

img + br + strong {margin-top: 5px; margin-bottom: 7px; font-style:italic; font-size: 12px; }
img + br + strong + em {margin-top: 5px; margin-bottom: 7px; font-size: 12px; font-style:italic;}

使用以下<img>降价:

![description](https://img.jpg "description")
***Image:*** *description*
于 2018-01-07T12:21:43.997 回答
2
<p align="center">
  <img alt="img-name" src="/path/image-name.png" width="300">
  <br>
    <em>caption</em>
</p>

这是基本的字幕使用。不需要使用额外的插件。

于 2020-02-21T19:52:49.177 回答
0

这是最简单(但不是最漂亮)的解决方案:围绕整个事物制作一张桌子。显然存在缩放问题,这就是为什么我用 HTML 给出我的示例,以便您可以轻松地修改图像大小。这对我有用。

| <img src="" alt="" style="width: 400px;"/> |
| My Caption |
于 2016-12-09T09:16:48.460 回答
0

对于 Kramdown,您可以使用{:refdef: style="text-align: center;"}对齐中心

{:refdef: style="text-align: center;"}
![example](https://upload.wikimedia.org/wikipedia/en/a/a9/Example.jpg){: width="50%" .shadow}
{: refdef}
{:refdef: style="text-align: center;"}
*Fig.1: This is an example image. [Source](https://upload.wikimedia.org/wikipedia/en/a/a9/Example.jpg)*
{: refdef}

您需要{::options parse_block_html="true" /}在帖子的开头添加才能使其正常工作。

于 2021-02-10T09:05:03.963 回答
0

这个选项表面上看起来很复杂,但它根本不解决 Jekyll Markdown 渲染器(Kramdown)的其他问题。基本上,此选项会更改使用可扩展的 python 制作的渲染器,允许您安装扩展(例如,有大量的 markdown-captions)并扩展它(它具有扩展 API)。

  1. 第一步是定义一个自定义降价处理器。您将必须添加markdown: CustomProcessor_config.yml.

  2. 然后,我们必须创建 CustomProcessor。创建一个名为的文件夹_plugins并添加一个名MyConverter.rb为此内容的文件:

class Jekyll::Converters::Markdown::CustomProcessor

    def initialize(config)

    end

    def matches(ext)
        ext =~ /^\.(md|markdown)$/i
    end

    def output_ext(ext)
        ".html"
    end

    def convert(content)

      puts "EXECUTED"

      md_path = "./_plugins/temp/temp.md"
      html_path = "./_plugins/temp/temp.html"
      
      File.write(md_path, content, mode: "w")
      system("python ./_plugins/MyConverter.py")

      content = File.read(html_path)
      content
    end
end

您还需要tempplugins.

该代码所做的只是将我们正在处理的文件的所有内容写入 temp.md,调用 python 脚本,等到它完成,读取 temp.html,并将其作为转换器的输出返回。

  1. 现在是时候在 python 中创建我们的转换器了。我选择使用Python-Markdown。它易于使用并且有大量的扩展。MyConverter.py要使用转换器,我们必须在文件夹内创建一个名为的_plugins文件并将此内容放入其中:
import markdown

markdown_extensions = [
    'markdown_captions',
    'def_list',
    'nl2br',
    'tables',
    'codehilite',
    'fenced_code',
    'md_in_html',
    'attr_list'
]

md_file = open("./_plugins/temp/temp.md", "r")
md_string = md_file.read()
md_file.close()

html_string = markdown.markdown(md_string, extensions=markdown_extensions, extension_configs =extension_configs)

html_file = open("./_plugins/temp/temp.html", "w")
html_file.write(html_string)
html_file.close()

该代码只是加载扩展、读取temp.md文件、将其转换为 html 并将其写入temp.html. 使用所有这些扩展应该会生成与默认 jekyll markdown 渲染类似的输出。唯一没有与 python-markdown 捆绑的扩展是 markdown_captions,它可以发挥魔力。要安装 python 渲染器和扩展,您只需运行pip install Markdown markdown-captions.

应该这样做,现在您的 markdown 正在由 Python-Markdown 翻译。一些 html 元素现在可能会有所不同(根据我的经验,只有少数)所以也许你必须在 css 中做一些小的改动。

这是我与 camptions 一起使用的 css:

figure{
  margin: 0px;
}

figcaption { 
  color: gray;
  font-size: 0.8rem;
}

该过程试图尽可能简单,以使其易于理解和修改。我已经尽可能地描述了这个过程。如果有人有问题,请发表评论,我会更新答案。

于 2021-06-12T23:31:23.407 回答
0

_config.yml在文件中添加以下配置

# prose.io config
prose:
  rooturl: '_posts'
  media: 'img'
  ignore:
    - 404.html
    - LICENSE
    - feed.xml
    - _config.yml
    - /_layouts
    - /_includes
    - /css
    - /img
    - /js
  metadata:
    _posts:
      - name: "layout"
        field:
          element: "hidden"
          value: "post"
      - name: "title"
        field:
          element: "text"
          label: "Post title"
          placeholder: "Title"
          alterable: true
      - name: "subtitle"
        field:
          element: "textarea"
          label: "Subtitle"
          placeholder: "A description of your post."
          alterable: true
      - name: "date"
        field:
          element: "text"
          label: "Date"
          help: "Enter date of post."
          placeholder: "yyyy-mm-dd"
          alterable: true
      - name: "image"
        field:
          element: "text"
          label: "Image"
          help: "Add a thumbnail image to your post."
          placeholder: "Thumbnail"
          alterable: true
      - name: "published"
        field:
          element: "checkbox"
          label: "Publish"
          help: "Check to publish post, uncheck to hide."
于 2021-07-08T23:36:42.077 回答