Rpubs のコンテンツで外部リンクを張ると, ページが表示されない問題がある. これは, Rpubs が外部リンクをフレーム内で表示するようになっているため, フレームを許可しないサイトの表示ができないためである1. よって <a> タグのうち, 外部サイトへのリンクを張るものにだけ新しいタブまたはウィンドウで開くように target='_blank' 属性を付けるというのが解決策の一つとなる.
なお, この方法は rmarkdown で使用する pandoc のバージョンが 2.11 以降であることを想定している.2 pandoc のバージョン確認方法は R Markdown クックブック 1.1 節を確認してほしい.
しかし, 手動で全てのリンクに書くのは面倒なので, フィルタを使い自動で処理する.
以下のような簡単な Lua フィルタを作成した. これを add-target-attr.lua として保存する.
function Link(elem)
if(elem.target:sub(1, 1) ~= '#') then
elem.attributes.target = '_blank'
elem.attributes.rel = 'external'
end
return elem
end
なお, ついでに rel ='external' を指定している. おそらく必須ではないが, メタ情報があったほうが行儀がいいかと思って追記した (SEO 関係の話は詳しくないのでわからない).
YAML メタデータの例は以下のようになる. 出力オプション pandoc_args でフィルタの指定をできることと, citeproc: no が重要である. ページ内部の相互参照を別タブで開くのはかえって使いづらいため, 動作確認を兼ねて相互参照の使用できる bookdown パッケージのフォーマットを使用している3.
output:
bookdown::html_document2:
pandoc_args:
- --citeproc
- --lua-filter=add-target-attr.lua
bibliography: package.bib
link-citations: yes
citeproc: no
文献リスト内にも外部サイトへのハイパーリンクが含まれることがある (DOIの参照とか) が, 文献リストの出力処理は通常フィルタより後に行われるため, このままでは文献情報内のハイパーリンクに属性を付与できない. よって, この処理の順番を操作する必要がある. citeproc: no はデフォルトの文献リスト出力処理を無効にする効果がある. その上で, pandoc_args に手動で指定することで処理の順番を変えている. なお, --citeproc 自体も pandoc フィルターである. しかし, この方法だと本文中の引用子のリンクも新しいタブで開いてしまうため, add-target-attr.lua ではリンクターゲット文字列の1文字目が # かどうかで判定している (もしかしたらもう少しスマートな方法があるかも).
もしも pandoc 本体が 2.11 より古い場合, --citeproc ではなく --filter pandoc-citeproc とすると動作するかもしれない.
セクションの参照: ここはセクション3.
脚注リンク4
文献引用: この文書は rmarkdown パッケージ (Allaire et al. 2021) で作成している.
\[ \begin{align} 1 + 1 & = 2 \tag{3.1} \end{align} \]
式 (3.1) を見よ.
図3.1を見よ.
plot(1:10)
Figure 3.1: 図の例
表3.1を見よ.
knitr::kable(head(mtcars), booktabs = T, caption = "表の例")
| mpg | cyl | disp | hp | drat | wt | qsec | vs | am | gear | carb | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Mazda RX4 | 21.0 | 6 | 160 | 110 | 3.90 | 2.620 | 16.46 | 0 | 1 | 4 | 4 |
| Mazda RX4 Wag | 21.0 | 6 | 160 | 110 | 3.90 | 2.875 | 17.02 | 0 | 1 | 4 | 4 |
| Datsun 710 | 22.8 | 4 | 108 | 93 | 3.85 | 2.320 | 18.61 | 1 | 1 | 4 | 1 |
| Hornet 4 Drive | 21.4 | 6 | 258 | 110 | 3.08 | 3.215 | 19.44 | 1 | 0 | 3 | 1 |
| Hornet Sportabout | 18.7 | 8 | 360 | 175 | 3.15 | 3.440 | 17.02 | 0 | 0 | 3 | 2 |
| Valiant | 18.1 | 6 | 225 | 105 | 2.76 | 3.460 | 20.22 | 1 | 0 | 3 | 1 |
http://rmarkdown.rstudio.com
<http://rmarkdown.rstudio.com>
<http://rmarkdown.rstudio.com>{hreflang='en-us'}
[RStudio](http://rmarkdown.rstudio.com)
[RStudio](http://rmarkdown.rstudio.com){test='value'}
[RStudio](http://rmarkdown.rstudio.com){id="id1" rel='external'}
https://support.rstudio.com/hc/en-us/articles/201105636-Using-external-links-in-RPubs↩︎
この辺は atusy 氏に助言をもらった. https://r-wakalang.slack.com/archives/C0ADVD13N/p1618752165074500↩︎
なお, ver. 0.22 時点の bookdown でサポートされている相互参照 (数式, セクションタイトル, 図表) は pandoc の変換後に処理されるのでこれらのハイパーリンクで新しいタブが開かれる心配はない.↩︎
脚注↩︎