Looks like it was just a small oversight on my part; I had to make sure I added a corresponding \s!btx:\s!list:\s!author:invertedfirst setup for list entries. Here's what finally works: ``` \startsetups \s!btx:\s!cite:\s!author:invertedfirst \ifnum\currentbtxauthorindex>\plusone \fastsetup{\s!btx:\s!cite:\s!author:normal} \else \fastsetup{\s!btx:\s!cite:\s!author:inverted} \fi \stopsetups ... \startsetups \s!btx:\s!list:\s!author:invertedfirst \ifnum\currentbtxauthorindex>\plusone \fastsetup{\s!btx:\s!list:\s!author:normal} \else \fastsetup{\s!btx:\s!list:\s!author:inverted} \fi \stopsetups ``` Thanks again, Hans! Joey On Wed, Sep 15, 2021 at 10:13 AM Joey McCollum wrote: > Good suggestion! I removed my changes to publ-aut.lua for now and tried > adding each of the two setups you described to publ-imp-author.mkvi (where > it seemed to fit best). But simply specifying > > ``` > \definebtx > [sbl:\s!list:author] > [sbl:\s!list] > [\c!authorconversion=invertedfirst] > ``` > > in my custom rendering file does not access the invertedfirst setup, > regardless of which of the two setups I use. Do I have to do something > different to access it? > > Thanks! > > On Wed, Sep 15, 2021 at 4:18 AM Hans Hagen wrote: > >> On 9/15/2021 5:06 AM, Joey McCollum via ntg-context wrote: >> > All right, I figured out where I needed to make this change for it to >> > take effect. The relevant script is publ-aut.lua. The code I needed to >> > change was for the "oneauthor" function definition, which itself is >> > located in the "btxauthor" function definition. My changes are detailed >> > below: >> >> did you try to stay at the tex end? like: >> >> % \startsetups \s!btx:\s!cite:\s!author:invertedfirst >> % \ifnum\currentbtxauthorindex>\plusone >> % \btxsetauthorvariant{inverted} >> % \else >> % \btxsetauthorvariant{normal} >> % \fi >> % \fastsetup{\s!btx:\s!cite:\s!author:\btxauthorvariant} >> % \stopsetups >> >> \startsetups \s!btx:\s!cite:\s!author:invertedfirst >> \ifnum\currentbtxauthorindex>\plusone >> \fastsetup{\s!btx:\s!cite:\s!author:inverted} >> \else >> \fastsetup{\s!btx:\s!cite:\s!author:normal} >> \fi >> \stopsetups >> >> >> >> > ``` >> > local function oneauthor(i,last,justone) >> > local author = split[i] >> > if index then >> > ctx_btxstartauthor(i,1,0) >> > elseif last then >> > ctx_btxstartauthor(i,1,0) >> > ctx_btxsetconcat(0) >> > if combiner == "invertedfirst" then >> > if i == 1 then >> > ctx_btxsetauthorvariant("inverted") >> > else >> > ctx_btxsetauthorvariant("normal") >> > end >> > else >> > ctx_btxsetauthorvariant(combiner) >> > end >> > else >> > local state = author.state or 0 >> > ctx_btxstartauthor(i,max,state) >> > ctx_btxsetconcat(concatstate(i,max)) >> > if combiner == "invertedfirst" then >> > if i == 1 then >> > ctx_btxsetauthorvariant("inverted") >> > else >> > ctx_btxsetauthorvariant("normal") >> > end >> > else >> > ctx_btxsetauthorvariant(combiner) >> > end >> > end >> > local initials = author.initials >> > if initials and #initials > 0 then >> > ctx_btxsetinitials() -- >> > (concat(the_initials(initials,symbol)," ")) >> > end >> > local firstnames = author.firstnames >> > if firstnames and #firstnames > 0 then >> > ctx_btxsetfirstnames() -- (concat(firstnames," ")) >> > end >> > local vons = author.vons >> > if vons and #vons > 0 then >> > ctx_btxsetvons() -- (concat(vons," ")) >> > end >> > local surnames = author.surnames >> > if surnames and #surnames > 0 then >> > ctx_btxsetsurnames() -- (concat(surnames," ")) >> > end >> > local juniors = author.juniors >> > if juniors and #juniors > 0 then >> > ctx_btxsetjuniors() -- (concat(juniors," ")) >> > end >> > if not index and i == max then >> > if split.others then >> > ctx_btxsetoverflow(1) >> > else >> > local overflow = #split - max >> > if overflow > 0 then >> > ctx_btxsetoverflow(overflow) >> > end >> > end >> > end >> > if combiner == "invertedfirst" then >> > if i == 1 then >> > ctx_btxsetup("inverted") >> > else >> > ctx_btxsetup("normal") >> > end >> > else >> > ctx_btxsetup(combiner) >> > end >> > ctx_btxstopauthor() >> > end >> > ``` >> > >> > I'll admit that the addition of entire if-else blocks around whether or >> > not the combiner is a specific value may not be the best practice in >> > terms of future maintenance (especially if similar index-dependent >> > authorconversions are needed in the future). Alternatively, the >> > "btxauthor" function could populate a "combiners" array of length "max" >> > with a specific authorconversion for each author in the split; for most >> > authorconversions, all entries in this array would be the same, but for >> > authorconversions like "invertedfirst", the first entry would be >> > different from the rest. Then, the "oneauthor" function could just >> > reference combiners[i] instead of combiner. >> > >> > Joey >> > >> > On Fri, Sep 3, 2021 at 10:48 PM Joey McCollum >> > > >> wrote: >> > >> > Hi, >> > >> > I mentioned this in an earlier e-mail but thought that now might be >> > a good time to describe this issue in detail. I'd like to define a >> > new authorconversion that renders the first author in a list >> > differently than the remaining authors in the list. Specifically, >> > I'd like to use the "inverted" authorconversion for the first author >> > and the "normal" authorconversion for the rest. >> > >> > In the newer bibl-bib.lua file, I can see what I might have to >> > modify to accomplish this (I added the if combiner == >> > "invertedfirst" block): >> > >> > ``` >> > function authors.concat(author,combiner,what,settings) >> > if type(combiner) == "string" then >> > combiner = authors[combiner or "normal"] or authors.normal >> > end >> > local split = splitauthors(author) >> > local setting = settings[what] >> > local etallimit, etaldisplay, etaltext = 1000, 1000, "" >> > if setting then >> > etallimit = settings.etallimit or 1000 >> > etaldisplay = settings.etaldisplay or etallimit >> > etalltext = settings.etaltext or "" >> > end >> > local max = #split >> > if max > etallimit and etaldisplay < max then >> > max = etaldisplay >> > end >> > if combiner == "invertedfirst" then >> > for i=1,max do >> > if i == 1 then >> > split[i] = authors.inverted(split[i],settings) >> > else >> > split[i] = authors.normal(split[i],settings) >> > end >> > >> > end >> > else >> > for i=1,max do >> > split[i] = combiner(split[i],settings) >> > end >> > end >> > local result = bibtexconcat(split,settings) >> > if max < #split then >> > return result >> > else >> > return result .. etaltext >> > end >> > end >> > ``` >> > >> > Unfortunately, this doesn't seem to do anything. It's not clear to >> > me how bibl-bib.lua and bibl-bib.mkiv are being used by the other >> > publication support modules, if they're being used at all >> > (publ-ini.mkiv doesn't appear to register it, anyway). Is there >> > another file I'd have to change to make "invertedfirst" a working >> > authorconversion? Is there a similar block of code in publ-ini.lua >> > where I should be implementing this change instead? >> > >> > Thanks! >> > >> > Joey >> > >> > >> > >> ___________________________________________________________________________________ >> > If your question is of interest to others as well, please add an entry >> to the Wiki! >> > >> > maillist : ntg-context@ntg.nl / >> http://www.ntg.nl/mailman/listinfo/ntg-context >> > webpage : http://www.pragma-ade.nl / http://context.aanhet.net >> > archive : https://bitbucket.org/phg/context-mirror/commits/ >> > wiki : http://contextgarden.net >> > >> ___________________________________________________________________________________ >> > >> >> >> -- >> >> ----------------------------------------------------------------- >> Hans Hagen | PRAGMA ADE >> Ridderstraat 27 | 8061 GH Hasselt | The Netherlands >> tel: 038 477 53 69 | www.pragma-ade.nl | www.pragma-pod.nl >> ----------------------------------------------------------------- >> >