Jekyll Markdown,用段落标签编译图像
Jekyll Markdown, compiling images with paragraph tags
这只是一个简单的问题,但我在 Google 上找不到解决这个问题的方法。基本上发生的事情是我有一个 Jekyll 网站,我正在使用 kramdown 进行降价编译。
当我将图像添加到 markdown 文件时,如下所示:
![Image Alt Tag](path/to/image)
当我不想要它时,它会用 <p>
标签编译它,如下所示。
<p><img src="path/to/image" alt="Image Alt Tag" /></p>
这就是我希望使用图像标签编译 markdown 文件的方式
<img src="path/to/image alt="Image Alt Tag" />
我想知道哪里出错了,或者为什么 Jekyll 使用段落标签编译图像。
提前致谢
---编辑:尝试了另一种方法但最终遇到了同样的问题
我试过只添加下面的 html
代码:
<img src="path/to/image" alt="Image Alt Tag" />
它仍然可以通过添加 <p>
标签进行编译,如下所示。
<p><img src="path/to/image" alt="Image Alt Tag" /></p>
我想知道为什么 markdown 文件仍然在 html 不需要的代码中添加 <p>
标签?
感谢 David Jacquel 让我走上了正确的道路。
似乎图像是行内元素,如果 Markdown 检测到图像不在块元素(例如 <figure></figure>
、<div></div>
或其他类似块元素内),那么它将应用<p></p>
标签环绕图像。
要查看 Markdown 如何编译文档,我发现 Babelmark 2 是一个有用的资源,值得尝试看看您正在使用的 markdown 编译器是否正在执行您希望它执行的操作。
这是 示例,在 David Jacquel 指出这个特定问题后,我使用 Babelmark 2 解决了这个问题。
我希望这对遇到同样问题但没有注意到这是一个 inline/block 元素问题的人有所帮助。
这是我的回答 here 的重新发布,我在其中使用部分内容来满足博客的所有图像需求。
正如其他人所说,图像是内联元素,Markdown 解析器会强制将它们包装在块级元素中。目前接受的答案是 hacky:它在你的降价中看起来很乱,不是 robust/extensible,而且不容易修改。我将 Middleman 用于我的博客,并为我的图像创建了一个部分,它可以完成我想让图像做的所有事情。我 assume/hope Jekyll 也有部分,这个答案虽然在语法上与 Jekyll 不同,但仍然与你相关。
请注意,如果图片链接不是以 "http://"、"https:/" 或“/”开头,我会在它们前面加上前缀。这是因为我对博客的图片有一个坚实的组织结构,并且在使用这个部分时更简单,我只需要图片名称而不需要其路径的其他部分。
这是部分内容:
partials/_image.erb
<%
#initialize local variables in case they were not included
caption ||= ""
alt ||= ""
classes ||= ""
#strip '.html' extension off article link to get name of folder
url = current_article.url
url_without_ext = url[0..url.length-6]
#determine if image has an exact link or belongs to "/images/blog/CURRENT_ARTICLE_NAME/"
prefix = src[0..6]
if prefix != "http://" and prefix != "https:/" and src[0] !="/" then
#image belongs to "/images/blog/CURRENT_ARTICLE_NAME/" - add prefix to src
src = "/images#{url_without_ext}/#{src}"
end
%>
<!-- Use Kramdown's 'nomarkdown' tag so that this figure is not wrapped in a 'p' tag in the blog pages that use this partial -->
{::nomarkdown}
<figure class="<%= classes %>">
<!-- Show the image and link to the full resolution on click-->
<a target="_blank" href="<%= src %>" >
<img src="<%= src %>" alt="<%= alt %>">
</a>
<figcaption><%= caption %></figcaption>
</figure>
{:/}
然后像这样调用这个部分
不会添加前缀:
<%= partial "partials/image.erb", locals: {
src: "/images/icons/tech/atom.svg",
alt: "Atom",
classes: "icon" } %>
将添加前缀:
<%= partial "partials/image.erb", locals: {
src: "my-lovely-dog.svg",
alt: "Dog",
caption: "Woof woof!",
classes: "icon" } %>
我保持这部分内容是最新的here(以防我add/edit其中任何一个)。
这是我最终使用的解决方案,基于 this response Kramdown 存储库上的一个问题。 (Kramdown 是 Jekyll 的 markdown 解析器):
在目录 _plugins
中创建一个文件,例如kramdown-image-parsing.rb
包含以下...
require 'kramdown/converter/html'
module StandaloneImages
def convert_p(el, indent)
return super unless el.children.size == 1 && (el.children.first.type == :img || (el.children.first.type == :html_element && el.children.first.value == "img"))
convert(el.children.first, indent)
end
end
Kramdown::Converter::Html.prepend StandaloneImages
嗨,太棒了!有效。
我观察到图像和其他非块元素的相同行为。
添加 css-class,如 handle-as-span
将创建一个选项,通过 [=] 将 display
属性 更改为 inline
24=].
{: .handle-as-span }
![Image Alt Tag](path/to/image)
生成的HTML
<p class="handle-as-span"><img src="path/to/image" alt="Image Alt Tag" /></p>
这里是CSS魔法
p.handle-as-span {
display: inline;
}
这只是一个简单的问题,但我在 Google 上找不到解决这个问题的方法。基本上发生的事情是我有一个 Jekyll 网站,我正在使用 kramdown 进行降价编译。
当我将图像添加到 markdown 文件时,如下所示:
![Image Alt Tag](path/to/image)
当我不想要它时,它会用 <p>
标签编译它,如下所示。
<p><img src="path/to/image" alt="Image Alt Tag" /></p>
这就是我希望使用图像标签编译 markdown 文件的方式
<img src="path/to/image alt="Image Alt Tag" />
我想知道哪里出错了,或者为什么 Jekyll 使用段落标签编译图像。
提前致谢
---编辑:尝试了另一种方法但最终遇到了同样的问题
我试过只添加下面的 html
代码:
<img src="path/to/image" alt="Image Alt Tag" />
它仍然可以通过添加 <p>
标签进行编译,如下所示。
<p><img src="path/to/image" alt="Image Alt Tag" /></p>
我想知道为什么 markdown 文件仍然在 html 不需要的代码中添加 <p>
标签?
感谢 David Jacquel 让我走上了正确的道路。
似乎图像是行内元素,如果 Markdown 检测到图像不在块元素(例如 <figure></figure>
、<div></div>
或其他类似块元素内),那么它将应用<p></p>
标签环绕图像。
要查看 Markdown 如何编译文档,我发现 Babelmark 2 是一个有用的资源,值得尝试看看您正在使用的 markdown 编译器是否正在执行您希望它执行的操作。
这是 示例,在 David Jacquel 指出这个特定问题后,我使用 Babelmark 2 解决了这个问题。
我希望这对遇到同样问题但没有注意到这是一个 inline/block 元素问题的人有所帮助。
这是我的回答 here 的重新发布,我在其中使用部分内容来满足博客的所有图像需求。
正如其他人所说,图像是内联元素,Markdown 解析器会强制将它们包装在块级元素中。目前接受的答案是 hacky:它在你的降价中看起来很乱,不是 robust/extensible,而且不容易修改。我将 Middleman 用于我的博客,并为我的图像创建了一个部分,它可以完成我想让图像做的所有事情。我 assume/hope Jekyll 也有部分,这个答案虽然在语法上与 Jekyll 不同,但仍然与你相关。
请注意,如果图片链接不是以 "http://"、"https:/" 或“/”开头,我会在它们前面加上前缀。这是因为我对博客的图片有一个坚实的组织结构,并且在使用这个部分时更简单,我只需要图片名称而不需要其路径的其他部分。
这是部分内容:
partials/_image.erb
<%
#initialize local variables in case they were not included
caption ||= ""
alt ||= ""
classes ||= ""
#strip '.html' extension off article link to get name of folder
url = current_article.url
url_without_ext = url[0..url.length-6]
#determine if image has an exact link or belongs to "/images/blog/CURRENT_ARTICLE_NAME/"
prefix = src[0..6]
if prefix != "http://" and prefix != "https:/" and src[0] !="/" then
#image belongs to "/images/blog/CURRENT_ARTICLE_NAME/" - add prefix to src
src = "/images#{url_without_ext}/#{src}"
end
%>
<!-- Use Kramdown's 'nomarkdown' tag so that this figure is not wrapped in a 'p' tag in the blog pages that use this partial -->
{::nomarkdown}
<figure class="<%= classes %>">
<!-- Show the image and link to the full resolution on click-->
<a target="_blank" href="<%= src %>" >
<img src="<%= src %>" alt="<%= alt %>">
</a>
<figcaption><%= caption %></figcaption>
</figure>
{:/}
然后像这样调用这个部分
不会添加前缀:
<%= partial "partials/image.erb", locals: {
src: "/images/icons/tech/atom.svg",
alt: "Atom",
classes: "icon" } %>
将添加前缀:
<%= partial "partials/image.erb", locals: {
src: "my-lovely-dog.svg",
alt: "Dog",
caption: "Woof woof!",
classes: "icon" } %>
我保持这部分内容是最新的here(以防我add/edit其中任何一个)。
这是我最终使用的解决方案,基于 this response Kramdown 存储库上的一个问题。 (Kramdown 是 Jekyll 的 markdown 解析器):
在目录 _plugins
中创建一个文件,例如kramdown-image-parsing.rb
包含以下...
require 'kramdown/converter/html'
module StandaloneImages
def convert_p(el, indent)
return super unless el.children.size == 1 && (el.children.first.type == :img || (el.children.first.type == :html_element && el.children.first.value == "img"))
convert(el.children.first, indent)
end
end
Kramdown::Converter::Html.prepend StandaloneImages
嗨,太棒了!有效。
我观察到图像和其他非块元素的相同行为。
添加 css-class,如 handle-as-span
将创建一个选项,通过 [=] 将 display
属性 更改为 inline
24=].
{: .handle-as-span }
![Image Alt Tag](path/to/image)
生成的HTML
<p class="handle-as-span"><img src="path/to/image" alt="Image Alt Tag" /></p>
这里是CSS魔法
p.handle-as-span {
display: inline;
}