国产精品高清一区二区三区不卡-国产精品一区二区三区免费视频-日韩免费高清一级毛片-亚洲欧美一区二区三区国产精品-日韩欧美一区二区三区不卡视频-亚欧免费视频一区二区三区-亚洲欧美日韩一区成人-欧美日韩视频综合一区无弹窗-精品日韩在线视频一区二区三区-国内精品视频一区二区三区

你好,歡迎進入江蘇優(yōu)軟數(shù)字科技有限公司官網(wǎng)!

誠信、勤奮、創(chuàng)新、卓越

友好定價、專業(yè)客服支持、正版軟件一站式服務提供

13262879759

工作日:9:00-22:00

1700頁數(shù)學筆記火了!全程敲代碼,教你上手LaTeX+Vim(附代碼)

發(fā)布時間:2023-09-11

瀏覽次數(shù):0

本文長約4000字,建議20分鐘。

本文為您整理了2019年值得您關注的34個開源項目。

又一位“神奇”本科生出現(xiàn)!

在物理課上,我在整個課程中通過按鍵打下了 1,700 頁的筆記。

速度跟上老師的板書,每一個公式、圖表都完好無損。

療效如何? 請看右圖:

sublime text 3 函數(shù)跳轉(zhuǎn)

除了排版與課本較量外,還可以批注、搜索關鍵詞……

他的筆記發(fā)布到網(wǎng)上后,吸引了大量圍觀。

不到三天,相關推文點贊數(shù)就超過2000個,新聞峰會的層數(shù)也超過了200層。

甚至有網(wǎng)友評論:“你就是我們需要的英雄!”

他是怎么做到的呢? 秘密裝備是:LaTeX+Vim!

sublime text 3 函數(shù)跳轉(zhuǎn)

這位來自法國的小伙子對安利 Vim 文本編輯器特別感興趣。 他說:

為了在 LaTeX 中編寫物理公式,我選擇 Vim 編輯器。 它功能強大、用途廣泛且高度可擴展。 我將它用于任何基于文本的任務sublime text 3 函數(shù)跳轉(zhuǎn),無論是編寫代碼、編輯 LaTeX 還是寫作。 事實上,入門級的學習曲線極其陡峭,但只要掌握了基本的操作方法,你還是會欲罷不能。

讓我們來看看完成這一舉措的具體過程。 我們在最后附上了文章中提到的工具的下載地址。

快速入門教程

我們先來看看小弟的工作環(huán)境配置。

他使用Vim編輯LaTeX的場景如下:

sublime text 3 函數(shù)跳轉(zhuǎn)

左邊是Vim,右邊是pdf閱讀器,也有類似Vim的快捷鍵。

我使用的操作系統(tǒng)使用 bspwm 作為窗口管理器。 在Vim中,使用的LaTex插件是,它具有句型高亮、目錄查看、同步對象等功能。

之后使用vim-plug進行如下配置:

插頭'/'

letg:='乳膠'

令:=''

讓:=0

設置=1

letg:='abdmg'

最后兩行控制“隱藏”功能。 開啟此功能后,不僅文本中混合的LaTeX代碼(除了光標所在行之外)將被隱藏或替換為其他符號。

比如下面的動畫,[、]、$被隱藏之后,沒有它們的干擾,整個文檔會更容易閱讀。 該函數(shù)將使用 ∩ 代替 \\,用 ε 代替 \\in 等。

sublime text 3 函數(shù)跳轉(zhuǎn)

設置完成后,我們就來到了整個教程的精髓:

如何用LaTeX做筆記像老師在黑板上寫字一樣快?

這就是()發(fā)揮作用的地方。

片段! 碎片是什么?

片段是一小段可重復使用的文本,由其他文本觸發(fā)。

例如sublime text 3 函數(shù)跳轉(zhuǎn),如果您輸入sign,然后按Tab鍵,該短語將被手動擴展為簽名:

sublime text 3 函數(shù)跳轉(zhuǎn)

片段也可以是動態(tài)的:輸入“今天”并按 Tab 鍵,它將更改為當前日期。

sublime text 3 函數(shù)跳轉(zhuǎn)

當您在輸入框中按 Tab 時,會出現(xiàn)一個框,該框會隨著文本輸入而手動放大。

sublime text 3 函數(shù)跳轉(zhuǎn)

片段甚至可以嵌套在另一個片段中:

sublime text 3 函數(shù)跳轉(zhuǎ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)境中。

sublime text 3 函數(shù)跳轉(zhuǎ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)物理”,第二個片段用于“顯示物理”。

sublime text 3 函數(shù)跳轉(zhuǎn)

一行代碼中的物理片段是“智能的”:它知道何時在 $ 符號之前直接鍵入短語,并且會手動添加一個空格。 但如果輸入非短語字符,則不會添加空格。 例如,在“$p$-value”的情況下,它看起來像這樣:

sublime text 3 函數(shù)跳轉(zhuǎn)

該片段的代碼如下:

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é)束多項式。

sublime text 3 函數(shù)跳轉(zhuǎn)

代碼:

dm“數(shù)學”wA

\\[
$1
.\\] $0
endsnippet

大寫和上標

另一個有用的片段是下標。 這樣才能將a1改為a1,a_12改為a{12}。

sublime text 3 函數(shù)跳轉(zhuǎn)

此代碼片段的觸發(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等。

功效圖:

sublime text 3 函數(shù)跳轉(zhuǎn)

代碼:

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)}{

sublime text 3 函數(shù)跳轉(zhuǎn)

第一個片段的代碼很簡單:

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)容,你可能會覺得正則表達式太難了。 沒關系,這里有一張圖,解釋得很直觀:

sublime text 3 函數(shù)跳轉(zhuǎn)

在第四個和第五個示例中,采用了不同的方法。 如果使用的正則表達式引擎無法解決問題,您可以:

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 鍵。

sublime text 3 函數(shù)跳轉(zhuǎn)

在代碼中,使用${}變量來表示所選的內(nèi)容。

/""iA

\\\\壓裂{${}}{$1}$0

同情和

另一個很酷但不常用的片段是使用 Sympy 來估計物理表達式。 例如,輸入sympy,然后按Tab,可以將其擴展為sympy|sympy。 如果輸入+并按Tab,則可以擴展到2。

sublime text 3 函數(shù)跳轉(zhuǎn)

片段代碼:

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í)行類似的操作:

sublime text 3 函數(shù)跳轉(zhuǎn)

片段代碼:

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}。 的順序 。 和 , 并不重要,因此您可以同時按下它們。

sublime text 3 函數(shù)跳轉(zhuǎn)

這種片段確實可以節(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)`}
endsnippet

priority 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)`}
endsnippet

snippet "(\\\\?\\w+)(,\\.|\\.,)" "Vector postfix" riA
\\vec{`!p snip.rv=match.group(1)`}
endsnippet 

其他剪輯

據(jù)悉,我還有大約100個常用剪輯(文末附有下載地址),大部分都很簡單。 例如,輸入 !> 變?yōu)?\\,輸入 -> 變?yōu)?\\to 等。

sublime text 3 函數(shù)跳轉(zhuǎn)

fun 設為 f:\\R\\to\\R:,!> 設為 \\,-> 設為 \\to,cc 設為 \\。

sublime text 3 函數(shù)跳轉(zhuǎn)

lim 為\\lim{n\\to\\infty},sum 為\\sum{n=1}^{\\infty},ooo 為\\infty。

sublime text 3 函數(shù)跳轉(zhuǎn)

sublime text 3 函數(shù)跳轉(zhuǎn)

特定課程的一部分

不僅是一些常用的片段,還可以針對特定課程設置片段。 例如,在量子熱科學課程中,您可以設置一些有關bra/ket符號的片段。

→\\ket{a}

|ψ>→\\ket{\\psi}

→\\{a}

sublime text 3 函數(shù)跳轉(zhuǎn)

代碼:

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ù)學上下文的代碼有點復雜的原因。 下面的動畫說明了這種微妙之處。

sublime text 3 函數(shù)跳轉(zhuǎn)

不僅僅是上述的片段,你還可以根據(jù)自己的需要添加一些插件或者片段,以提高你的效率。

筆還是筆記本?

手寫 1700 頁的數(shù)學筆記不足以形容那個人。 他堪稱理工科學生中的“英雄”。

sublime text 3 函數(shù)跳轉(zhuǎn)

并非所有人都同意我所做的事情。 強大的高科技工具在傳統(tǒng)面前常常受到批評。

有網(wǎng)友覺得手寫比筆記本電腦打字更有印象,但要達到那家伙的熟練程度,估計需要幾年的 LaTeX 和 Vim 練習。

既然用筆更方便,為什么還要用筆記本來做筆記呢? 原因很簡單:字跡太帥了!

sublime text 3 函數(shù)跳轉(zhuǎn)

如果你連自己寫下的內(nèi)容都沒有閱讀的欲望,那你怎么準備課堂筆記呢? 至少筆記本上寫的布局是工整、順眼的。

盡管美國網(wǎng)友爭論不休,但在國外能完全拒絕這種方式的只有一個條件:筆記本電腦不準帶進課堂。

你怎么看待這件事?

工具門戶

Linux 和 Mac 系統(tǒng)都帶有 Vim。 用戶安裝的 Vim: 插件管理器: LaTeX 插件: 窗口平鋪管理器: 用于管理 Vim 片段的工具:

如果你不習慣 Vim,還有 Emacs、Atom、 等,它們都有 LaTeX 插件。 總有一個文本編輯器適合您。

LaTeX中常見的物理符號輸入方法:

如果你想熟悉更多的LaTeX使用方法,就需要系統(tǒng)的學習,定期的練習也是必不可少的。

博文鏈接:

如有侵權請聯(lián)系刪除!

13262879759

微信二維碼