2012-11-03 2 views
3

Qt에서 몇 가지 방정식을 나타 내기 위해 MathTextParser을 사용하고 있습니다. 따라서 나는 필요한 덱스 문자열을 dict에서 꺼내서, 내가 만든 파서의 to_rgba 메서드를 사용하여 구문 분석하고 (일반 글꼴 크기와 dpi를 넘김) FigureCanvasQWidgetfigimage으로 넘겨 준다.
는보고 유무 : 구문 분석 할 수있는 방정식, 그런 일이 있도록 (그것이 있어야대로) FigureCanvas의 크기가 고정되어있는 반면 다양한 길이의 것을, 지금MathTextParser : 그림 크기로 출력하기

class MathWidget(QWidget): 
    def __init__(self, parent = None): 
      QWidget.__init__(self, parent) 
      ... 
      self.canvas = MathCanvas() # The FigureCanvas to display the teximage 
      ... 
      self.parser = mathtext.MathTextParser("Bitmap") 

    def render(self,metric): 
      equation = self.equations[metric] 
      rgb, d = self.parser.to_rgba(equation, color='black', fontsize=8, dpi=200) 
      self.canvas.fig.figimage(rgb.astype(float)/255., 0, 0) 
      self.canvas.draw() 

내 문제를 어떤 식 그 이 예제에서와 같이 방정식의 일부분이 잘 리거나 보이지 않도록 크기가 그림 크기를 초과합니다.
Cut off equation
내가 싫어하는 것은 어떻게 든 fontsize를 사전 정의하는 것입니다 길이를 예측할 수없는 사용자 정의 방정식 (예기치 않은 길이)조차도 분석하여 표시해야하는 이유 때문에 길이가 줄어드는 모든 텍 스트 문자열에 대해.
예를 들어, 파서를 예를 들어. fontsize, 출력은 방정식 크기/길이와는 독립적으로 고정 된 크기의 래스터 화 된 텍스입니다.

이외 : 예 : numpl/scipy matplotlib의 문서가 어떤 이유로 나를 빤히 보일 수 있으므로 누군가가 to_rgbafigimage이 정확하게 작동하는 방식에 대해 의견을 말할 수 있다면 감사 할 것입니다. to_rgba에 관하여 : 무슨 일이 다음 인용 하는가를 확실하게 깊이를 의미? 사전

+0

글쎄, 동료의 조언 덕분에 지금은 시도와 오류가 비슷합니다. to_rgba 메소드에서 반환 한 배열 모양을 확인했습니다. 모양에 따라 문자열을 다시 렌더링하고 더 크거나 작은 글꼴 크기. 이것은 어떤 경우에 렌더링 된 두 가지 또는 모든 경우를 두 번 또는 세 번 렌더링해야한다고 요구하지만 더 만족스러운 솔루션이 있다는 것을 의문의 여지가 있습니다 ... – embert

+0

커다란 방법이었던 방정식을 사용하지 않으면 제안 된 솔루션이 작동하고 개미로 나옵니다 페이지의 크기가 4 글꼴 이하로 렌더링 될 때 글꼴 크기가 너무 작아 질 경우 if 문을 사용하여 QScrollArea 또는 이와 유사한 요소를 배치 할 수 있습니다. 또는 링크로 만들 수도 있습니다. 링크를 클릭하면 전체 이미지가 표시됩니다. 고려할 수있는 세 번째 솔루션은 방정식의 문자를 마임 데이터로 액세스 할 수있게하거나 마우스 오른쪽 버튼으로 클릭하는 것입니다. 행운을 빕니다. – phyatt

+0

헤이, 나는 'ScrollArea'아이디어를 이미 무시했다. 링크 솔루션이 마우스 오버처럼 쉽게 구현 될 수 있다면 나에게 호소하지만 반대로/버퍼링/하드 디스크에 이미지 저장을 할 수있는 방법이 있는가? – embert

답변

0

텍 코드를 표시하는 또 다른 가능한 해결책에

  • depth is the offset of the baseline from the bottom of the image in pixels

감사 :의 DVI 파일을 변환 dvisvgm --no-fonts를 호출 한 후, dvi 문서를 얻을 latex 전화를 SVG에 SVG 파일을로드하고 렌더링 한 다음 QSvgRenderer로 SVG 파일을로드하고 렌더링합니다.converting a latex code to mathml or svg code in python