Markdown大家都比較熟悉了,特別是在寫程式檔案和寫數學公式時,擁有著無與倫比的便利性。同時在前面的一篇部落格中我們介紹了使用RMarkdown去寫Latex Beamer演示檔案的方法,RMarkdown是由謝益輝等大神對Markdown、Latex和R語言等常用高階程式語言的結合,使得我們可以同時用這幾種語言去構造一個Beamer風格的演示檔案。本文主要介紹一些比較偏門的、但是經常可能用到的RMarkdown進階操作。
在RMarkdown標題處,我們可以自己寫一個普通的Latex檔案mysty.tex
如下:
\usepackage{graphicx}
\usepackage{animate}
\usepackage{subfigure}
\lstset{
breaklines=true,
basicstyle=\ttfamily
}
然後在RMarkdown的標題處引入該tex檔案:
---
title: "Your Title"
author: "Dechin"
date: "`2022.10.15`"
output:
beamer_presentation:
pandoc_args: --listings
includes:
in_header: mysty.tex
toc: true
number_sections: yes
slide_level: 2
theme: Dresden
colortheme: seagull
---
注意這裡我們匯入了latex的動圖animate模組和子圖subfigure模組,都是後面要用到的功能。
# Test1
## Test2
\begin{figure}
\centerline{\includegraphics[width=1.0\textwidth]{./1.png}}
\end{figure}
這裡我們使用的是Latex的圖片匯入方法,預設居中,可以通過調整上述程式碼中的width
引數來控制圖片列印的大小。
從來沒想過在Markdown裡面還可以加註釋,但事實上確實可以操作的,可以在需要註釋的行前加上[comment]:
即可:
[comment]:# Test1
[comment]:## Test2
[comment]:\begin{figure}
[comment]:\centerline{\includegraphics[width=1.0\textwidth]{./1.png}}
[comment]:\end{figure}
雖然編譯過程中會出現一系列的告警,但是我們可以不管。
有時候我們的數學公式可能會比較長,這樣在演示檔案中可能會被自動截斷:
# Test1
## Test2
$$
[q_1, q_2]=q_1q_2-q_2q_1=(s_1s_2-x_1x_2-y_1y_2-z_1z_2)+i(s_1x_2+s_2x_1+y_1z_2-y_2z_1)+j(s_1y_2+s_2y_1+x_2z_1-x_1z_2)+k(s_1z_2+s_2z_1+x_1y_2-x_2y_1)-(s_2s_1-x_2x_1-y_2y_1-z_2z_1)-i(s_2x_1+s_1x_2+y_2z_1-y_1z_2)-j(s_2y_1+s_1y_2+x_1z_2-x_2z_1)-k(s_2z_1+s_1z_2+x_2y_1-x_1y_2)=2i(y_1z_2-y_2z_1)+2j(x_2z_1-x_1z_2)+2k(x_1y_2-x_2y_1)\neq0
$$
此時編譯出來的演示檔案顯示效果非常不佳:
這個時候可以選擇使用行內公式,這樣可以自動換行,很大概率是可以完整顯示出來的:
# Test1
## Test2
$[q_1, q_2]=q_1q_2-q_2q_1=(s_1s_2-x_1x_2-y_1y_2-z_1z_2)+i(s_1x_2+s_2x_1+y_1z_2-y_2z_1)+j(s_1y_2+s_2y_1+x_2z_1-x_1z_2)+k(s_1z_2+s_2z_1+x_1y_2-x_2y_1)-(s_2s_1-x_2x_1-y_2y_1-z_2z_1)-i(s_2x_1+s_1x_2+y_2z_1-y_1z_2)-j(s_2y_1+s_1y_2+x_1z_2-x_2z_1)-k(s_2z_1+s_1z_2+x_2y_1-x_1y_2)=2i(y_1z_2-y_2z_1)+2j(x_2z_1-x_1z_2)+2k(x_1y_2-x_2y_1)\neq0$
行內公式的顯示效果如下所示:
這樣一來,我們就可以在演示檔案上面看到完整的公式。
續上一個章節內容,在公式使用行內顯示之後,我們發現公式此時是居左顯示的,而我們如果想要居中,在前面加一個\center
標籤即可:
# Test1
## Test2
\center $[q_1, q_2]=q_1q_2-q_2q_1=(s_1s_2-x_1x_2-y_1y_2-z_1z_2)+i(s_1x_2+s_2x_1+y_1z_2-y_2z_1)+j(s_1y_2+s_2y_1+x_2z_1-x_1z_2)+k(s_1z_2+s_2z_1+x_1y_2-x_2y_1)-(s_2s_1-x_2x_1-y_2y_1-z_2z_1)-i(s_2x_1+s_1x_2+y_2z_1-y_1z_2)-j(s_2y_1+s_1y_2+x_1z_2-x_2z_1)-k(s_2z_1+s_1z_2+x_2y_1-x_1y_2)=2i(y_1z_2-y_2z_1)+2j(x_2z_1-x_1z_2)+2k(x_1y_2-x_2y_1)\neq0$
居中顯示效果如下:
在行內公式顯示下,依然存在公式過長的問題,此時我們可以借鑑參考連結1中的方法,在公式前面再加一個\tiny
的標籤:
# Test1
## Test2
\tiny \center $[q_1, q_2]=q_1q_2-q_2q_1=(s_1s_2-x_1x_2-y_1y_2-z_1z_2)+i(s_1x_2+s_2x_1+y_1z_2-y_2z_1)+j(s_1y_2+s_2y_1+x_2z_1-x_1z_2)+k(s_1z_2+s_2z_1+x_1y_2-x_2y_1)-(s_2s_1-x_2x_1-y_2y_1-z_2z_1)-i(s_2x_1+s_1x_2+y_2z_1-y_1z_2)-j(s_2y_1+s_1y_2+x_1z_2-x_2z_1)-k(s_2z_1+s_1z_2+x_2y_1-x_1y_2)=2i(y_1z_2-y_2z_1)+2j(x_2z_1-x_1z_2)+2k(x_1y_2-x_2y_1)\neq0$
縮小後的公式顯示效果如下:
還有眾多的大小範圍可調(圖片來自於參考連結1):
在前面一篇部落格中,我們介紹了在Latex生成PDF時我們也可以展示一些動態過程。這需要我們先用Python把一個動態圖切割成很多個圖片,放在一個指定資料夾下,然後呼叫Latex的animate宏包來構建這個動圖。
# Test1
## Test2
\center \animategraphics[width=0.45\linewidth, autoplay=True, loop, controls]{24}{gif-2/}{0}{65}
這裡0
和65
這兩個參數列示切割圖片的第一張的數位編號和最後一張的數位編號,加了loop
引數之後會自動迴圈播放,同時我們還可以加上controls
這個控制元件,用於控制動態圖的進退等,非常的靈活方便。顯示效果如下:
我們可以用subgraph
宏包的功能匯入多張圖片並排,這個預設都是在同一列顯示的,但是子圖就可以允許我們多張圖片在同一行顯示:
# Test1
## Test2
\begin{figure}
\centering
\subfigure[]{\includegraphics[width=1.2in]{./13.png}}
\subfigure[]{\includegraphics[width=2.8in]{./14.png}}
\end{figure}
顯示效果如下:
本文通過幾個實際案例,介紹了RMarkdown在寫Latex Beamer演示檔案中有可能用到的一些進階的操作。RMarkdown不僅僅繼承了Markdown語言的簡潔便利,還允許我們仍然使用Latex中的一些高階操作,甚至我們可以在生成的Beamer演示檔案PDF中去展示一些動態的效果圖,這是通過PPT等工具去生成PDF所不具備的功能(有可能有,只是我不瞭解,這裡使用Latex Beamer來寫演示檔案僅僅是個人偏好)。
本文首發連結為:https://www.cnblogs.com/dechinphy/p/advanced-rmarkdown.html
作者ID:DechinPhy
更多原著文章請參考:https://www.cnblogs.com/dechinphy/
打賞專用連結:https://www.cnblogs.com/dechinphy/gallery/image/379634.html
騰訊雲專欄同步:https://cloud.tencent.com/developer/column/91958
CSDN同步連結:https://blog.csdn.net/baidu_37157624?spm=1008.2028.3001.5343
51CTO同步連結:https://blog.51cto.com/u_15561675