你好,歡迎進入江蘇優(yōu)軟數(shù)字科技有限公司官網(wǎng)!
發(fā)布時間:2023-09-11
瀏覽次數(shù):0
本文長約4000字,建議20分鐘。
本文為您整理了2019年值得您關注的34個開源項目。
又一位“神奇”本科生出現(xiàn)!
在物理課上,我在整個課程中通過按鍵打下了 1,700 頁的筆記。
速度跟上老師的板書,每一個公式、圖表都完好無損。
療效如何? 請看右圖:
除了排版與課本較量外,還可以批注、搜索關鍵詞……
他的筆記發(fā)布到網(wǎng)上后,吸引了大量圍觀。
不到三天,相關推文點贊數(shù)就超過2000個,新聞峰會的層數(shù)也超過了200層。
甚至有網(wǎng)友評論:“你就是我們需要的英雄!”
他是怎么做到的呢? 秘密裝備是:LaTeX+Vim!
這位來自法國的小伙子對安利 Vim 文本編輯器特別感興趣。 他說:
為了在 LaTeX 中編寫物理公式,我選擇 Vim 編輯器。 它功能強大、用途廣泛且高度可擴展。 我將它用于任何基于文本的任務sublime text 3 函數(shù)跳轉(zhuǎn),無論是編寫代碼、編輯 LaTeX 還是寫作。 事實上,入門級的學習曲線極其陡峭,但只要掌握了基本的操作方法,你還是會欲罷不能。
讓我們來看看完成這一舉措的具體過程。 我們在最后附上了文章中提到的工具的下載地址。
快速入門教程
我們先來看看小弟的工作環(huán)境配置。
他使用Vim編輯LaTeX的場景如下:
左邊是Vim,右邊是pdf閱讀器,也有類似Vim的快捷鍵。
我使用的操作系統(tǒng)使用 bspwm 作為窗口管理器。 在Vim中,使用的LaTex插件是,它具有句型高亮、目錄查看、同步對象等功能。
之后使用vim-plug進行如下配置:
插頭'/'
letg:='乳膠'
令:=''
讓:=0
設置=1
letg:='abdmg'
最后兩行控制“隱藏”功能。 開啟此功能后,不僅文本中混合的LaTeX代碼(除了光標所在行之外)將被隱藏或替換為其他符號。
比如下面的動畫,[、]、$被隱藏之后,沒有它們的干擾,整個文檔會更容易閱讀。 該函數(shù)將使用 ∩ 代替 \\,用 ε 代替 \\in 等。
設置完成后,我們就來到了整個教程的精髓:
如何用LaTeX做筆記像老師在黑板上寫字一樣快?
這就是()發(fā)揮作用的地方。
片段! 碎片是什么?
片段是一小段可重復使用的文本,由其他文本觸發(fā)。
例如sublime text 3 函數(shù)跳轉(zhuǎn),如果您輸入sign,然后按Tab鍵,該短語將被手動擴展為簽名:
片段也可以是動態(tài)的:輸入“今天”并按 Tab 鍵,它將更改為當前日期。
當您在輸入框中按 Tab 時,會出現(xiàn)一個框,該框會隨著文本輸入而手動放大。
片段甚至可以嵌套在另一個片段中:
如何創(chuàng)建片段?使用
用于管理片段的插件配置如下:
插頭'/'
let g:UltiSnipsExpandTrigger = '' let g:UltiSnipsJumpForwardTrigger = ' ' let g:UltiSnipsJumpBackwardTrigger = ' '
標志片段的代碼如下:
snippet sign "Signature" Yours sincerely, Gilles Castel endsnippet
對于動態(tài)片段,您可以將代碼放在``之間,它將在片段展開時運行。 下面的反例是使用bash對當前日期進行低格式處理:date+%f。
snippet today "Date" `date +%F` endsnippet
您還可以在 !p... 代碼塊中使用它。 例如,前面的框片段中的代碼如下所示:
snippet box "Box" `!p snip.rv = '┌' + '─' * (len(t[1]) + 2) + '┐'` │ $1 │ `!p snip.rv = '└' + '─' * (len(t[1]) + 2) + '┘'` $0 endsnippet
該代碼塊將被變量 snip.rv 的值替換。 在此代碼塊中,您可以訪問代碼段的當前狀態(tài),例如t[1]包含第一個制表位,fn是當前文件名等。
乳膠片段
使用代碼片段編譯 LaTeX 比手動編譯要快得多。 非常復雜的作品可以幫助你節(jié)省大量時間,有效避免抑郁。
以下是一些特別有用且易于使用的片段:
環(huán)境
要插入環(huán)境,只需在行首輸入 beg 即可。 然后鍵入環(huán)境名稱,該名稱與 \\end{} 命令中使用的名稱相同。 按 T??ab 鍵會將光標置于新創(chuàng)建的環(huán)境中。
該片段的代碼如下:
求“開始{}/結(jié)束{}”bA
\\begin{$1} $0 \\end{$1} endsnippet
其中,b表示該片段只會在代碼行的開頭展開,A表示手動展開,即不需要按Tab鍵。 (通過按 Tab 和 Shift+Tab 可以跳轉(zhuǎn)到的位置)由 $1、$2、... 表示,最后一個由 $0 表示。
內(nèi)聯(lián)和物理顯示
在做物理筆記的過程中,最常用的兩個片段是mk和dm。
他們負責啟動物理模式。 第一個片段用于“內(nèi)聯(lián)物理”,第二個片段用于“顯示物理”。
一行代碼中的物理片段是“智能的”:它知道何時在 $ 符號之前直接鍵入短語,并且會手動添加一個空格。 但如果輸入非短語字符,則不會添加空格。 例如,在“$p$-value”的情況下,它看起來像這樣:
該片段的代碼如下:
MK“數(shù)學”wA
${1}1700頁數(shù)學筆記火了!全程敲代碼,教你上手LaTeX+Vim(附代碼)-今日頭條 !p if t[2] and t[2][0] not in [',', '.', '?', '-', ' ']: snip.rv = ' ' else: snip.rv = '' `$2 endsnippet第一行末尾的 w 表示片段將在短語邊界處展開,例如 , 不會展開,但 會展開。
顯示物理的片段更簡單、更方便; 有了它,您可能永遠不會忘記以句號結(jié)束多項式。
代碼:
dm“數(shù)學”wA
\\[ $1 .\\] $0 endsnippet大寫和上標
另一個有用的片段是下標。 這樣才能將a1改為a1,a_12改為a{12}。
此代碼片段的觸發(fā)器是使用正則表達式。 有兩種情況會擴展片段。 一種是輸入一個字符后跟一個數(shù)字,例如 [A-Za-z]\\d; 另一種是一個字符后跟兩個數(shù)字,例如 [A-Za-z]\\d\\d 。
'([A-Za-z])(\\d)'"自動"wrA
`!p snip.rv = match.group(1)`_`!p snip.rv = match.group(2)` endsnippet snippet '([A-Za-z])_(\\d\\d)' "auto subscript2" wrA `!p snip.rv = match.group(1)`_{`!p snip.rv = match.group(2)`} endsnippet當您使用括號將正則表達式的一部分括在組中時,例如 (\\d\\d),您可以使用它們通過 match.group(i) 來擴展片段。
至于上標,您可以使用 td,它也會將其更改為 ^{}。 然而,對于正方形、立方體和其他一些常見片段,可以使用專門的代碼片段,例如sr、cb等。
功效圖:
代碼:
snippet sr "^2" iA ^2 endsnippet snippet cb "^3" iA ^3 endsnippet snippet compl "complement" iA ^{c} endsnippet snippet td "superscript" iA ^{$1}$0 endsnippet分數(shù)
分數(shù)是使用最方便的片段。 它可以擴展如下:
/ / → frac {}{} 3 / → frac {3}{} 4 pi ^ 2 / → frac {4 pi ^ 2}{} (1 + 2 + 3) / → frac {1 + 2 + 3}{} (1 + (2 + 3) /)→(1 + frac {2 + 3}{}) (1 + (2 + 3)) / → frac {1 + (2 + 3)}{
第一個片段的代碼很簡單:
snippet // "Fraction" iA \\\\frac{$1}{$2}$0 endsnippet在第二個和第三個例子中,可以使用正則表達式來匹配3/、4ac/、6pi^2/、a2/等表達式。
'((\\d+)|(\\d*)(\\\\)?([A-Za-z]+)((\\^|_)(\\{\\d+\\}|\\d))*)/' ”“WRA
\\\\壓裂{`!psnip.rv=match.group(1)`}{$1}$0
看完上面的內(nèi)容,你可能會覺得正則表達式太難了。 沒關系,這里有一張圖,解釋得很直觀:
在第四個和第五個示例中,采用了不同的方法。 如果使用的正則表達式引擎無法解決問題,您可以:
priority 1000 snippet '^.*\\)/' "() Fraction" wrA `!p stripped = match.string[:-1] depth = 0 i = len(stripped) - 1 while True: if stripped[i] == ')': depth += 1 if stripped[i] == '(': depth -= 1 if depth == 0: break; i -= 1 snip.rv = stripped[0:i] + "\\\\frac{" + stripped[i+1:-1] + "}" `{$1}$0 endsnippet我想在這里分享的最后一篇關于分數(shù)的文章可以根據(jù)您的選擇在來世變成分數(shù)。
您可以選擇一些文本,然后按 Tab 鍵,繼續(xù)鍵入,然后再次按 Tab 鍵。
在代碼中,使用${}變量來表示所選的內(nèi)容。
/""iA
\\\\壓裂{${}}{$1}$0
同情和
另一個很酷但不常用的片段是使用 Sympy 來估計物理表達式。 例如,輸入sympy,然后按Tab,可以將其擴展為sympy|sympy。 如果輸入+并按Tab,則可以擴展到2。
片段代碼:
snippet sympy "sympy block " w sympy $1 sympy$0 endsnippet priority 10000 snippet 'sympy(.*)sympy' "evaluate sympy" wr `!pfrom sympy import * x, y, z, t = symbols('x y z t') k, m, n = symbols('k m n', integer=True) f, g, h = symbols('f g h', cls=Function) init_printing() snip.rv = eval('latex(' + match.group(1).replace('\\\\', '') \\ .replace('^', '**') \\ .replace('{', '(') \\ .replace('}', ')') + ')') ` endsnippet您還可以執(zhí)行類似的操作:
片段代碼:
priority 1000 snippet math "mathematica block" w math $1 math$0 endsnippet priority 10000 snippet 'math(.*)math' "evaluate mathematica" wr `!p import subprocess code = 'ToString[' + match.group(1) + ', TeXForm]' snip.rv = subprocess.check_output(['wolframscript', '-code', code]) ` endsnippet后綴片段
不僅如此,后綴片段也值得分享。 如phat→hat{p}和zbar→{z}。 類似的后綴向量還有v,.→vec{v}和v.,→vec{v}。 的順序 。 和 , 并不重要,因此您可以同時按下它們。
這種片段確實可以節(jié)省時間,而且可以按照老師在黑板上寫的順序來記憶。
請注意,bar 和 hat 前綴仍然有效,只需以較低的優(yōu)先級添加它們即可。
該片段的代碼是:
priority 10 snippet "bar" "bar" riA \\overline{$1}$0 endsnippet priority 100 snippet "([a-zA-Z])bar" "bar" riA \\overline{`!p snip.rv=match.group(1)`} endsnippetpriority 10 snippet "hat" "hat" riA \\hat{$1}$0 endsnippet priority 100 snippet "([a-zA-Z])hat" "hat" riA \\hat{`!p snip.rv=match.group(1)`} endsnippetsnippet "(\\\\?\\w+)(,\\.|\\.,)" "Vector postfix" riA \\vec{`!p snip.rv=match.group(1)`} endsnippet其他剪輯
據(jù)悉,我還有大約100個常用剪輯(文末附有下載地址),大部分都很簡單。 例如,輸入 !> 變?yōu)?\\,輸入 -> 變?yōu)?\\to 等。
fun 設為 f:\\R\\to\\R:,!> 設為 \\,-> 設為 \\to,cc 設為 \\。
lim 為\\lim{n\\to\\infty},sum 為\\sum{n=1}^{\\infty},ooo 為\\infty。
特定課程的一部分
不僅是一些常用的片段,還可以針對特定課程設置片段。 例如,在量子熱科學課程中,您可以設置一些有關bra/ket符號的片段。
→\\ket{a}
|ψ>→\\ket{\\psi}
→\\{a}
代碼:
snippet "\\<(.*?)\\|" "bra" riA \\bra{`!p snip.rv = match.group(1).replace('q', f'\\psi').replace('f', f'\\phi')`} endsnippet snippet "\\|(.*?)\\>" "ket" riA \\ket{`!p snip.rv = match.group(1).replace('q', f'\\psi').replace('f', f'\\phi')`} endsnippet snippet "(.*)\\\\bra{(.*?)}([^\\|]*?)\\>" "braket" riA `!p snip.rv = match.group(1)`\\braket{`!p snip.rv = match.group(2)`}{`!p snip.rv = match.group(3).replace('q', f'\\psi').replace('f', f'\\phi')`} endsnippet語境
編譯此類片段時要考慮的一件事是,“這些片段會與常用文本沖突嗎?”
例如,德語中包含 sr 的短語大約有 72 個,這意味著當輸入該單詞時,sr 將擴展為 ^2,并會出現(xiàn) di^。
此問題的解決方案是向代碼片段添加上下文。
通過使用 Vim 的句子突出顯示,您可以根據(jù)您使用的是物理還是文本來確定是否應該擴展片段。
global !p texMathZones = ['texMathZone'+x for x in ['A', 'AS', 'B', 'BS', 'C', 'CS', 'D', 'DS', 'E', 'ES', 'F', 'FS', 'G', 'GS', 'H', 'HS', 'I', 'IS', 'J', 'JS', 'K', 'KS', 'L', 'LS', 'DS', 'V', 'W', 'X', 'Y', 'Z']] texIgnoreMathZones = ['texMathText'] texMathZoneIds = vim.eval('map('+str(texMathZones)+", 'hlID(v:val)')") texIgnoreMathZoneIds = vim.eval('map('+str(texIgnoreMathZones)+", 'hlID(v:val)')") ignore = texIgnoreMathZoneIds[0] def math(): synstackids = vim.eval("synstack(line('.'), col('.') - (col('.')>=2 ? 1 : 0))") try: first = next( i for i in reversed(synstackids) if i in texIgnoreMathZoneIds or i in texMathZoneIds ) return first != ignore except StopIteration: return False endglobal現(xiàn)在,您可以將“math()”添加到您只想在物理上下文中擴展的片段。
context "math()" snippet sr "^2" iA ^2 endsnippet請注意,“數(shù)學背景”是一件微妙的事情。 有時您可以使用 \\text{...} 向物理環(huán)境添加一些文本。 在這些情況下,您不需要擴展片段。 并且,在以下情況下:\\[\\text{$...$}\\],它們可以被擴展。 這就是數(shù)學上下文的代碼有點復雜的原因。 下面的動畫說明了這種微妙之處。
不僅僅是上述的片段,你還可以根據(jù)自己的需要添加一些插件或者片段,以提高你的效率。
筆還是筆記本?
手寫 1700 頁的數(shù)學筆記不足以形容那個人。 他堪稱理工科學生中的“英雄”。
并非所有人都同意我所做的事情。 強大的高科技工具在傳統(tǒng)面前常常受到批評。
有網(wǎng)友覺得手寫比筆記本電腦打字更有印象,但要達到那家伙的熟練程度,估計需要幾年的 LaTeX 和 Vim 練習。
既然用筆更方便,為什么還要用筆記本來做筆記呢? 原因很簡單:字跡太帥了!
如果你連自己寫下的內(nèi)容都沒有閱讀的欲望,那你怎么準備課堂筆記呢? 至少筆記本上寫的布局是工整、順眼的。
盡管美國網(wǎng)友爭論不休,但在國外能完全拒絕這種方式的只有一個條件:筆記本電腦不準帶進課堂。
你怎么看待這件事?
工具門戶
Linux 和 Mac 系統(tǒng)都帶有 Vim。 用戶安裝的 Vim: 插件管理器: LaTeX 插件: 窗口平鋪管理器: 用于管理 Vim 片段的工具:
如果你不習慣 Vim,還有 Emacs、Atom、 等,它們都有 LaTeX 插件。 總有一個文本編輯器適合您。
LaTeX中常見的物理符號輸入方法:
如果你想熟悉更多的LaTeX使用方法,就需要系統(tǒng)的學習,定期的練習也是必不可少的。
博文鏈接:
如有侵權請聯(lián)系刪除!
Copyright ? 2023 江蘇優(yōu)軟數(shù)字科技有限公司 All Rights Reserved.正版sublime text、Codejock、IntelliJ IDEA、sketch、Mestrenova、DNAstar服務提供商
13262879759
微信二維碼