IPython Notebook에서 LaTeX를 작성하는 방법은 무엇입니까?


296

IPython 노트북에 LaTeX 코드를 표시하려면 어떻게해야합니까?


3
@duffymo LaTeX의 방법에 관계없이 이것은 꽤 좋은 질문입니다. IPython 노트북이 실제로 무엇인지 살펴보십시오 . 어쩌면 내가 안드로이드의 orgmode와 비슷하다고 말하면 도움이 될 것입니다 (그러나 불행히도 멋진 편집기가 없으면 LaTeX 대신 Markdown을 사용하므로 OP의 질문입니다).
Konrad Rudolph

1
지시에 감사합니다, Konrad.
duffymo

2
그리고 명확하게 말하자면 LaTeX를 좋아 합니다. (논문을 조판하는 데 사용했습니다.) 반대 의견이 없습니다. 방금 문제를 이해하지 못했습니다.
duffymo

답변:


155

이것은 내가 방금 수행 한 검색에서 나타 났으며, 더 많은 검색으로 더 나은 솔루션을 찾았습니다 .IPython 노트북에는 이제 모든 줄에 %%latex대한 $$래퍼 없이 전체 셀 라텍스를 만드는 마술이 있습니다.

리치 디스플레이 시스템에 대한 노트북 둘러보기


33
Jupyter에서는 마크 다운 셀에서는 작동하지 않지만 코드 셀에서는 작동합니다.
jwe

287

IPython 노트북은 MathJax 를 사용 하여 html / markdown 내에 LaTeX를 렌더링합니다. LaTeX 수학을 안에 넣으십시오 $$.

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

sqrt

또는 노트북 둘러보기 끝에서 볼 수 있듯이 Python의 LaTeX / Math 출력을 표시 할 수 있습니다 .

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가 방정식 대신에 Markdown 대신 LaTeX를 사용하고 싶다고 생각합니다 . Markdown을 좋아하는 것처럼 항상 LaTeX를 사용하는 복잡한 문서에 대해서는 요청에 동조합니다.
Konrad Rudolph

16
알았어 가장 좋은 해결책은 마크 다운 대신 '원시'셀을 사용하고 LaTeX를 입력하는 것입니다. 그런 다음 nbconvert 를 사용 하여 ipynb를 TeX (코드, 그림 및 모두)로 바꾸고 라텍스를 실행하여 PDF로 렌더링합니다. MathJax / Markdown과 같이 브라우저에서 라이브 렌더링 된 TeX는 얻지 못하지만 하나의 문서에 여전히 TeX / 코드가 있습니다.
minrk

1
같은 질문이지만 qtconsole에
MySchizoBuddy

8
방정식을 인라인으로 유지하려면 single $ (double $$가 아닌)를 사용하십시오. stackoverflow.com/q/19412644/1224255
TheGrimmScientist

6
텍스트 셀의 첫 번째 줄로 LaTeX입력하여 전체 셀을 렌더링 할 수도 있습니다 %%latex.
Toke Faurby

81

LaTeX 참고 문헌 :

Udacity의 블로그에는 내가 본 최고의 LaTeX Primer 가 있습니다. LaTeX 명령을 읽기 쉽고 기억하기 쉬운 방식으로 사용하는 방법을 명확하게 보여줍니다 !! 적극 권장 합니다.

이 링크에는 코드와 렌더링 결과를 모두 보여주는 훌륭한 예제가 있습니다!
이 사이트를 사용하여 LaTeX 작성 방법을 빠르게 배울 수 있습니다.

다음은 LaTeX 명령 / 기호에 대한 빠른 참조입니다 .


요약 : Jupyter / IPython에서 LaTeX를 나타내는 다양한 방법 :

마크 다운 셀의 :

인라인, 랩핑 : $

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 Cell로 전환

%%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}

원시 LaTeX 문자열 에 전달할 Math 객체 :

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원시 셀이 수정되지 않은 대상 형식으로 도착합니다. 예를 들어 전체 LaTeX를 원시 셀입력 하면로 변환 한 후에 만 ​​LaTeX에 의해 렌더링됩니다 nbconvert.

추가 문서 :

Jupyter Notebook docs 에서 인용 한 Markdown Cells :

: 마크 다운 세포 내에서, 당신은 또한 표준 LaTeX의 표기법을 사용하여 간단한 방법으로 수학을 포함 할 수 $ ... $ 인라인 수학$$ ... $$ 표시 수학을 . 마크 다운 셀이 실행될 때 LaTeX 부분은 고품질 타이포그래피를 사용한 방정식으로 HTML 출력에 자동으로 렌더링됩니다. 이것은 LaTeX 기능의 큰 부분 집합을 지원하는 MathJax에 의해 가능해졌습니다.

LaTeX 및 AMS-LaTeX (amsmath 패키지)로 정의 된 표준 수학 환경 (예 : \ begin {equation} ... \ end {equation}\ begin {align} ... \ end {align})도 작동 합니다. 새로운 LaTeX 매크로는 마크 다운 셀의 수학 구분 기호 사이에 \ newcommand와 같은 표준 방법을 사용하여 정의 할 수 있습니다. 이러한 정의는 나머지 IPython 세션에서 사용 가능합니다.


Udacity 페이지에 대한 링크가 더 이상 작동하지 않습니다.
Galaxy

33

수학을 한 줄에 표시하려면 $$를 사용하십시오 (예 :

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

수학 후에 줄 바꿈이 필요하지 않은 경우 단일 달러 기호 $를 사용하십시오 (예 :

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

23

응답자 중 하나가 위에서 말한 것처럼 마크 다운 할 셀을 선택한 다음 mathjax로 해석되는 라텍스 코드를 작성할 수 있습니다.

또는 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


14

방정식을 인쇄하는 좋은 방법을 제공하는 prettyPy를 개발 했습니다 . 불행히도 성능이 떨어지고 테스트가 필요합니다.

예:

여기에 이미지 설명을 입력하십시오

물론 sympy 는 훌륭한 대안이며 prettyPy는 표현식 평가를 허용하지 않지만 변수 초기화는 필요하지 않습니다.


2
내가 의미하는 것은 내가 패키지를 개발했다는 ​​것을 암시하는 것이었다. 나는 이것을 명시 적으로 진술하기 위해 대답을 조정했다.
Charles

1
코드를 퍼블릭 도메인에 넣는 데 도움이됩니다. 쓸모없는 주석을 삭제하겠습니다.
Robino

10

%% latex 키워드 또는 $ .. $ 리미터를 사용한 후에도 Code에서 모든 라텍스 명령을 사용할 수 없으므로 Markdown에서 라텍스 명령을 사용할 수있는 nbextensions를 설치했습니다. https://github.com/ipython-contrib/IPython-notebook-extensions/blob/master/README.md 지침에 따라 Jupyter를 다시 시작한 다음 localhost : 8888 / nbextensions를 다시 시작한 다음 "Latex Environment for Jupyter ", 많은 라텍스 명령을 실행할 수 있습니다. 예는 다음과 같습니다. 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}

보시다시피, 여전히 usepackage를 사용할 수 없습니다. 그러나 향후에는 개선 될 것입니다.

여기에 이미지 설명을 입력하십시오


1
latex_envs 노트북 확장 기능은 외부 LaTeX 패키지 또는 스타일을 사용할 수 없습니다. 컴파일러는 포함되어 있지 않지만 일부 키워드, 구조를 인식하고 적절한 HTML 대체를 만듭니다. 사용해 주셔서 감사합니다. pip를 사용하여 ipython-contrib 노트북 확장을 설치하는 것이 훨씬 쉽습니다.
jfb

9

minrk (완전성을 위해 포함)가 제공하는 답변 은 좋지만, 더 좋아하는 다른 방법이 있습니다.

텍스트 셀의 첫 번째 줄로 LaTeX입력하여 전체 셀을 렌더링 할 수도 있습니다 %%latex. 당신이 경우에 유용합니다

  • 더 많은 통제력을 원하고
  • 수학 환경 이상의 것을 원하고
  • 또는 하나의 셀에 많은 수학을 쓰려는 경우.

minrk 의 답변 :


IPython 노트북은 MathJax 를 사용 하여 html / markdown 내에 LaTeX를 렌더링합니다. LaTeX 수학을 안에 넣으십시오 $$.

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

sqrt

또는 노트북 둘러보기 끝에서 볼 수 있듯이 Python의 LaTeX / Math 출력을 표시 할 수 있습니다 .

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

완전한



3

이 기사 에서 Jupyter Notebook에 LaTeX를 작성하는 방법을 썼습니다 .

달러 ($) 기호로 묶어야합니다.

  • 왼쪽에 맞추려면 단일 달러 ($) 기호를 사용하십시오.

$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

Markdown 셀에서 LaTeX 구문을 직접 사용하면 효과적입니다. Jypiter 4.4.0을 사용하고 있습니다.

%%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}

렌더링 대상 :

여기에 이미지 설명을 입력하십시오


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 Notebooks를 사용하고 있습니다. 나는 써야했다

%%latex
$sin(x)/x$

LaTex 글꼴을 얻을 수 있습니다.


1
이것은 코딩 모드에있을 때 작동합니다. 당신은 마크 다운 모드에있는 경우에 당신은 %% 라텍스 제거 할 수
Lahiru Karunaratne
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.