有没有办法在Markdown中创建一个在新窗口中打开的链接?如果不是,您建议使用什么语法来完成此操作?我将把它添加到我使用的markdown编译器中。我认为这应该是一个选择。


当前回答

在我的项目中,我这样做,它工作得很好:

[Link](https://example.org/ "title" target="_blank")

Link

但并非所有解析器都允许这样做。

其他回答

您可以使用{[attr]="[prop]"}添加任何属性

例如[谷歌](http://www.google.com){target="_blank"}

一个全局解决方案是放置<base target="_blank"> 到页面的<head>元素中。这有效地将默认目标添加到每个锚元素。我使用markdown在我的基于wordpress的网站上创建内容,我的主题定制器将允许我将该代码注入到每个页面的顶部。如果您的主题不能做到这一点,可以使用插件

所以,这不是完全正确的,你不能添加链接属性Markdown URL。要添加属性,请检查正在使用的底层markdown解析器及其扩展。

特别是,pandoc有一个扩展来启用link_attributes,它允许在链接中进行标记。如。

[Hello, world!](http://example.com/){target="_blank"}

对于那些来自R的(例如使用rmarkdown, bookdown, blogdown等等),这是你想要的语法。 对于那些不使用R的用户,你可能需要在调用pandoc时使用+link_attributes来启用扩展

注意:这与kramdown解析器的支持不同,后者是上面接受的答案之一。特别要注意的是,kramdown与pandoc不同,因为它需要一个冒号——:——在花括号的开头——{},例如。

[link](http://example.com){:hreflang="de"}

特别是:

# Pandoc
{ attribute1="value1" attribute2="value2"}

# Kramdown
{: attribute1="value1" attribute2="value2"}
 ^
 ^ Colon

如果有人正在寻找一个全局rmarkdown (pandoc)解决方案。

使用Pandoc Lua过滤器

你可以编写自己的Pandoc Lua过滤器,将target="_blank"添加到所有链接:

编写一个Pandoc Lua过滤器,例如links.lua

function Link(element)

    if 
        string.sub(element.target, 1, 1) ~= "#"
    then
        element.attributes.target = "_blank"
    end
    return element

end

然后更新你的_output.yml

bookdown::gitbook:
  pandoc_args:
    - --lua-filter=links.lua

在Header中注入<base target="_blank">

另一种解决方案是使用includes选项在HTML头部部分注入<base target="_blank">:

创建一个新的HTML文件,例如links.html

<base target="_blank">

然后更新你的_output.yml

bookdown::gitbook:
  includes:
    in_header: links.html

注意:此解决方案还可能为哈希(#)指针/ url打开新选项卡。我还没有用这样的url测试这个解决方案。

仅对外部链接自动,使用GNU sed & make

如果有人想系统地为所有外部链接做这件事,CSS是没有选择的。然而,一旦Markdown创建了(X)HTML,就可以运行下面的sed命令:

sed -i 's|href="http|target="_blank" href="http|g' index.html

通过将上述sed命令添加到makefile中,可以进一步实现自动化。有关详细信息,请参阅GNU make或在我的网站上查看我是如何做的。