Using an image caption in Markdown Jekyll

后端 未结 10 870
一个人的身影
一个人的身影 2021-01-29 18:11

I am hosting a Jekyll Blog on Github and write my posts with Markdown. When I am adding images, I do it the following way:

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

相关标签:
10条回答
  • 2021-01-29 18:14

    There are two semantically correct solutions to this question:

    1. Using a plugin
    2. Creating a custom include

    1. Using a plugin

    I've tried a couple of plugins doing this and my favourite is jekyll-figure.

    1.1. Install jekyll-figure

    One way to install jekyll-figure is to add gem "jekyll-figure" to your Gemfile in your plugins group.

    Then run bundle install from your terminal window.

    1.2. Use jekyll-figure

    Simply wrap your markdown in {% figure %} and {% endfigure %} tags.

    You caption goes in the opening {% figure %} tag, and you can even style it with markdown!

    Example:

    {% 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. Style it

    Now that your images and captions are semantically correct, you can apply CSS as you wish to:

    • figure (for both image and caption)
    • figure img (for image only)
    • figcaption (for caption only)

    2. Creating a custom include

    You'll need to create an image.html file in your _includes folder, and include it using Liquid in Markdown.

    2.1. Create _includes/image.html

    Create the image.html document in your _includes folder :

    <!-- _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. In Markdown, include an image using Liquid

    An image in /assets/images with a caption:

    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 -->
    %}
    

    An (external) image using an absolute URL: (change src="" to 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 -->
    %}
    

    A clickable image: (add url="" argument)

    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 -->
    %}
    

    An image without a 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. Style it

    Now that your images and captions are semantically correct, you can apply CSS as you wish to:

    • figure (for both image and caption)
    • figure img (for image only)
    • figcaption (for caption only)
    0 讨论(0)
  • 2021-01-29 18:15

    You can try to use pandoc as your converter. Here's a jekyll plugin to implement this. Pandoc will be able to add a figure caption the same as your alt attribute automatically.

    But you have to push the compiled site because github doesn't allow plugins in Github pages for security.

    0 讨论(0)
  • 2021-01-29 18:16

    If you don't want to use any plugins (which means you can push it to GitHub directly without generating the site first), you can create a new file named image.html in _includes:

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

    And then display the image from your markdown with:

    {% include image.html url="/images/my-cat.jpg" description="My cat, Robert Downey Jr." %}
    
    0 讨论(0)
  • 2021-01-29 18:16

    Andrew's @andrew-wei answer works great. You can also chain a few together, depending on what you are trying to do. This, for example, gets you an image with alt, title and caption with a line break and bold and italics in different parts of the caption:

    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;}
    

    With the following <img> markdown:

    ![description](https://img.jpg "description")
    ***Image:*** *description*
    
    0 讨论(0)
  • 2021-01-29 18:16

    Here's the simplest (but not prettiest) solution: make a table around the whole thing. There are obviously scaling issues, and this is why I give my example with the HTML so that you can modify the image size easily. This worked for me.

    | <img src="" alt="" style="width: 400px;"/> |
    | My Caption |
    
    0 讨论(0)
  • 2021-01-29 18:17

    The correct HTML to use for images with captions, is <figure> with <figcaption>.

    There's no Markdown equivalent for this, so if you're only adding the occasional caption, I'd encourage you to just add that html into your Markdown document:

    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...
    

    The Markdown spec encourages you to embed HTML in cases like this, so it will display just fine. It's also a lot simpler than messing with plugins.

    If you're trying to use other Markdown-y features (like tables, asterisks, etc) to produce captions, then you're just hacking around how Markdown was intended to be used.

    0 讨论(0)
提交回复
热议问题