Как отображать математические выражения в метках или панелях WPF?

Я пишу программное обеспечение, которое отображает много математического контента. Так как в оконных формах уже сложно установить индекс или греческую букву в метке, думаю перейти на WPF.

На данный момент я ищу лучший способ отобразить математическое выражение, формулу или просто символ в моем графическом пользовательском интерфейсе. Они должны быть представлены в виде этикеток или нарисованных графиков/рисунков. Никаких оперативных/своевременных визуализаций, но красивые символы исправления.

Как лучше всего это сделать? Я думал, что MathML должен хорошо поддерживаться, но я не могу найти много информации об этом. Буду рад услышать совет.

Вот откуда я могу получить свои символы (или что я бы предпочел):

  • LaTeX-код (первый выбор! Код уже есть, и такой же внешний вид в программном обеспечении и документации был бы изумителен)
  • MathML-код (LaTeX-код в Word 2007 или более поздней версии -> уравнения Word -> скопировать как обычный MathML в буфер обмена)
  • SVG (некоторый рендеринг LaTeX в Inkscape и экспорт в XAML)
  • xmcd Файлы (Mathcad XML Document. Не знаю как, но по крайней мере это XML)
  • html Файлы (написанные LaTeX->html или Mathcad->html

Что я бы не стал рассматривать лично, но, возможно, есть хорошие решения:

  • Изображения (png-иконки, pdf, dvi, eps, svg импортируются напрямую)
  • Символы (типа копия вставлена ​​из карты символов. Не нравятся шрифты, не нашел бы все, что мне нужно, и обмен синтаксиса формулы не давался бы)

Я думаю, что использование LaTeX, MathML или html было бы здорово, поскольку их можно было бы использовать и для документации. Я также мог бы подумать об экспорте результатов вычислений в файлы *.tex или полностью генерировать графику внутри LaTeX (tikz, pgfplots...)


person LaRiFaRi    schedule 25.07.2013    source источник
comment
Быстрый поиск дал мне это, надеюсь, это поможет stackoverflow.com/questions/8899204/   -  person Joe Stanton    schedule 25.07.2013
comment
Выходит ли требование за пределы стандартных символов юникода в стиле XML, где, например, вы можете отобразить что-то вроде символа бесконечности с помощью ∞?   -  person Chris W.    schedule 25.07.2013
comment
@JoeStanton Спасибо за ссылку. Я тоже это нашел. Но там все старое, неактивное, неофициальное или просто отнимающее много времени для моей цели. Я надеялся получить новые идеи, поскольку XAML становится все более популярным в последнее время. У меня есть некоторые идеи по этой ссылке, но, надеюсь, там есть что-то более практичное.   -  person LaRiFaRi    schedule 26.07.2013
comment
@КрисВ. Да, мне понадобятся метки типа \beta^prime_\infty или подобные. Хотел бы взять для этого OT-шрифты. Интересно, почему SVG и MathML (будучи XML) так сложно включить в XAML (то есть XML). Метки и формулы должны масштабироваться, чтобы соответствовать тексту, графике и документам.   -  person LaRiFaRi    schedule 26.07.2013
comment
XML — это просто структурный формат. Семантика содержимого XML полностью зависит от сценария; нет причин полагать, что вы можете просто смешивать и сопоставлять SVG и XAML, больше, чем ожидать, что вы могли бы, например. внедрите XSLT в документ XHTML, и он просто заработает. Если у вас есть шрифты с символами и графикой, которые вы хотите использовать, вы сможете использовать RichTextBox для отображения в WPF.   -  person Peter Duniho    schedule 07.02.2015


Ответы (3)


Рассмотрите возможность использования библиотеки WPF-Math с открытым исходным кодом (отказ от ответственности: я являюсь ее текущим сопровождающим) .

Это может помочь вам отобразить выражение LaTeX в окне WPF. Он также использует векторную графику вместо растровых изображений, поэтому формулы будут хорошо масштабироваться на современных дисплеях.

person ForNeVeR    schedule 17.02.2017
comment
Поддерживает ли это MathML? - person VivekDev; 22.12.2018
comment
@VivekDev нет, не так. Если вы можете предоставить свой собственный анализатор MathML, то можно преобразовать его в структуры данных WPFMath и повторно использовать общую инфраструктуру рендеринга. Не стесняйтесь обращаться к нам на GitHub, если вы хотите помочь или предложить эту функцию. - person ForNeVeR; 22.12.2018
comment
Хорошо спасибо. Сначала я посмотрю на WPFMath, а потом решу. - person VivekDev; 22.12.2018
comment
Обратите внимание, что версия 0.6 и ниже поддерживает .NET framework 4.0, что очень удобно. - person Mihai; 15.07.2020

Я бы использовал чистый подход xaml с использованием шаблонов данных. Нет необходимости в другом векторном формате или движке реднеринга. Вы можете использовать шаблон данных для каждого выражения в дереве выражений. Используя окна просмотра, вы можете добиться растяжения, поэтому самые верхние выражения будут больше, чем внутренние выражения. Ваши шаблоны данных будут генерировать визуальное дерево из вашего дерева выражений. Я имею в виду, что внутри contentpresenter будут презентаторы контента.

Большим преимуществом является то, что визуализация выражения может быть отзывчивой и интерактивной, точно так же, как математическое выражение в MS Word или Excel.

Я мог бы помочь вам с реализацией, так как это не тривиально, если вы не знакомы с шаблонами данных wpf.

person Liero    schedule 06.03.2015
comment
Однако это определенно займет много времени, чтобы реализовать это. - person Liero; 06.03.2015

Насколько я вижу, лучший рендеринг (на бумаге) достигается при поздней конвертации из векторного файла. Я бы предпочел использовать GDI+ (System.Drawing) или WPF (System.Media) для отображения формулы. Дайте мне знать, если мы можем сотрудничать в решении WPF.

person Stefan Keiman    schedule 22.12.2015