2014-09-10 2 views
2

여러 LaTeX 명령과 변수가 포함 된 긴 문자열을 이미지에 쓰려고합니다. LaTeX 형식을 유지하면서 변수의 임의의 정밀도를 설정하는 데 문제가 있습니다. 이 변수로서 서브 인덱스 {t} 인식되므로Python에서 LaTeX을 사용하는 긴 문자열과 형식 메서드를 결합합니다.

import matplotlib.pyplot as plt 
# Define some variables names and values. 
xn, yn, cod, prec, prec2 = 'r', 'p', 'abc', 2, 4 
ccl = [546.35642, 6785.35416] 
ect = [12.5235, 13.643241] 

plt.figure() 

text1 = "${}_{t} = {:.{p}f} \pm {:.{p}f} {c}$".format(xn, ccl[0], ect[0], c=cod, p=prec) 
text2 = "${}_{t} = {:.{p}f} \pm {:.{p}f} {c}$".format(yn, ccl[1], ect[1], c=cod, p=prec2) 

text = text1 + '\n' + text2 
plt.text(0.5, 0.5, text) 
plt.savefig('format_test.png', dpi=150) 

이 오류 KeyError: 't' 예외 :

여기 MWE이다. 대신하면 내가 사용

text1 = "${{{a}}}_{t} = {:.{p}f} \pm {:.{p}f} {c}$".format(a=xn, ccl[0], ect[0], c=cod, p=prec) 
text2 = "${{{a}}}_{t} = {:.{p}f} \pm {:.{p}f} {c}$".format(b=yn, ccl[1], ect[1], c=cod, p=prec2) 

나는 이후 SyntaxError: non-keyword arg after keyword arg를 얻을 지금은 a=xn (두 번째 텍스트 라인에 대한 동일) 이후에 정의 format에서 ccl[0], ect[0] 변수가 있습니다.

format의 끝에 precprec2 값이 인쇄 될 때 소수점 이하 자릿수를 결정합니다. 내가 고정되어 있지 않기 때문에이 변수를 전달해야합니다, 난 그냥 고정 값을 {:.{p}f} 대체 설정할 수 없습니다.

LaTeX 서식을 유지하면서 다른 정밀도를 유지하면서 이러한 줄을 어떻게 만들 수 있습니까?

답변

4

t 주위에 여분의 중괄호가 필요하다고 생각합니다. 이것은 나를 위해 작동 :

text1 = r"${}_{{t}} = {:.{p}f} \pm {:.{p}f} {c}$".format(xn, ccl[0], ect[0], c=cod, p=prec) 
text2 = r"${}_{{t}} = {:.{p}f} \pm {:.{p}f} {c}$".format(yn, ccl[1], ect[1], c=cod, p=prec2) 

이중 중괄호를 추가 그들이하지

enter image description here

+0

감사합니다 @ 톰 파이썬 형식 구문의 일환으로, 문자 그대로 처리하는 것을 의미! 그 일은 훌륭했습니다. – Gabriel

+1

이것은 새로운 포맷 언어의 주된 단점 중 하나입니다. 라텍스와 함께 정말 나 빠지게됩니다. – tacaswell