+static string const textgreek_def =
+ "\\DeclareRobustCommand{\\greektext}{%\n"
+ " \\fontencoding{LGR}\\selectfont\n"
+ " \\def\\encodingdefault{LGR}}\n"
+ "\\DeclareRobustCommand{\\textgreek}[1]{\\leavevmode{\\greektext #1}}\n"
+ "\\DeclareFontEncoding{LGR}{}{}\n";
+
+static string const textcyr_def =
+ "\\DeclareRobustCommand{\\cyrtext}{%\n"
+ " \\fontencoding{T2A}\\selectfont\n"
+ " \\def\\encodingdefault{T2A}}\n"
+ "\\DeclareRobustCommand{\\textcyr}[1]{\\leavevmode{\\cyrtext #1}}\n"
+ "\\DeclareFontEncoding{T2A}{}{}\n";
+
+static string const newlyxcommand_def =
+ "%% Math macros with multiple optional parameters\n"
+ "% #1<-\\foo\n"
+ "\\def\\newlyxcommand#1{\n"
+ " \\@ifnextchar[%]\n"
+ " {\\newlyxcommand@arity{#1}}\n"
+ " {\\newlyxcommand@arity{#1}[0]}\n"
+ "}\n"
+ "\n"
+ "% #1<-\\foo #2<-arity\n"
+ "\\def\\newlyxcommand@arity#1[#2]{\n"
+ " \\@ifnextchar[%]\n"
+ " {\\newlyxcommand@firstopt{#1}{}{#2}}\n"
+ " {\\newlyxcommand@def#1{#2}}\n"
+ "}\n"
+ "\n"
+ "% #1<-\\foo #2<-iii #3<-arity #4<-default value for (#2+1)th argument\n"
+ "\\def\\newlyxcommand@firstopt#1#2#3[#4]{\n"
+ " % ##1<-\\foo@\n"
+ " \\def\\@defclause##1{\n"
+ " \\def#1{\n"
+ " \\@ifnextchar[%]\n"
+ " {##1{}{#4}}\n"
+ " {##1{}{#4}[#4]}}\n"
+ " }\n"
+ " \\expandafter\\@defclause\\csname\\expandafter\\@gobble\\string#1@\\endcsname\n"
+ " \\@ifnextchar[%]\n"
+ " {\\newlyxcommand@opt{#1}{#2}{#3}}\n"
+ " {\\newlyxcommand@last{#1}{#2}{#3}[#4]}\n"
+ "}\n"
+ "\n"
+ "\\begingroup\n"
+ "\\catcode`\\Q=3\n"
+ "\\gdef\\@myempty{Q}\n"
+ "\\endgroup\n"
+ "\n"
+ "% #1<-\\foo #2<-iii #3<-arity #4<-default value for (#2+1)th argument\n"
+ "\\def\\newlyxcommand@opt#1#2#3[#4]{\n"
+ " % ##1<-\\foo@iii ##2<-\\foo@iiii \n"
+ " % ####1<-{a}{b}{c} ####2<-default value ####3<- default arg\n"
+ " \\def\\@defclause##1##2{\n"
+ " \\def##1####1####2[####3]{\n"
+ " \\ifx\\@myempty####3\\@myempty%\n"
+ " \\def\\@callnext{\n"
+ " \\@ifnextchar[%]\n"
+ " {##2{####1{####2}}{#4}}\n"
+ " {##2{####1{####2}}{#4}[#4]}\n"
+ " }\n"
+ " \\else\n"
+ " \\def\\@callnext{\n"
+ " \\@ifnextchar[%]\n"
+ " {##2{####1{####3}}{#4}}\n"
+ " {##2{####1{####3}}{#4}[#4]}\n"
+ " }\n"
+ " \\fi\n"
+ " \\@callnext\n"
+ " }\n"
+ " }\n"
+ " \\expandafter\\def\\expandafter\\@clausename\\expandafter{\\csname\\expandafter\\@gobble\\string#1@#2\\endcsname}\n"
+ " \\expandafter\\def\\expandafter\\@nextclausename\\expandafter{\\csname\\expandafter\\@gobble\\string#1@#2i\\endcsname}\n"
+ " \\expandafter\\expandafter\\expandafter \n"
+ " \\@defclause\\expandafter\\@clausename\\@nextclausename\n"
+ " \\@ifnextchar[%]\n"
+ " {\\newlyxcommand@opt{#1}{#2i}{#3}}\n"
+ " {\\newlyxcommand@last{#1}{#2i}{#3}[#4]}\n"
+ "}\n"
+ "\n"
+ "% #1<-\\foo #2<-iii #3<-arity #4<-default value for (#2+1)th argument\n"
+ "\\def\\newlyxcommand@last#1#2#3[#4]{\n"
+ " \\def\\@defclause##1##2{\n"
+ " \\def##1####1####2[####3]{\n"
+ " \\ifx\\@myempty####3\\@myempty%\n"
+ " \\def\\@callnext{##2####1{####2}}\n"
+ " \\else\n"
+ " \\def\\@callnext{##2####1{####3}}\n"
+ " \\fi\n"
+ " \\@callnext\n"
+ " }\n"
+ " }\n"
+ " \\expandafter\\def\\expandafter\\@clausename\\expandafter{\\csname\\expandafter\\@gobble\\string#1@#2\\endcsname}\n"
+ " \\expandafter\\def\\expandafter\\@nextclausename\\expandafter{\\csname\\expandafter\\@gobble\\string#1@#2i\\endcsname}\n"
+ " \\expandafter\\expandafter\\expandafter\n"
+ " \\@defclause\\expandafter\\@clausename\\@nextclausename\n"
+ " \\expandafter\\newlyxcommand@def\\csname\\expandafter\\@gobble\\string#1@#2i\\endcsname{#3}\n"
+ "}\n"
+ "\n"
+ "% #1<-\\foo #2<-arity #3<-definition\n"
+ "\\def\\newlyxcommand@def#1#2#3{\n"
+ " \\ifx#20\n"
+ " \\def#1{#3}\n"
+ " \\else\n"
+ " \\def\\@splitargs##1#2##2.{\\def#1##1#2}\\@splitargs##1##2##3##4##5##6##7##8##9.{#3}\n"
+ " \\fi\n"
+ "}\n";
+