Подтвердить что ты не робот

Улучшите позиционирование индекса и надстроки на ярлыках node

При использовании обоих индексов и надстроек на ярлыке node можно ли изменить расположение так, чтобы они находились непосредственно друг над другом.

Пример:

digraph G {
        x11[label=<X<SUB>1</SUB><SUP>(1)</SUP>>];   
        x21[label=<X<SUB>2</SUB><SUP>(1)</SUP>>];
        x11 -> x21 
    }

Что производит

введите описание изображения здесь

Возможно ли иметь (#) непосредственно над #, а не слегка вправо? спасибо


Я попытался добавить пользовательский css script (re: HTML: могу ли я разместить текст подстрочного текста под верхним индексом?)  к моему dot script с stylesheet = "styles.css"; (re: Использование классов CSS в HTML-методах на Graphviz), однако он возвращает ошибку

Ошибка: Неизвестный элемент HTML <span> в строке 1

4b9b3361

Ответ 1

Настраиваемый HTML-образный node рендеринг Graphviz довольно ограничен. Документы Graphviz ясно говорят об этом. Я не верю, что есть способ уговорить его сделать то, что вы хотите. Даже если есть способ настроить, например, a <table>, чтобы сделать это, результаты, вероятно, будут выглядеть плохо.

Поэтому я рекомендую вам посмотреть dot2tex. Его цель - предоставить полную мощность LaTeX для рендеринга узлов. Настройка не является тривиальной, но результаты ее стоит.

Здесь страница показывает примеры графиков, содержащих математическую математику LaTeX в узлах.

Вы не сказали, какой должен быть результат. Но есть способы конвертировать LaTeX во многие разные формы. Самый простой - Postscript и PDF. Но форматы изображений также возможны.

Добавление

Хорошо, я установил dot2tex, и вот результат:

Граф GraphViz со стековыми индексами под верхними индексами

Здесь соответствующий код dot:

digraph G {
  a_1 [texlbl="$X_{1}^{(1)}$"];
  a_2 [texlbl="$X_{1}^{(2)}$"];
  a_3 [texlbl="$X_{1}^{(3)}$"];
  a_1-> a_2 -> a_3 -> a_1;
}

Скомпилирован с

$ dot2tex foo.gv -f tikz > foo.tex
$ pdflatex foo.tex

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

Ответ 2

В документах Graphviz их "HTML-подобные ярлыки" не включают элемент span, а теги стиля шрифта не используются разрешите атрибут стиля (или любой другой):

<SUB
  <!-- No attributes -->
>

<SUP
  <!-- No attributes -->
>

Два лучших варианта для точного компоновки текста выглядят следующим образом:

1) Используйте метку с таблицей, подобной html, что позволяет настраивать стиль (и в любом случае обрабатывает вертикально размещенный текст).

x11[label=<
    <TABLE border="0" cellborder="0" cellspacing="0">
    <TR><TD rowspan="2" style="...">X</TD><TD style="...">(1)</TD></TR>
    <TR>                                  <TD style="...">1</TD></TR>
    </TABLE>>];

2) Если вы используете драйвер PostScript, полностью переопределите генерацию node и поставьте файл ps, который рисует именно то, что вы хотите.

Ответ 3

Возможно, мы могли бы представить более мощный рендеринг HTML (я только что заметил litehtml и sciter, который не является открытым исходным кодом), который, вероятно, имеет свою собственную систему make, потенциальные проблемы безопасности, собственный шрифт и управление именами цветов, общие строки, С++ зависимостей компилятора, утечек памяти и litehtml, например, всего лишь 16K строк кода, которые в наши дни едва перемещают метр для нас, просто я всегда чувствую себя немного виноватым, когда вижу твиты о том, как построить графический интерфейс сложнее, чем ядро ​​linux. Стивен Норт