1700 sayfalık matematik notları yanıyor! Kodu baştan sona çalın, size LaTeX + Vim ile başlamayı öğretin (kod ekli)

Bu makale, AI New Media Qubit'in (genel numara ID: qbitai) yetkisi altında yeniden basılmıştır. Yeniden basmak için lütfen kaynak ile iletişime geçin.

Bu makale Yaklaşık 4000 kelime, 20 dakika önerilir .

Bu makale 2019'da sizin için en önemli 34 Python açık kaynak projesini organize ediyor.

Bir "peri" lisans öğrencisi daha ortaya çıktı!

Matematik dersinde, klavyeci kurs boyunca 1.700 sayfa not yazdı.

Hız, öğretmenin yazı tahtası yazısını yakından takip ediyor ve formüller ve grafikler kaybolmuyor.

etki? Lütfen aşağıdaki resme bakın:

Düzen sadece ders kitaplarına benzemekle kalmaz, aynı zamanda açıklama eklenebilir ve anahtar kelimeler aranabilir ...

Notlar onun tarafından çevrimiçi olarak yayınlandıktan sonra, pek çok izleyicinin ilgisini çekti.

Bir günden kısa bir sürede, ilgili tweetler 2.000'den fazla beğeni aldı ve Hacker News forumunun 200'den fazla katı vardı.

Hatta bazı netizenler şöyle dedi: "İhtiyacımız olan kahraman sensin!"

Bunu nasıl yaptı? Gizli silah: LaTeX + Vim!

Avrupalı bu küçük kardeş, Amway Vim metin editörü konusunda çok güçlü, dedi ki:

LaTeX'te matematiksel formüller yazmak için Vim editörü seçiyorum. Güçlü, çok yönlü ve genişletilebilir. Tüm metin tabanlı görevler, kod yazma, LaTeX düzenleme ve markdown yazma için kullanıyorum. Giriş aşamasındaki öğrenme eğrisi çok dik olsa da, temel işlem yöntemlerinde ustalaştığınız sürece duramazsınız.

Gelin, bu başarısını gerçekleştirme sürecine bir göz atalım.Makalede bahsedilen aracın indirme adresi sonuna eklenmiştir.

Hızlı başlangıç eğitimi

Kardeşimin çalışma ortamının konfigürasyonuna bir bakalım.

LaTeX sahnesini aşağıdaki gibi düzenlemek için Vim'i kullanır:

Solda Vim, sağda ise Vim'e benzer kısayol tuşlarına sahip pdf okuyucu Zathura var.

Küçük kardeşin kullandığı işletim sistemi Ubuntu'dur ve pencere yöneticisi olarak bspwm kullanılır. Vim'de kullanılan LaTeX eklentisi, sözdizimi vurgulama, dizin görünümü ve senkronizasyon nesneleri gibi işlevlere sahip olan vimtex'tir.

Ardından, aşağıdaki yapılandırmayı yapmak için vim-plug kullanın:

Plug'lervag / vimtex '

let g: tex_flavor = 'lateks'

let g: vimtex_view_method = 'zathura'

let g: vimtex_quickfix_mode = 0

conceallevel = 1 olarak ayarla

let g: tex_conceal = 'abdmg'

Son iki satır "gizle" işlevini kontrol eder. Bu işlev açıkken, imlecinizin bulunduğu satır dışında, metindeki LaTeX kodu gizlenecek veya başka sembollerle değiştirilecektir.

Örneğin, aşağıdaki animasyonda, gizlendikten sonra, $ işaretinden sonra, onların müdahalesi olmadan, tüm belgenin okunması daha kolaydır. Bu işlev ayrıca \ bigcap yerine , \ in yerine kullanacaktır vb.

Kurulum tamamlandıktan sonra, tüm öğreticinin özü şudur:

Bir öğretmenin tahtaya yazdığı kadar hızlı LaTeX ile nasıl not alabilirim?

Parçacıkların devreye girdiği yer burasıdır.

Parça! Parça nedir?

Parça, diğer metinler tarafından tetiklenen küçük, yeniden kullanılabilir bir metindir.

Örneğin, işaret yazın ve Tab tuşuna basın, kelime otomatik olarak bir imzaya genişleyecektir:

Parça aynı zamanda dinamik de olabilir: bugünü girin ve Sekme tuşuna basın, güncel tarih olacaktır.

Kutuya girip Tab tuşuna bastığınızda bir kutu görünecek ve metni girdiğinizde otomatik olarak büyüyecektir.

Parçalar başka bir parçanın içine bile yerleştirilebilir:

Bir parça nasıl oluşturulur? UltiSnips kullanın

Parçaları yöneten eklenti UltiSnips şu şekilde yapılandırılmıştır:

Plug'sirver / ultisnips '

let g: UltiSnipsExpandTrigger = ' < sekme > ' let g: UltiSnipsJumpForwardTrigger = ' < sekme > ' let g: UltiSnipsJumpBackwardTrigger = ' < s sekmesi > '

İşaret parçasının kodu aşağıdaki gibidir:

snippet işareti "İmza" Saygılarımla, Gilles Castel Endnippet

Dinamik parçalar için, kodu `` arasına koyabilirsiniz ve parça genişlediğinde çalışacaktır. Aşağıdaki örnek, geçerli tarihi biçimlendirmek için bash kullanır: tarih +% f.

bugünkü snippet "Tarih" `tarih +% F` Endnippet

Python'u! P ... kod bloğunda da kullanabilirsiniz.Örneğin, yukarıdaki kutu parçasındaki kod şuna benzer:

snippet kutusu "Kutu" `! p snippet.rv = '' + '' * (uzunluk (t) + 2) + ''` 1 $ `! p snippet.rv = '' + '' * (uzunluk (t) + 2) + ''` 0 $ Endnippet

Bu Python kod blokları, Snip.rv değişkeninin değeri ile değiştirilecektir. Bu kod bloklarında, kod kesiminin geçerli durumuna erişebilirsiniz; örneğin, t birinci sekme durağını içerir, fn geçerli dosya adıdır, vb.

LaTex parçası

Parçalar kullanarak LaTeX yazmak, yalnızca elle yazmaktan çok daha hızlıdır. Özellikle, bazı çok karmaşık klipler size çok zaman kazandırabilir ve sizi delirmekten etkili bir şekilde engelleyebilir.

İşte bazı çok kullanışlı ve kullanımı kolay snippet'ler:

çevre

Bir ortam eklemek için satırın başına beg yazmanız yeterlidir. Ardından, \ end {} komutunda da aynı olan ortamın adını yazın. İmleci yeni oluşturulan ortama yerleştirmek için Tab tuşuna basın.

Bu parçanın kodu aşağıdaki gibidir:

pasaj "başla {} / bitiş {}" bA

\ {$ 1} başla 0 $ \ end {$ 1} Endnippet

Bunlar arasında, b, bu parçanın yalnızca kod satırının başlangıcında genişletileceği anlamına gelir ve A, otomatik olarak genişletileceği anlamına gelir, bu da Sekme tuşuna basmaya gerek olmadığı anlamına gelir. Sekme durağı - yani Tab ve Shift + Tab tuşlarına basarak atlayabileceğiniz konum - $ 1, $ 2, ... ile temsil edilir ve sonuncusu $ 0'dır.

Satır içi ve matematik ekran

Matematik notu alma sürecinde en sık kullanılan iki segment mk ve dm'dir.

Matematik modunu başlatmaktan sorumludurlar. İlk segment "satır içi matematik" ve ikincisi "ekran matematiği" içindir.

Kod satırındaki matematiksel pasaj "akıllıdır": doğrudan $ işaretinden sonra bir kelimenin ne zaman girileceğini bilir ve otomatik olarak bir boşluk ekler. Ancak, sözcük olmayan bir karakter girerseniz boşluk eklemeyecektir. Örneğin, "$ p $ -value" durumunda, aşağıdaki gibi görünür:

Bu parçanın kodu aşağıdaki gibidir:

snippet mk "Matematik" wA

$$ {1} $ `! P t ve t içinde değilse: Snip.rv = '' Başka: Snip.rv = '' `2 $ Endnippet

İlk satırın sonundaki w, bu parçanın kelime sınırında genişleyeceği anlamına gelir, örneğin, hellomk genişlemeyecek, ancak merhaba mk genişleyecektir.

Matematiği görüntülemek için pasaj daha basit ve daha kullanışlıdır; onunla denklemi bir nokta ile bitirmeyi asla unutmayabilirsiniz.

Kod:

snippet dm "Matematik" wA

\ $ 0 Endnippet

Küçük harf ve üst simge

Diğer bir yararlı parça, alt simgedir. A1'i a1'e ve a_12'yi {12} olarak değiştirebilir.

Bu parçanın tetikleyicisi, normal ifadeler kullanır. Parçanın genişletileceği iki durum vardır. Birincisi, \ d gibi bir sayı ve ardından bir karakter yazmanız, diğeri ise bir karakterin ardından \ d \ d gibi iki sayı gelmesidir.

snippet '() (\ d)' "otomatik alt simge" wrA

`! p snippet.rv = match.group (1)` _`! p snippet.rv = match.group (2) ` Endnippet snippet '() _ (\ d \ d)' "otomatik abone2" wrA `! p snippet.rv = match.group (1)` _ {`! p snippet.rv = match.group (2)`} Endnippet

Normal ifadenin bir parçasını (\ d \ d) gibi bir gruba koymak için parantez kullandığınızda, Python'daki match.group (i) parçasını parçayı genişletmek için kullanabilirsiniz.

Üst simgeye gelince, td kullanabilirsiniz ve bu ^ {} olacaktır. Ancak kareler, küpler ve diğer yaygın parçalar için sr, cb vb. Gibi özel kod parçalarını kullanabilirsiniz.

Efekt resmi:

Kod:

snippet sr "^ 2" iA ^ 2 Endnippet snippet cb "^ 3" iA ^ 3 Endnippet snippet tamamlama "tamamlayıcı" iA ^ {c} Endnippet snippet td "üst simge" iA ^ {$ 1} $ 0 Endnippet

kesir

Puan, kullanımı en uygun segmenttir ve genişletilmiş form aşağıdaki gibidir:

/ / frac {} {} 3 / frac {3} {} 4 pi ^ 2 / frac {4 pi ^ 2} {} (1 + 2 + 3) / frac {1 + 2 + 3} {} (1 + (2 + 3) /) (1 + kesir {2 + 3} {}) (1 + (2 + 3)) / frac {1 + (2 + 3)} {

İlk pasajın kodu basittir:

snippet // "Kesir" iA \ frac {$ 1} {$ 2} $ 0 Endnippet

İkinci ve üçüncü örneklerde, normal ifadeler 3 /, 4ac /, 6pi ^ 2 /, a2 /, vb. Gibi ifadeleri eşleştirmek için kullanılabilir.

snippet '((\ d +) | (\ d *) (\)? (+) ((\ ^ | _) (\ {\ d + \} | \ d)) *) /' "Kesir" wrA

\ frac {`! p snippet.rv = match.group (1)`} {$ 1} $ 0

Endnippet

Yukarıdakileri okuduktan sonra, normal ifadelerin çok zor olduğunu düşünebilirsiniz. Fark etmez, işte sezgisel olarak açıklayan bir tablo:

Dördüncü ve beşinci örneklerde başka bir yönteme ihtiyaç vardır. UltiSnips'in normal ifade motorunu kullanmak sorunu çözemez, Python şunları yapabilir:

öncelik 1000 snippet '^. * \) /' "() Kesir" wrA `! p stripped = match.string derinlik = 0 i = len (soyulmuş) -1 True iken: eğer soyulmuşsa == ')': derinlik + = 1 eğer soyulmuşsa == '(': derinlik - = 1 derinlik == 0 ise: mola; i - = 1 Snip.rv = sıyrılmış + "\ frac {" + sıyrılmış + "}" `{$ 1} $ 0 Endnippet

Burada paylaşılacak puanla ilgili son parça, seçiminize göre bir puan oluşturabilir.

Önce bir metin seçebilir, ardından Sekme tuşuna basabilir, yazmaya devam edebilir ve ardından Sekme tuşuna basabilirsiniz.

Kodda, seçilen içeriği temsil etmek için $ {VISUAL} değişkeni kullanılır.

snippet / "Kesir" iA

\ frac {$ {VISUAL}} {$ 1} $ 0

Endnippet

Sympy ve Mathematica

Ayrıca matematiksel ifadeleri hesaplamak için Sympy'yi kullanan havalı ama çok kullanılmayan bir parça da var. Örneğin, sympy girin ve sonra sympy | sympy şeklinde genişletmek için Tab tuşuna basın, sympy 1 + 1 sympy girin ve 2'ye genişletmek için Tab tuşuna basın.

Snippet kodu:

snippet sympy "sympy bloğu" w sympy $ 1 sympy $ 0 Endnippet öncelik 10000 snippet'sympy (. *) sympy '"sympy değerini değerlendir" wr Sympy'den içe aktarım * x, y, z, t = semboller ('x y z t') k, m, n = semboller ('k m n', tamsayı = Doğru) f, g, h = semboller ('f g h', cls = Fonksiyon) init_printing () Snip.rv = eval ('lateks (' + match.group (1) .replace ('\', '') \ .replace ('^', '**') \ .replace ('{', '(') \ .replace (')', ')') + ')') ' Endnippet

Mathematica ile benzer şeyler de yapabilirsiniz:

Snippet kodu:

öncelik 1000 snippet math "mathematica block" w matematik $ 1 matematik $ 0 Endnippet öncelik 10000 snippet'math (. *) math '"mathematica'yı değerlendirin" wr `! p alt süreci içe aktar code = 'ToString' snippet.rv = subprocess.check_output () ' Endnippet

Son ek parçası

Yukarıdakilere ek olarak, son ek parçası da paylaşmaya değer. Örneğin, phat hat {p} ve zbar overline {z}. V, vec {v} ve v., vec {v} gibi benzer sonek vektörleri vardır. Sırası. Ve önemli değil, böylece ikisine aynı anda basabilirsiniz.

Bu parçalar gerçekten zamandan tasarruf sağlayabilir ve öğretmenin tahtaya yazdığı sırayla kaydedilebilir.

Daha düşük bir önceliğe sahip oldukları sürece çubuk ve şapka öneklerinin hala kullanılabileceğini unutmayın.

Bu parçaların kodu:

öncelik 10 snippet "bar" "bar" riA \ overline {$ 1} $ 0 Endnippet öncelik 100 snippet "() bar" "bar" riA \ overline {`! p snippet.rv = match.group (1)`} Endnippet öncelik 10 snippet "şapka" "şapka" riA \ hat {$ 1} $ 0 Endnippet öncelik 100 snippet "() şapka" "şapka" riA \ hat {`! p snippet.rv = match.group (1)`} Endnippet snippet "(\? \ w +) (, \. | \.,)" "Vektör postfix" riA \ vec {`! p snippet.rv = match.group (1)`} Endnippet

Diğer parçalar

Ek olarak, çoğu çok basit olan yaklaşık 100 yaygın olarak kullanılan klip vardır (indirme bağlantıları makalenin sonuna eklenmiştir). Örneğin, girin! > \ Mapsto, enter- olur > Olur ve böyle devam eder.

eğlence, f: \ R \ - \ R:,! > \ Mapsto, - olur > \ To olur ve cc \ altküme olur.

lim \ lim {n \ ila \ infty} olur, toplam \ sum {n = 1} ^ {\ infty} olur ve ooo \ infty olur.

Belirli bir kursun pasajı

Yaygın olarak kullanılan bazı bölümlere ek olarak, belirli kurslar için parçalar da ayarlayabilirsiniz. Örneğin, kuantum mekaniği sırasında bra / ket sembolü hakkında bazı parçalar oluşturabilirsiniz.

< a | \ bra {a} < | \ bra {\ psi} = "" a = "" > \ ket {a}

| > \ ket {\ psi}

\ braket {a} {b}

Kod:

snippet "\ < (. *?) \ | "" sütyen "riA \ bra {`! p snippet.rv = match.group (1) .replace ('q', f '\ psi'). değiştirin ('f', f '\ phi')`} Endnippet snippet "\ | (. *?) \ > "" ket "riA \ ket {`! p snippet.rv = match.group (1) .replace ('q', f '\ psi'). değiştirin ('f', f '\ phi')`} Endnippet snippet "(. *) \ bra {(. *?)} (*?) \ > "" braket "riA `! p snippet.rv = match.group (1)` \ braket {`! p snippet.rv = match.group (2)`} {`! p snippet.rv = match.group (3) .replace (' q ', f' \ psi '). değiştirin (' f ', f' \ phi ') `} Endnippet

Bağlam

Bu parçacıkları yazarken göz önünde bulundurulması gereken bir şey şudur: "Bu parçacıklar yaygın olarak kullanılan metinlerle çakışır mı?"

Örneğin, İngilizce'de sr içeren yaklaşık 72 kelime vardır, bu da şu anlama gelir: "yok sayma" kelimesi girildiğinde, sr ^ 2'ye genişler ve bir di ^ 2egard görünür.

Bu sorunun çözümü, kod parçasına bağlam eklemektir.

Vim'in sözdizimi vurgulamasını kullanarak, matematik veya metin kullanmanıza bağlı olarak UltiSnips'in parçayı genişletip genişletmeyeceğini belirleyebilirsiniz.

küresel! p texMathZones = texIgnoreMathZones = texMathZoneIds = vim.eval ('map (' + str (texMathZones) + ", 'hlID (v: val)')") texIgnoreMathZoneIds = vim.eval ('map (' + str (texIgnoreMathZones) + ", 'hlID (v: val)')") ignore = texIgnoreMathZoneIds def matematik (): synstackids = vim.eval ("synstack (satır ('.'), sütun ('.') - (sütun ('.') > = 2? 1: 0)) ") Deneyin: ilk = sonraki ( i için ters çevrilmiş (eşzamanlılar) texIgnoreMathZoneIds içinde i veya texMathZoneIds i ise ) önce dön! = yok say StopIteration hariç: Yanlış dönüş küresel

Artık yalnızca matematiksel bağlamda genişletmek isteyen parçalara "math ()" bağlamını ekleyebilirsiniz.

bağlam "matematik ()" snippet sr "^ 2" iA ^ 2 Endnippet

Lütfen "matematiksel bağlamın" ince bir şey olduğunu unutmayın. Bazen matematik ortamında biraz metin eklemek için \ text {...} kullanabilirsiniz. Bu durumda parçayı genişletmenize gerek yoktur. Ancak, aşağıdaki durumlarda: \ , genişletilebilirler. Matematik bağlamı için kodun biraz karmaşık olmasının nedeni budur. Aşağıdaki animasyon bu incelikleri göstermektedir.

Yukarıdaki parçalara ek olarak, verimliliğinizi ihtiyaçlarınıza göre artırmak için bazı eklentiler veya parçalar da ekleyebilirsiniz.

Kalem mi yoksa bilgisayar mı kullanıyorsunuz?

1700 sayfalık matematik notlarını sadece elle ezberlemek, harika olan bu küçük kardeşi tarif etmek için yeterli değil, bilim ve mühendislik öğrencileri arasında ona "kahraman" denebilir.

Herkes, küçük erkek kardeşin yaklaşımına katılmıyor ve güçlü yüksek teknoloji araçları genellikle gelenek karşısında sorgulanmaktadır.

Bazı netizenler el yazısının bilgisayarda yazmaktan daha etkileyici olduğunu düşünüyor ve bu küçük kardeşin yeterliliğine ulaşmak için LaTeX ve Vim'in birkaç yıl pratik yapması gerekeceğinden korkuyorum.

Kalem kullanmak daha rahat olduğuna göre, neden not almak için bilgisayar kullanılsın? Nedeni basit: karakterler çok çirkin!

Yazdıklarınızı okuma isteği yoksa ders notlarını nasıl gözden geçirebilirsiniz? En azından bir bilgisayarla yazılmış düzen düzgün ve göze hoş geliyor.

Yabancı netizenler tartışıyor olsa da, ancak Çin'de, bir koşulun sınıfa bilgisayar getirmesine izin verilmediği sürece bu yöntem tamamen reddedilebilir.

Bunun hakkında ne düşünüyorsun?

Araç Portalı Linux ve Mac sistemleri Vim ile birlikte gelir. Windows kullanıcıları Vim'i yükler: https://ftp.nluug.nl/pub/vim/pc/gvim81.exe Vim eklenti yönetimi: https://github.com/junegunn/vim-plug Vim'deki LaTeX eklentisi: https: // github .com / lervag / vimtex Window Tile Manager: https://github.com/baskerville/bspwm Management Vim Fragment Tool: https://github.com/SirVer/ultisnips

Vim'e alışkın değilseniz, Emacs, Atom, VS Code, Sublime var, hepsinde LaTeX eklentileri var, sizin için her zaman bir metin editörü var.

LaTeX ortak matematiksel sembol giriş yöntemi:

https://en.wikibooks.org/wiki/LaTeX/Mathematics

LaTeX'i kullanmanın daha fazla yöntemine aşina olmak istiyorsanız, sistematik olarak öğrenmeniz ve daha sık pratik yapmanız gerekir.

Blog bağlantısı:

https://castel.dev/post/lecture-notes-1/Editor: Wang Jing redaksiyon: Hong Shuyue - Bitiş -

Tsinghua-Qingdao Veri Bilimi Enstitüsü'nün resmi WeChat kamu platformunu takip edin " THU Veri Pastası "Ve kız kardeş numarası" Veri Pastası THU "Daha fazla ders avantajı ve kaliteli içerik elde edin.

GIF-Premier Lig küme düşme takımı başka bir yanlış kararla karşılaştı! Hentbolda rakibi iki kez görmezden gelinen 70 yaşındaki adam tekrar ilaç aldı.
önceki
GIF-1 Süper Lig'de garip gol! 4 günde 2 gol, 22 yaşında sabit büyüklükte başka bir rekor kıracak
Sonraki
Bambu Sanat Köyü'ne "Yaşayan Su" tanıtıldı Köylülerin zengin olmasına ve yeni bir yolculukta gelirini artırmasına öncülük edin
Süper Lig'de bir başka büyük tartışma! Paulinho acı bir gülümsemeyle bitiyor, Cannavaro'nun yüzü morarmış
Size veri bilimi öğrenimiyle ilgili 12 önemli ipucu gönderin (bağlantılar)
Heavy Dünyanın en büyük parçacık çarpışması, mikro dünya haritasını doldurarak B -Meons olarak bulundu
2019 Küresel Yapay Zeka Yetenek Raporu: Yapay zeka uzmanı yalnızca 36.000!
İtalyan temizlik sektörü çok yaygın ve işverenler düzenli sözleşmeli işçileri karşılayamadıklarını söylüyor
Orta Çin'deki en büyük profesyonel orkestra, topluluğa ve kitapçılara konserler gönderdi
Veri bilimcisi olmak için 11 adım (veri sorumlusu / MIS / BI analistine gönderilir)
Entegre medyanın inşasında yapay zekanın rolünü anlamak için bir makale
Wuhan Filarmoni Orkestrası konserleri harika, bunları kaçıramazsınız
Akıllı diyalogda derin pekiştirmeli öğrenmenin uygulanması (örneklerle)
Sağlık sigortası kartının bakiyesi nasıl kullanılır? Şangay vatandaşları büyük özel sigortadan ticari sigorta satın alabilirler
To Top