又出現(xiàn)一位“神仙”本科生!數(shù)學(xué)課上,全程鍵盤手打1700頁筆記。 速度緊追老師板書,公式、圖形一個不落。 效果?請看下圖: 不僅排版媲美教科書,而且還能夠批注,檢索關(guān)鍵詞…… 筆記被他Po到網(wǎng)上之后,便引來大量圍觀。 不到一天,相關(guān)推文就已經(jīng)有2000多贊,Hacker News論壇上蓋了200多樓。 甚至有網(wǎng)友評論稱:“你就是我們需要的英雄!” 他是怎么做到的呢?秘密武器就是:LaTeX+Vim! 這位來自歐洲的小哥非常強(qiáng)烈安利Vim文本編輯器,他說:
下面就讓我們看一下他完成這一壯舉的具體流程,文中提到的工具下載地址,我們都附在了最后。 快速上手教程我們先看看小哥的工作環(huán)境配置。 他用Vim編輯LaTeX的場景,就像下面這樣: 左邊是Vim,右邊是pdf閱讀器Zathura,它也有類似Vim的快捷鍵。 小哥用的操作系統(tǒng)是Ubuntu,使用bspwm作為窗口管理器。在Vim中,使用的LaTex插件是vimtex,它有語法高亮顯示、目錄視圖、同步對象等功能。 然后,使用vim-plug做如下配置: Plug 'lervag/vimtex' 最后兩行控制的是“隱藏”功能。開啟了這個功能,除了你光標(biāo)所在的那一行之外,文本里夾雜的LaTeX代碼就都會隱藏或者替換成其他符號。 比如說在下面動圖里,隱藏了[,],$之后,沒有了它們的干擾,整個文檔就更易讀。這個功能還會用∩替代\bigcap,∈替代\in等等。 設(shè)置完成,接下來就到了整個教程的精華所在: 用LaTeX記筆記,怎么才能像老師寫板書一樣快? 這就是片段(snippets)發(fā)揮作用地方了。 片段片段是什么? 片段是一小段可復(fù)用的文本,由其他文本觸發(fā)。 例如,輸入sign,再按下Tab鍵,這個單詞就會自動擴(kuò)展為一段簽名: 片段也可以是動態(tài)的:輸入today并按下Tab鍵,它就會變成當(dāng)前的日期。 而輸入box按Tab,就會出現(xiàn)一個框,還會隨著輸入文字自動變大。 片段,甚至可以嵌套在另一個片段里用: 怎么創(chuàng)建片段?使用UltiSnips 管理片段的插件UltiSnips,小哥是這樣配置的:
關(guān)于sign片段的代碼如下: snippet sign 'Signature' 對于動態(tài)的片段,你可以將代碼放在``之間, 在片段擴(kuò)展的時候,就會運(yùn)行。下面的例子,就是用 bash 格式化當(dāng)前日期:date+%f。
你也可以在!p ...代碼塊里使用Python,比如上面box片段的代碼就是這樣的: snippet box 'Box' 這些 Python 代碼塊將被變量 snip.rv 的值替換。在這些代碼塊中,你可以訪問代碼段的當(dāng)前狀態(tài),例如t[1]包含第一個制表位,fn是當(dāng)前文件名等等。 LaTex片段使用片段編寫LaTeX,要比純手工編寫快得多。特別有些非常復(fù)雜的片段能幫你大大節(jié)約時間,有效防止抓狂。 下面是一些非常有用且容易上手的片段: 環(huán)境 想插入一個環(huán)境,只需要在一行的開頭輸入beg。然后鍵入環(huán)境的名稱,這個名稱在\end{}命令中也是一樣。按下Tab鍵,就能夠?qū)⒐鈽?biāo)放置在新創(chuàng)建的環(huán)境中。 這個片段的代碼如下:
其中,b表示這個片段只會在代碼行的開頭展開,A代表自動展開,也就是說不用按Tab鍵了。制表位(Tab stop)——也就是你可以通過按Tab 和Shift+Tab跳轉(zhuǎn)到的位置——用$1、 $2、......來表示,最后一個用$0。 行內(nèi)和數(shù)學(xué)顯示 在記數(shù)學(xué)筆記的過程中,最常用的兩個片段是mk和dm。 它們負(fù)責(zé)啟動數(shù)學(xué)模式。第一個片段用于“行內(nèi)數(shù)學(xué)”,第二個用于“顯示數(shù)學(xué)”。 代碼行內(nèi)的數(shù)學(xué)片段是“智能的”:它知道什么時候在$符號后面直接輸入一個單詞,它會自動加個空格。但如果輸入一個非單詞的字符,它就不會添加空格了,比如在““$p$-value”情況下,是這樣的: 這個片段的代碼如下: snippet mk 'Math' wA 第一行末尾的w,意味著這個片段會在單詞邊界處擴(kuò)展,例如,hellomk不會擴(kuò)展,但是hello mk會。 用于顯示數(shù)學(xué)的片段更簡單,也更加方便;有了它,你可能再也不會忘記用句號結(jié)束方程了。 代碼:
小寫和上標(biāo) 另一個很有用的片段就是下標(biāo)。能夠把a(bǔ)1改為a1,把a(bǔ)_12改為a{12}。 這個片段的觸發(fā)器是使用正則表達(dá)式。有兩種情況會擴(kuò)展片段。一是你鍵入一個字符,后面跟著一個數(shù)字,比如[A-Za-z]\d;另一種是,一個字符后面有并跟著兩個數(shù)字,比如[A-Za-z]\d\d。 snippet '([A-Za-z])(\d)' 'auto subscript' wrA 當(dāng)你使用括號將正則表達(dá)式的一部分裝在一個組中時,例如(\d\d),你可以在 Python中通過match.group (i)來使用它們擴(kuò)展片段。 至于上標(biāo),可以使用td,它就會變成^{}。然而,對于平方、立方和其他一些常見的片段,可以使用專門的代碼片段,如 sr、cb等等。 效果圖: 代碼:
分?jǐn)?shù) 分?jǐn)?shù)是一個用起來最方便的一個片段,擴(kuò)展的形式如下: / / → frac {}{} 第一個片段的代碼很簡單: snippet // 'Fraction' iA 第二個和第三個示例,可以使用正則表達(dá)式來匹配3/、4ac/、6pi^2/、a2/等表達(dá)式。
看了上邊這些,你可能覺得正則表達(dá)式太難了。沒關(guān)系,下面有一個解釋得非常直觀的圖表: 在第四和第五種示例下,要換一種方法。使用UltiSnips的正則表達(dá)式引擎解決不了的,Python可以: priority 1000 這里最后要分享的關(guān)于分?jǐn)?shù)的片段,能根據(jù)你的選擇,來生成一個分?jǐn)?shù)。 你可以先選擇一些文本,然后按Tab鍵,繼續(xù)輸入、然后再按Tab鍵。 代碼中,使用${VISUAL}變量來表示所選的內(nèi)容。
Sympy和Mathematica 還有一個很酷但用得不多的片段,是使用Sympy來計(jì)算數(shù)學(xué)表達(dá)式。例如,輸入sympy,然后按下Tab,可以擴(kuò)展為sympy | sympy,輸入sympy 1 + 1 sympy,按下Tab,可以擴(kuò)展為2。 片段代碼: snippet sympy 'sympy block ' w 用Mathematica,也可以做類似的事情: 片段代碼:
后綴片段 除了上邊這些之外,后綴片段也很值得分享。例如phat→hat{p}和zbar→overline{z}。還有類似的后綴向量,例如v,.→vec{v}和v.,→vec{v}。.和,的順序沒關(guān)系,所以可以同時按下它們兩個。 這些片段真的可以節(jié)省時間,可以按照和老師寫板書一樣的順序來記。 注意,bar和hat前綴也依然可以用,只要以較低的優(yōu)先級添加它們就行。 這些片段的代碼是: priority 10
snippet '(\\?\w+)(,\.|\.,)' 'Vector postfix' riA 其他片段 此外,小哥還有大約100個常用的片段(下載地址附于文末),大多數(shù)都很簡單。比如,輸入!>變成\mapsto,輸入->變成\to等等。 fun變成f: \R \to \R :,!>變成\mapsto,->變成\to,cc變成\subset。 lim變成\lim{n \to \infty},sum變成\sum{n = 1}^{\infty},ooo變成\infty。 特定課程的片段 除了一些常用的片段,也可以針對特定的課程設(shè)定片段。例如,在量子力學(xué)這門課中,可以設(shè)定一些關(guān)于bra/ket符號的片段。 <a|→\bra{a} <ψ|→\bra{\psi}='' a=''>→\ket{a} 代碼:
上下文 在編寫這些片段時需要考慮的一件事是,“這些片段會與長與常用的文本沖突嗎?” 例如,在英語中大約有72個單詞包含sr,這意味著當(dāng)輸入disregard這個詞時,sr會擴(kuò)展到^2,出現(xiàn)一個di^2egard。 這個問題的解決方案是,為代碼片段添加上下文。 通過使用 Vim 的語法突出顯示,可以確定UltiSnips是否應(yīng)該擴(kuò)展片段,這取決于你使用的是數(shù)學(xué)還是文本。
現(xiàn)在,你可以將context “math()”添加到只希望在數(shù)學(xué)上下文中展開的片段中。 context 'math()' 請注意,“數(shù)學(xué)上下文”是一個微妙的東西。 有時你可以使用\text{…}在數(shù)學(xué)環(huán)境中添加一些文本。在這種情況下,你不需要擴(kuò)展片段。但是,在以下情況下: \[ \text{$...$} \],它們可以擴(kuò)展。 這就是為什么math上下文的代碼有點(diǎn)復(fù)雜。下面的動圖說明了這些微妙之處。 除了上述一些片段,你也可以根據(jù)自己的需要,來自己添加一些插件或者片段,來提高自己的效率。 用筆還是用電腦?純手打記下1700頁數(shù)學(xué)筆記,awesome都不夠形容了這位小哥了,堪稱理工科學(xué)生中的“英雄”。 并非所有人都贊同小哥的做法,強(qiáng)大的高科技工具在傳統(tǒng)面前常常會被質(zhì)疑。 有部分網(wǎng)友認(rèn)為手寫比電腦打字印象深刻,而且要達(dá)到這位小哥的熟練程度,恐怕LaTeX和Vim得練習(xí)好幾年。 既然用筆更方便,為什么還要用電腦來記筆記呢?原因很簡單:字太丑! 如果記下來的內(nèi)容連自己看的欲望都沒有,怎么復(fù)習(xí)課堂筆記呢?至少用電腦記下來的排版工整,讓人賞心悅目。 雖然國外網(wǎng)友爭論不休,但在國內(nèi)只要一個條件就可以徹底否決這個方法:不讓帶電腦進(jìn)課堂。 對此,你怎么看? 工具傳送門:Linux和Mac系統(tǒng)自帶Vim。 Windows用戶安裝Vim: Vim插件管理: Vim上的LaTeX插件: 窗口平鋪管理器: 管理Vim片段工具: 如果你用不慣Vim,還有Emacs、Atom、VS Code、Sublime,它們都有LaTeX插件,總有一款文本編輯器適合你。 LaTeX常見數(shù)學(xué)符號輸入方法: 想要熟悉更多的LaTeX使用方法,就需要系統(tǒng)地學(xué)習(xí),平時多加練習(xí)也必不可少。 博文鏈接: https://v/post/lecture-notes-1/ 作者系網(wǎng)易新聞·網(wǎng)易號“各有態(tài)度”簽約作者 — 完 — 訂閱AI內(nèi)參,獲取AI行業(yè)資訊 加入社群 量子位AI社群開始招募啦,量子位社群分:AI討論群、AI+行業(yè)群、AI技術(shù)群; |
|