วิธีการเขียน LaTeX ใน IPython Notebook


296

ฉันจะแสดงรหัส LaTeX ในสมุดบันทึก IPython ได้อย่างไร


3
@duffymo ไม่ว่าคุณจะเป็น LaTeX อย่างไรนี่เป็นคำถามที่ดีทีเดียว ดูที่โน๊ตบุ๊ค IPython ว่าจริง ๆ แล้วคืออะไร บางทีมันอาจช่วยได้ถ้าฉันบอกคุณว่ามันเป็นเหมือน orgmode บน 'roids (แต่น่าเสียดายที่ไม่มีตัวแก้ไขที่ดีและด้วย Markdown แทนที่จะเป็น LaTeX ดังนั้นคำถามของ OP)
Konrad Rudolph

1
ฉันไม่รู้มันขอบคุณสำหรับการสอน Konrad
duffymo

2
และเพื่อความชัดเจนฉันรักน้ำยาง (ฉันใช้มันเพื่อเรียงพิมพ์วิทยานิพนธ์ของฉัน.) ไม่มีการคัดค้าน; ล้มเหลวในการเข้าใจปัญหา
duffymo

คำตอบ:


155

สิ่งนี้เกิดขึ้นในการค้นหาที่ฉันเพิ่งทำพบวิธีแก้ปัญหาที่ดีกว่าด้วยการค้นหาเพิ่มเติมตอนนี้โน้ตบุ๊ค IPython มี%%latexเวทมนตร์ที่ทำให้ทั้งเซลล์ลาเท็กซ์โดยไม่มี$$เสื้อคลุมสำหรับแต่ละบรรทัด

อ้างอิงการแนะนำโน๊ตบุ๊คสำหรับระบบ Rich Display


33
ใน Jupyter มันไม่ทำงานในเซลล์ markdown แต่มันจะทำงานในเซลล์รหัส
jwe

287

สมุดบันทึก IPython ใช้MathJaxเพื่อแสดง LaTeX ภายใน html / markdown $$เพียงแค่ใส่ภายในคณิตศาสตร์น้ำยางของคุณ

$$c = \sqrt{a^2 + b^2}$$

sqrt

หรือคุณสามารถแสดงน้ำยาง / เอาต์พุตคณิตศาสตร์จากงูใหญ่เท่าที่เห็นในตอนท้ายของการท่องเที่ยวโน๊ตบุ๊ค :

from IPython.display import display, Math, Latex
display(Math(r'F(k) = \int_{-\infty}^{\infty} f(x) e^{2\pi i k} dx'))

สำคัญ


19
ฉันคิดว่า OP ต้องการใช้ LaTeX แทน Markdownแทนที่จะเป็นเพียงสมการ ฉันเห็นด้วยกับคำขอ - เท่าที่ฉันชอบ Markdown สำหรับเอกสารที่ซับซ้อนฉันมักจะใช้ LaTeX
Konrad Rudolph

16
Gotcha ทางออกที่ดีที่สุดสำหรับตอนนี้ก็คือการใช้เซลล์ 'ดิบ' แทนที่จะทำเครื่องหมายและเพียงพิมพ์ LaTeX ตามที่คุณต้องการ จากนั้นใช้nbconvertเพื่อเปลี่ยน ipynb เป็น TeX (รหัสตัวเลขและทั้งหมด) และเรียกใช้ latex เพื่อแสดงผลเป็น PDF และอื่น ๆ คุณไม่ได้รับ TeX ที่แสดงผลสดในเบราว์เซอร์เช่นเดียวกับ MathJax / Markdown แต่คุณ ยังมีรหัส TeX / ในเอกสารเดียว
minrk

1
คำถามเดียวกัน แต่ใน qtconsole
MySchizoBuddy

8
และใช้ $ เดียว (แทนที่จะเป็นสองเท่า $$) เพื่อรักษาสมการในบรรทัด stackoverflow.com/q/19412644/1224255
TheGrimmScientist

6
นอกจากนี้คุณยังสามารถแสดงผลทั้งเซลล์LaTeXโดยพิมพ์%%latexเป็นบรรทัดแรกในเซลล์ข้อความ
Toke Faurby

81

LaTeX ข้อมูลอ้างอิง:

บล็อกของ Udacity มีPrimer LaTeX ที่ดีที่สุด เท่าที่ฉันเคยเห็น: มันแสดงให้เห็นอย่างชัดเจนถึงวิธีการใช้คำสั่ง LaTeX ในการอ่านง่ายและจดจำได้ง่าย !! แนะนำเป็นอย่างยิ่ง

ลิงค์นี้มีตัวอย่างที่ดีเลิศแสดงทั้งรหัสและผลลัพธ์ที่แสดง!
คุณสามารถใช้เว็บไซต์นี้เพื่อเรียนรู้วิธีเขียน LaTeX อย่างรวดเร็วด้วยตัวอย่าง

และนี่คือการอ้างอิงด่วนสำหรับคำสั่ง / สัญลักษณ์ LaTeX


ในการสรุป: วิธีต่างๆในการระบุ LaTeX ใน Jupyter / IPython:

ตัวอย่างสำหรับ Markdown Cells:

อินไลน์ห่อใน: $

The equation used depends on whether the the value of  
$V​max​​$ is R, G, or B.  

บล็อก, ห่อใน: $$

$$H←  ​​​​​0 ​+​ \frac{​​30(G−B)​​}{Vmax−Vmin}  ​​, if V​max​​ = R$$

บล็อก, ห่อใน:\begin{equation}และ\end{equation}

\begin{equation}
H← ​​​60 ​+​ \frac{​​30(B−R)​​}{Vmax−Vmin}  ​​, if V​max​​ = G
\end{equation}

บล็อก, ห่อใน:\begin{align}และ\end{align}

\begin{align}
H←120 ​+​ \frac{​​30(R−G)​​}{Vmax−Vmin}  ​​, if V​max​​ = B
\end{align}

ตัวอย่างสำหรับรหัสเซลล์:

LaTex Cell: %%latexคำสั่งเวทเปลี่ยนทั้งเซลล์เป็นเซลล์LaTeX

%%latex
\begin{align}
\nabla \cdot \vec{\mathbf{E}} & = 4 \pi \rho \\
\nabla \times \vec{\mathbf{E}}\, +\, \frac1c\, \frac{\partial\vec{\mathbf{B}}}{\partial t} & = \vec{\mathbf{0}} \\
\nabla \cdot \vec{\mathbf{B}} & = 0
\end{align}

วัตถุทางคณิตศาสตร์ที่จะผ่านในสตริง Raw LaTeX :

from IPython.display import Math
Math(r'F(k) = \int_{-\infty}^{\infty} f(x) e^{2\pi i k} dx')

ระดับน้ำยางข้น หมายเหตุ: คุณต้องรวมตัวคั่นด้วยตนเอง สิ่งนี้ทำให้คุณสามารถใช้โหมด LaTeX อื่น ๆ เช่นeqnarray:

from IPython.display import Latex
Latex(r"""\begin{eqnarray}
\nabla \times \vec{\mathbf{B}} -\, \frac1c\, \frac{\partial\vec{\mathbf{E}}}{\partial t} & = \frac{4\pi}{c}\vec{\mathbf{j}} \\
\nabla \cdot \vec{\mathbf{E}} & = 4 \pi \rho \\
\nabla \times \vec{\mathbf{E}}\, +\, \frac1c\, \frac{\partial\vec{\mathbf{B}}}{\partial t} & = \vec{\mathbf{0}} \\
\nabla \cdot \vec{\mathbf{B}} & = 0 
\end{eqnarray}""")

เอกสารสำหรับเซลล์ดิบ:

(ขออภัยไม่มีตัวอย่างที่นี่แค่เอกสาร)

เซลล์ดิบเซลล์ดิบเป็นสถานที่ที่คุณสามารถเขียนผลลัพธ์ได้โดยตรง โน๊ตบุ๊คไม่ได้ทำการประเมินเซลล์ดิบ เมื่อผ่านไปnbconvertเซลล์ดิบจะมาถึงในรูปแบบปลายทางที่ไม่ได้แก้ไข ตัวอย่างเช่นนี้ช่วยให้คุณสามารถพิมพ์น้ำยางเต็มลงในเซลล์ดิบnbconvertซึ่งจะถูกแสดงโดยน้ำยางหลังจากการแปลงโดย

เอกสารเพิ่มเติม:

สำหรับ Markdown Cells ที่ยกมาจากJupyter Notebook docs :

ภายในเซลล์ Markdown คุณยังสามารถรวมวิชาคณิตศาสตร์ในทางที่ตรงไปตรงมาโดยใช้สัญกรณ์น้ำยางมาตรฐาน: $ ... $ สำหรับคณิตศาสตร์แบบอินไลน์และ$$ $$ ... สำหรับคณิตศาสตร์แสดง เมื่อดำเนินการเซลล์มาร์คดาวน์ส่วน LaTeX จะแสดงผลโดยอัตโนมัติในเอาต์พุต HTML เป็นสมการที่มีตัวอักษรคุณภาพสูง สิ่งนี้เกิดขึ้นได้โดย MathJax ซึ่งรองรับชุดย่อยจำนวนมากของฟังก์ชัน LaTeX

สภาพแวดล้อมคณิตศาสตร์มาตรฐานที่กำหนดโดยน้ำยางและ AMS น้ำยาง (แพคเกจ amsmath) ที่ยังทำงานเช่น\ begin {} สม ... \ end {} สมและ\ begin {} ชิด ... \ end {} มาโคร LaTeX ใหม่อาจถูกกำหนดโดยใช้วิธีมาตรฐานเช่น \ newcommand โดยวางไว้ที่ใดก็ได้ระหว่างตัวคั่นคณิตศาสตร์ในเซลล์ Markdown คำจำกัดความเหล่านี้จะพร้อมใช้งานตลอดช่วงเวลาที่เหลือของเซสชัน IPython


ลิงก์ไปยังหน้า Udacity ไม่ทำงานอีกต่อไป
กาแล็กซี่

33

ใช้ $$ หากคุณต้องการให้คณิตศาสตร์ของคุณปรากฏในบรรทัดเดียวเช่น

$$a = b + c$$ (line break after the equation)

หากคุณไม่ต้องการการแบ่งบรรทัดหลังคณิตศาสตร์ให้ใช้เครื่องหมายดอลลาร์เดียวเช่น

$a = b + c$   (no line break after the equation)

23

คุณสามารถเลือกเซลล์ที่จะถูกมาร์คเกอร์แล้วเขียนรหัสลาเท็กซ์ซึ่งได้รับการตีความโดย mathjax ตามที่ผู้ตอบคำถามคนหนึ่งพูดไว้ข้างต้น

อีกวิธีหนึ่งส่วน Latex ของโปรแกรมสอนสำหรับโน๊ตบุ๊ค iPython นั้นอธิบายได้ดี

คุณสามารถทำได้:

from IPython.display import Latex
Latex(r"""\begin{eqnarray}
\nabla \times \vec{\mathbf{B}} -\, \frac1c\, \frac{\partial\vec{\mathbf{E}}}{\partial t} & = \frac{4\pi}{c}\vec{\mathbf{j}} \\
\nabla \cdot \vec{\mathbf{E}} & = 4 \pi \rho \\
\nabla \times \vec{\mathbf{E}}\, +\, \frac1c\, \frac{\partial\vec{\mathbf{B}}}{\partial t} & = \vec{\mathbf{0}} \\
\nabla \cdot \vec{\mathbf{B}} & = 0 
\end{eqnarray}""")

หรือทำสิ่งนี้:

%%latex
\begin{align}
\nabla \times \vec{\mathbf{B}} -\, \frac1c\, \frac{\partial\vec{\mathbf{E}}}{\partial t} & = \frac{4\pi}{c}\vec{\mathbf{j}} \\
\nabla \cdot \vec{\mathbf{E}} & = 4 \pi \rho \\
\nabla \times \vec{\mathbf{E}}\, +\, \frac1c\, \frac{\partial\vec{\mathbf{B}}}{\partial t} & = \vec{\mathbf{0}} \\
\nabla \cdot \vec{\mathbf{B}} & = 0
\end{align}

พบข้อมูลเพิ่มเติมในลิงค์นี้


4
การเชื่อมโยงของคุณเสียตอนนี้
J'e

1
ตัวอย่างที่ยอดเยี่ยมที่นี่: jupyter-notebook.readthedocs.io/en/stable/examples/Notebook/…
ptim

14

ฉันพัฒนาprettyPyซึ่งเป็นวิธีที่ดีในการพิมพ์สมการ น่าเสียดายที่มันไม่ได้มีประสิทธิภาพและต้องการการทดสอบ

ตัวอย่าง:

ป้อนคำอธิบายรูปภาพที่นี่

จริงอยู่ที่sympyเป็นทางเลือกที่ยอดเยี่ยมและถึงแม้ว่า prettyPy ไม่อนุญาตให้ทำการประเมินนิพจน์


2
สิ่งที่ฉันหมายถึงคือการพัฒนาแพ็คเกจ ฉันปรับคำตอบเพื่อระบุสิ่งนี้อย่างชัดเจน
Charles

1
ความรุ่งโรจน์สำหรับการวางรหัสในโดเมนสาธารณะ ฉันจะลบความคิดเห็นที่ล้าสมัย (ตอนนี้) ของฉัน
Robino

10

ตั้งแต่ฉันไม่สามารถใช้คำสั่ง latex ทั้งหมดใน Code ได้แม้หลังจากใช้คำสำคัญ %% latex หรือ $ .. $ limiter ฉันจึงติดตั้ง nbextensions ซึ่งฉันสามารถใช้คำสั่ง latex ใน Markdown ได้ หลังจากทำตามคำแนะนำที่นี่: https://github.com/ipython-contrib/IPython-notebook-extensions/blob/master/README.mdแล้วรีสตาร์ท Jupyter แล้ว localhost: 8888 / nbextensions แล้วเปิดใช้งาน "Latex Environment สำหรับ Jupyter "ฉันสามารถรันคำสั่ง Latex หลายคำได้ ตัวอย่างอยู่ที่นี่: https://rawgit.com/jfbercher/latex_envs/master/doc/latex_env_doc.html

\section{First section}
\textbf{Hello}
$
\begin{equation} 
c = \sqrt{a^2 + b^2}
\end{equation}
$
\begin{itemize}
\item First item
\item Second item
\end{itemize}
\textbf{World}

อย่างที่คุณเห็นฉันยังคงไม่สามารถใช้แพ็คเกจการเดินทางได้ แต่บางทีมันอาจจะดีขึ้นในอนาคต

ป้อนคำอธิบายรูปภาพที่นี่


1
ส่วนขยายโน้ตบุ๊ก latex_envs ไม่สามารถใช้แพ็กเกจ LaTeX ภายนอกหรือสไตล์ ไม่มีคอมไพเลอร์ แต่รับรู้คำหลักโครงสร้างและทำการแทนที่ HTML ที่เหมาะสม ขอบคุณที่ใช้งาน มันง่ายมากที่จะติดตั้งส่วนขยายของสมุดบันทึก ipython-contrib ตอนนี้โดยใช้ pip
jfb

9

คำตอบที่ได้รับจากminrk (รวมเพื่อความสมบูรณ์) เป็นสิ่งที่ดี แต่มีวิธีอื่นที่ฉันชอบมากยิ่งขึ้น

นอกจากนี้คุณยังสามารถแสดงผลทั้งเซลล์LaTeXโดยพิมพ์%%latexเป็นบรรทัดแรกในเซลล์ข้อความ นี่คือมีประโยชน์ถ้าคุณ

  • ต้องการการควบคุมมากขึ้น
  • ต้องการมากกว่าแค่สภาพแวดล้อมทางคณิตศาสตร์
  • หรือถ้าคุณจะเขียนคณิตศาสตร์จำนวนมากในเซลล์เดียว

คำตอบของminrk :


สมุดบันทึก IPython ใช้MathJaxเพื่อแสดง LaTeX ภายใน html / markdown $$เพียงแค่ใส่ภายในคณิตศาสตร์น้ำยางของคุณ

$$c = \sqrt{a^2 + b^2}$$

sqrt

หรือคุณสามารถแสดงน้ำยาง / เอาต์พุตคณิตศาสตร์จากงูใหญ่เท่าที่เห็นในตอนท้ายของการท่องเที่ยวโน๊ตบุ๊ค :

from IPython.display import display, Math, Latex
display(Math(r'F(k) = \int_{-\infty}^{\infty} f(x) e^{2\pi i k} dx'))

สำคัญ



3

ฉันเขียนวิธีการเขียน LaTeX ใน Jupyter Notebook ในบทความนี้

คุณต้องใส่ไว้ในสัญลักษณ์ดอลลาร์ ($)

  • หากต้องการจัดชิดซ้ายให้ใช้เครื่องหมายดอลลาร์ ($) เดียว

$P(A)=\frac{n(A)}{n(U)}$

  • หากต้องการจัดให้อยู่กึ่งกลางให้ใช้เครื่องหมายดอลลาร์ ($$) สองครั้ง

$$P(A)=\frac{n(A)}{n(U)}$$

  • ใช้\limitsสำหรับ\lim, \sumและ\intเพื่อเพิ่มขีด จำกัด ไปด้านบนและด้านล่างของแต่ละป้าย

  • ใช้แบ็กสแลชเพื่อหนีคำพิเศษของ LaTeX เช่นสัญลักษณ์ทางคณิตศาสตร์คำภาษาละตินข้อความ ฯลฯ

ป้อนคำอธิบายรูปภาพที่นี่

ลองอันนี้.

$$\overline{x}=\frac{\sum \limits _{i=1} ^k f_i x_i}{n} \text{, where } n=\sum \limits _{i=1} ^k f_i  $$
  • เมทริกซ์

ป้อนคำอธิบายรูปภาพที่นี่

  • ฟังก์ชันทวนเข็มนาฬิกา
$$
\begin{align}
\text{Probability density function:}\\
\begin{cases}
\frac{1}{b-a}&\text{for $x\in[a,b]$}\\
0&\text{otherwise}\\
\end{cases}
\\
\text{Cumulative distribution function:}\\
\begin{cases}
0&\text{for $x<a$}\\
\frac{x-a}{b-a}&\text{for $x\in[a,b)$}\\
1&\text{for $x\ge b$}\\
\end{cases}
\end{align}
$$

รหัสด้านบนจะสร้างสิ่งนี้

ป้อนคำอธิบายรูปภาพที่นี่

หากคุณต้องการที่จะรู้วิธีการเพิ่มหมายเลขสมการและสมชิดโปรดอ่านบทความนี้สำหรับรายละเอียด


2

การใช้ไวยากรณ์ LaTeX โดยตรงในเซลล์ Markdown เหมาะสำหรับฉัน ฉันใช้ Jypiter 4.4.0

ฉันไม่ต้องใช้%%latexคำสั่งเวทย์มนตร์ฉันยืนยันเพียงเซลล์ markdown:

\begin{align}
\nabla \times \vec{\mathbf{B}} -\, \frac1c\, \frac{\partial\vec{\mathbf{E}}}{\partial t} & = \frac{4\pi}{c}\vec{\mathbf{j}} \\
\nabla \cdot \vec{\mathbf{E}} & = 4 \pi \rho \\
\nabla \times \vec{\mathbf{E}}\, +\, \frac1c\, \frac{\partial\vec{\mathbf{B}}}{\partial t} & = \vec{\mathbf{0}} \\
\nabla \cdot \vec{\mathbf{B}} & = 0
\end{align}

แสดงผลเป็น:

ป้อนคำอธิบายรูปภาพที่นี่


2
นี่เป็นวิธีที่ง่ายและสะอาดที่สุดในการทำ
Veliko

1

ฉันเจอปัญหานี้ในบางวันโดยใช้ colab และฉันพบว่าวิธีที่เจ็บปวดที่สุดคือแค่เรียกใช้รหัสนี้ก่อนพิมพ์ ทุกอย่างใช้งานได้อย่างมีเสน่ห์

from IPython.display import Math, HTML

def load_mathjax_in_cell_output():
  display(HTML("<script src='https://www.gstatic.com/external_hosted/"
               "mathjax/latest/MathJax.js?config=default'></script>"))
get_ipython().events.register('pre_run_cell', load_mathjax_in_cell_output)
import sympy as sp
sp.init_printing()

ผลลัพธ์จะเป็นดังนี้:

ป้อนคำอธิบายรูปภาพที่นี่


1

ฉันกำลังใช้สมุดบันทึก Jupyter ฉันต้องเขียน

%%latex
$sin(x)/x$

เพื่อรับแบบอักษร LaTex


1
สิ่งนี้จะทำงานเมื่อคุณอยู่ในโหมดการเข้ารหัส หากคุณอยู่ในโหมด Markdown คุณสามารถกำจัด %% latex ได้
Lahiru Karunaratne
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.