I think I now understand the code of Szabolcs and can try to explain it.
The code is txt[a_,b_,c:{_?NumericQ,_?NumericQ}:{0,0},d:{_?NumericQ,_?NumericQ}:{1,0},opt:OptionsPattern[]]:=Text[Style[a,opt,FontFamily->"Times",FontSize->ftsz],b,c,d] and it does what I asked. But it is not simple, so I explain.
Starting from the end, opt:OptionsPattern[], takes any rules that appear in a syntax like txt[string,coords,rules]. Those will get passed to the Style command inside Text. That was easy. The hard part is allowing the addition of two more optional arguments before the rules for the text alignment and direction.
Before the options come two specifications like c:{_?NumericQ,_?NumericQ}. The first corresponds to text alignment and its default is set to {0,0}. The second corresponds to text direction and its default is set to {1,0}. The entire syntax of this element is c:{_?NumericQ,_?NumericQ}:{0,0}, to use the example of the first case of alignment. The second colon establishes the default value. The first colon tests for the existence of a pattern. The pattern follows the first colon and is a list with two elements, the two underscores inside the braces. Test this with tst[x:{_,_}]:=Plus@@x; this remains unevaluated unless it receives a list of two elements. Similarly, txt as defined remains unevaluated if it gets a list of three numbers where it expects the alignment list, which should have length of two.
Then, the syntax ?NumericQ following each underscore in each list checks so that the pattern is recognized only if it is a list of two numbers. Thus, again, a list of a number and a symbol will remain unevaluated.
Note that c is not followed with an underscore but with a pattern-matching test because the intent is to not let the function receive any expression as c. Rather, we saw that the pattern was defined to only be a list, only of two elements, and only of numerical elements.
Finally, the default nature of the specification of the font and its size relies on the fact that Mma allows duplication of option assignments and uses only the first assignment. Thus, if the user sends txt[string,coords,FontSize->20], the Style command receives two FontSize rules, one from the user and one from the function definition. In this case, Style ignores the second rule and prints with size 20. If no options are passed, then Style receives only one rule about font size only from the definition of the function and the FontSize will be the default set when we defined the function, ftsz.
Also, as you are experimenting with defining something like this, precede it with a ClearAll[definedfunction] so that tests that deviate from the new definition do not end up applying an older one.
I think this answers it. I hope I understood the code correctly. Please advise so I can correct it. Many thanks for helping me out.
canddspecific enough that they can't match any options. See thename : patt : valuesyntax.eshould bee : OptionsPattern[]. – Szabolcs Nov 10 '16 at 12:48txt[a_, b_, c : {_?NumericQ, _?NumericQ} : {0, 0}, d : {_?NumericQ, _?NumericQ} : {1, 0}, opt : OptionsPattern[]] := Text[Style[a, opt, FontFamily -> "Times"], b, c, d]to be specific. This is from following the steps in the linked answer directly. It may not be trivial but I don't think it can be made simpler. InStyleoptmust come before any default options you give, to make sure the defaults are overridable. – Szabolcs Nov 10 '16 at 12:51txt["ab", {1, 1}, FontFamily -> "Arial"]inside aGraphicsstatement I get an error. No surprise, because its output isText["ab", {1, 1}, FontFamily -> "Arial", {1, 0}]– Nicholas G Nov 10 '16 at 15:41