If you're familiar with setting up command buttons/tools you might this macro useful for creating arc-aligned text.
The macro prompts you to pick three points along an arc: the start, a mid point and the end point, just as you would if you were drawing the arc. These points are used to calculate the centre point and determine the direction and orientation of the text. You will then be asked to enter the text at the command line. You will see a prompt to set the system variable PSPROLOG which is used to store the text you type in. This variable is used because it doesn't treat typing a space as being the same as pressing enter and also means you can include quotes in your text. The only restriction is the characters \ and $ can't be used because they have special meaning in the diesel language and will crash the macro.
The individual letters of the text will then be plotted as separate MTEXT objects equally space along the line of the arc from the start point to the end point and passing through the second point. If your current text style doesn't have a fixed height then you will need to set TEXTSIZE to the height you want before you start the macro, or it will use the height of the last text you created.
*^C^C$m=$(if,$(or,$(eq,$(getenv,pgm_c),0),$(eq,$(getenv,pgm_c),)),$(if,$(and,$(getvar,menuecho),5),,^p)menuecho;3;$(if,$(and,$(getvar,menuecho),4),^p)_setenv;pgm_c;1)$(if,$(eq,$(getenv,pgm_c),1),_setenv;pgm_c;0;;pgm_msg;""""""""""Pick arc start point:"""""""""";_getenv;pgm_msg;_id;\_setenv;pgm_c;2)$(if,$(eq,$(getenv,pgm_c),2),_setenv;pgm_c;0;;pgm_spt;$(getvar,lastpoint);;pgm_msg;""""""""""Pick arc mid point:"""""""""";_getenv;pgm_msg;_id;\_setenv;pgm_c;3)$(if,$(eq,$(getenv,pgm_c),3),_setenv;pgm_c;0;;pgm_mpt;$(getvar,lastpoint);;pgm_msg;""""""""""Pick arc end point:"""""""""";_getenv;pgm_msg;_id;\_setenv;pgm_c;4)$(if,$(eq,$(getenv,pgm_c),4),_setenv;pgm_c;0;;pgm_ept;$(getvar,lastpoint);;pgm_c;5)$(if,$(eq,$(getenv,pgm_c),5),_setenv;pgm_c;0;;pgm_msg;""""""""""Enter text:"""""""""";_getenv;pgm_msg;_menuecho;1;_psprolog;\_menuecho;3;_setenv;pgm_c;6)$(if,$(eq,$(getenv,pgm_c),6),_setenv;pgm_c;0;;pgm_slen;$(strlen,$(getvar,psprolog));;pgm_c;7)$(if,$(eq,$(getenv,pgm_c),7),_setenv;pgm_c;$(if,$(=,$(getenv,pgm_slen),0),end,10))$(if,$(eq,$(getenv,pgm_c),10),_setenv;pgm_c;0;;pgm_pt1;'_cal;plt([$(getenv,pgm_spt)],[$(getenv,pgm_mpt)],0.5);\;pgm_c;11)$(if,$(eq,$(getenv,pgm_c),11),_setenv;pgm_c;0;;pgm_pt2;'_cal;plt([$(getenv,pgm_mpt)],[$(getenv,pgm_ept)],0.5);\;pgm_c;12)$(if,$(eq,$(getenv,pgm_c),12),_setenv;pgm_c;0;;pgm_pt3;'_cal;[$(getenv,pgm_pt1)]+nor([$(getenv,pgm_spt)],[$(getenv,pgm_mpt)]);\;pgm_c;13)$(if,$(eq,$(getenv,pgm_c),13),_setenv;pgm_c;0;;pgm_pt4;'_cal;[$(getenv,pgm_pt2)]+nor([$(getenv,pgm_mpt)],[$(getenv,pgm_ept)]);\;pgm_c;14)$(if,$(eq,$(getenv,pgm_c),14),_setenv;pgm_c;0;;pgm_cpt;'_cal;ill([$(getenv,pgm_pt1)],[$(getenv,pgm_pt3)],[$(getenv,pgm_pt2)],[$(getenv,pgm_pt4)]);\;pgm_c;20)$(if,$(eq,$(getenv,pgm_c),20),_setenv;pgm_c;0;;pgm_rad;'_cal;dist([$(getenv,pgm_cpt)],[$(getenv,pgm_spt)]);\;pgm_c;21)$(if,$(eq,$(getenv,pgm_c),21),_setenv;pgm_c;0;;pgm_sang;'_cal;ang([$(getenv,pgm_cpt)],[$(getenv,pgm_spt)]);\;pgm_c;22)$(if,$(eq,$(getenv,pgm_c),22),_setenv;pgm_c;0;;pgm_eang;'_cal;ang([$(getenv,pgm_cpt)],[$(getenv,pgm_ept)]);\;pgm_c;23)$(if,$(eq,$(getenv,pgm_c),23),_setenv;pgm_c;0;;pgm_aang;'_cal;ang([$(getenv,pgm_cpt)],[$(getenv,pgm_spt)],[$(getenv,pgm_ept)]);\;pgm_c;24)$(if,$(eq,$(getenv,pgm_c),24),_setenv;pgm_c;0;;pgm_mang;'_cal;ang([$(getenv,pgm_cpt)],[$(getenv,pgm_spt)],[$(getenv,pgm_mpt)]);\;pgm_td;1;;pgm_c;25)$(if,$(eq,$(getenv,pgm_c),25),_setenv;pgm_c;$(if,$(<,$(getenv,pgm_mang),$(getenv,pgm_aang)),30,26))$(if,$(eq,$(getenv,pgm_c),26),_setenv;pgm_c;0;;pgm_td;-1;;pgm_aang;$(-,360,$(getenv,pgm_aang));;pgm_c;30)$(if,$(eq,$(getenv,pgm_c),30),_setenv;pgm_c;0;;pgm_tang;$(getenv,pgm_sang);;pgm_i;1;;pgm_c;31)$(if,$(eq,$(getenv,pgm_c),31),_setenv;pgm_c;0;;pgm_ainc;$(*,$(/,$(getenv,pgm_aang),$(-,$(getenv,pgm_slen),1)),$(getenv,pgm_td));;pgm_c;loop)$(if,$(eq,$(getenv,pgm_c),loop),_setenv;pgm_c;0;;pgm_chr;""""""""""$(substr,$(getvar,psprolog),$(getenv,pgm_i),1)"""""""""";;pgm_tr;$(+,$(getenv,pgm_tang),$(*,$(getenv,pgm_td),90));;pgm_c;41)$(if,$(eq,$(getenv,pgm_c),41),_setenv;pgm_c;$(if,$(eq,$(getenv,pgm_chr), ),43,42))$(if,$(eq,$(getenv,pgm_c),42),_setenv;pgm_c;0;_-mtext;_from;_none;$(getenv,pgm_cpt);_none;@$(getenv,pgm_rad)<$(getenv,pgm_tang);_justify;_mc;_rotation;$(getenv,pgm_tr);_width;0;$(getenv,pgm_chr);;_setenv;pgm_c;43)$(if,$(eq,$(getenv,pgm_c),43),_setenv;pgm_c;0;;pgm_i;$(+,$(getenv,pgm_i),1);;pgm_tang;$(+,$(getenv,pgm_tang),$(getenv,pgm_ainc));;pgm_c;44)$(if,$(eq,$(getenv,pgm_c),44),_setenv;pgm_c;$(if,$(<=,$(getenv,pgm_i),$(getenv,pgm_slen)),loop,end))$(if,$(eq,$(getenv,pgm_c),end),_setenv;pgm_c;0;_menuecho;0;^c^c$)
For anyone who might be interested in how the macro works I've attached a text file with a list of the variables used and line by line documentation of the code.