Я хочу рисоватьнесколько фрагментов текстакоторые должны быть выровнены, поэтому мне нужно иметь возможностьразместите эти тексты в соответствии с их исходной линией.
В руководстве MetaFun на страницах 143–144 объясняется, что выравнивание базовой линии может быть достигнуто несколькими методами:
- определение текста с помощью
\setMPtext
и вызовdraw
объекта, возвращаемого\MPbetex
, draw
объект, возвращаемыйtextext.origin
,draw
объект, возвращаемыйthelabel.origin
.
Однако, когда я тестирую эти три метода с помощью следующего кода, только первый из них работает правильно.
\starttext
\setMPtext {1} {Foo}
\setMPtext {2} {Bap}
\startMPpage
draw \MPbetex{1} shifted (0,0);
draw \MPbetex{2} shifted (0.5cm,0);
draw textext.origin("Foo") shifted (0,-1cm);
draw textext.origin("Bap") shifted (0.5cm,-1cm);
draw thelabel.origin("Foo",(0,-2cm));
draw thelabel.origin("Bap",(0.5cm,-2cm));
\stopMPpage
\stoptext
Это их способвыравнивание текста по базовой линии без необходимости «предварительного объявления» всех частейс \setMPtext
?
решение1
Определение по \MPbetex
сути гласит:
\def\MPbetex #1{btex \begincsname\??mptext#1\endcsname\space etex}
То есть, он просто получает строку, сохраненную с помощью \MPtext
и помещает ее между btex ... etex
. Конечно, вы также можете сделать это вручную.
\startMPpage
draw btex Foo etex shifted (0,0);
draw btex Bap etex shifted (0.5cm,0);
\stopMPpage