ntg-context - mailing list for ConTeXt users
 help / color / mirror / Atom feed
From: Gerion Entrup <gerion.entrup@flump.de>
To: ntg-context@ntg.nl
Subject: [NTG-context] Re: Combine lua and btx setup, was: Re: Customize citation format of a bibliography (use the short form as reference format)
Date: Thu, 25 Apr 2024 17:40:12 +0200	[thread overview]
Message-ID: <3091740.CbtlEUcBR6@falbala> (raw)
In-Reply-To: <3292943.44csPzL39Z@falbala>


[-- Attachment #1.1: Type: text/plain, Size: 8052 bytes --]

I solved it, although it's kinda hacky. I'm pretty sure that
publications.citevariants.short is not meant to be called directly.

Do you know why `context.getdetail(dataset, tag, "author")` does not work in render_cite?
It always returns nil.


```
\setupinteraction[state=start]

\startbuffer[testdata]
@Book{knuth1,
	author = {Donald E. Knuth},
	title = {TEX and METAFONT. New directions in typesetting},
	year = {1979},
	publisher = {Addison-Wesley},
}
@Article{someother,
	author = {Some Person and Some Otherperson},
	title = {Another title},
	year = {1900},
}
\stopbuffer

% enable tracing
\enabletrackers[publications, publications.crossref, publications.details, publications.cite, publications.strings]

\usebtxdataset[main][testdata.buffer]
\usebtxdefinitions[aps]
\setupbtx[dataset=main]
\definebtxrendering[bibrendering][aps][dataset=main, numbering=short]
\setupbtxlist[aps][
  alternative=b,
  distance=.5em,
]

\definebtx[aps:cite:special][aps:cite]
\startluacode
function render_cite(dataset, tag, righttext)
	local luadata = publications.datasets[dataset].luadata
	local entry = luadata[tag]
	local extrasign = ""
	if entry.author:lower():find("knuth") then
		extrasign = ">"
	end
	context("[" .. extrasign)
	print(righttext)
	publications.citevariants.short({dataset = dataset, reference = tag, variant = "short", righttext = righttext})
	context("]")
end
\stopluacode

\startsetups btx:aps:cite:special
	\btxcitereference
	\ctxlua{render_cite([==[\currentbtxdataset]==], [==[\currentbtxtag]==], [==[\currentbtxrighttext]==])}
\stopsetups
\setupbtx[aps:cite][alternative=special]

\starttext

\def\comma{,}

Knuth developed \TeX~\cite[knuth1]
Several persons said something~\cite[someother].

\placelistofpublications[bibrendering]

\stoptext
```

Gerion

Am Dienstag, 23. April 2024, 16:03:50 MESZ schrieb Gerion Entrup:
> Here is a solution for the first part of my question. This is based on
> https://www.mail-archive.com/ntg-context@ntg.nl/msg101156.html
> and try and error based on publ-imp-aps.mkvi and publ-imp-apa.mkvi:
> 
> It display now the citation _and_ numbering labels in the short form:
> ```
> \setupinteraction[state=start]
> 
> \startbuffer[testdata]
> @Book{knuth1,
> 	author = {Donald E. Knuth},
> 	title = {TEX and METAFONT. New directions in typesetting},
> 	year = {1979},
> 	publisher = {Addison-Wesley},
> }
> @Article{someother,
> 	author = {Some Person and Some Otherperson},
> 	title = {Another title},
> 	year = {1900},
> }
> \stopbuffer
> 
> % enable tracing
> \enabletrackers[publications, publications.crossref, publications.details, publications.cite, publications.strings]
> 
> \usebtxdataset[main][testdata.buffer]
> \usebtxdefinitions[aps]
> \setupbtx[dataset=main]
> \definebtxrendering[bibrendering][aps][dataset=main, numbering=short]
> \setupbtxlist[aps][
>   alternative=b,
>   distance=.5em,
> ]
> \setupbtx[aps:cite][alternative=short]
> 
> \starttext
> 
> Knuth developed \TeX \cite[knuth1]
> Several persons said something \cite[someother].
> 
> \placelistofpublications[bibrendering]
> 
> \stoptext
> ```
> 
> The remaining part now is to mark publications of Knuth in a different way.
> I have tried this and failed. Here is my code so far:
> ```
> \startluacode
> function render_cite(short, author)
> 	print(author)
> 	if author:lower():find("knuth") then
> 		context("[>" .. short .. "]")
> 	else
> 		context("[" .. short .. "]")
> 	end
> end
> \stopluacode
> \definebtx[aps:cite:special][aps:cite]
> \startsetups btx:aps:cite:special
> 	\btxcitereference
> 	\ctxlua{render_cite([==[\btxflush{year}]==], [==[\btxflush{author}]==])}
> \stopsetups
> % use it with \cite[special][knuth1]
> ```
> This has several problems:
> - \btxflush{short} does not work as I expected that. How can I get the short form?
> - \btxflush to pass arguments to lua does not work as intended. On the lua side the
>    variable "author" resolves to "\btxflushauthor{author}" and not to "D. E. Knuth".
>    How can I pass the data?
> 
> I use Lua only because I find it more convenient as a programming language. If a
> plain tex solution is simpler, I'm happy to use that. 
> 
> 
> Another question that came up while studying the source code:
> What effect have \c!, \s!, and \v!? These commands exist a lot in the above
> cited files.
> 
> Gerion
> 
> 
> Am Mittwoch, 17. April 2024, 15:44:12 MESZ schrieb Gerion Entrup:
> > Hi,
> > 
> > > The APS style is an example of a number-based citation system. As you
> > > are looking for a tag-based citation, it might be better to start with
> > > something like the APA style.
> > 
> > I'm kind of satisfied with the publication-list layout of the APS style so I chose
> > this as a base. If it is simpler to start with the APA style, I can do that.
> > 
> > My hope is that it is possible to just change the "label" that is used for
> > referencing and keep everything else as is.
> > 
> > > Is there some specification for your short tag-based citation style?
> > 
> > biblatex implements this with the "alphabetic" style. I'm not aware of
> > a specification, though. Does the "short" form in ConTeXt exist for a
> > specific reason? :)
> > 
> > Gerion
> > 
> > > On Tue, 16 Apr 2024 06:04:35 +0200
> > > Gerion Entrup <gerion.entrup@flump.de> wrote:
> > > 
> > > > Hi,
> > > > 
> > > > I'm trying to customize a cite format in a bibliography. Currently,
> > > > I'm using the aps style which fits so far, except of the plain number
> > > > as reference. In concrete, I want to change the following:
> > > > - Use the first letter of the last name and the year as reference
> > > > (this should be exactly the short form). It is more less also
> > > > described here [1].
> > > > - Highlight publications of a certain author with an extra char (e.g.
> > > > '>')
> > > > 
> > > > Here is a minimal example (lets assume, every occurrence of Knuth
> > > > should be highlighted): ```
> > > > \setupinteraction[state=start]
> > > > 
> > > > \startbuffer[testdata]
> > > > @Book{knuth1,
> > > > 	author = {Donald E. Knuth},
> > > > 	title = {TEX and METAFONT. New directions in typesetting},
> > > > 	year = {1979},
> > > > 	publisher = {Addison-Wesley},
> > > > }
> > > > @Article{someother,
> > > > 	author = {Some Person and Some Otherperson},
> > > > 	title = {Another title},
> > > > 	year = {1900},
> > > > }
> > > > \stopbuffer
> > > > 
> > > > % enable tracing
> > > > \enabletrackers[publications, publications.crossref,
> > > > publications.details, publications.cite, publications.strings]
> > > > 
> > > > \usebtxdataset[main][testdata.buffer]
> > > > \usebtxdefinitions[aps]
> > > > \setupbtx[dataset=main]
> > > > \definebtxrendering[bibrendering][aps][dataset=main]
> > > > 
> > > > % this seems to have no effect?
> > > > \setupbtx[alternative=short]
> > > > 
> > > > \starttext
> > > > 
> > > > Knuth developed \TeX \cite[knuth1].
> > > > Several persons said something \cite[someother].
> > > > 
> > > > \placelistofpublications[bibrendering]
> > > > 
> > > > \stoptext
> > > > ```
> > > > 
> > > > It should be rendered as:
> > > > ```
> > > > Knuth developed TeX [>Knu79].
> > > > Several persons said something [PO00].
> > > > 
> > > > [Knu79]	D.E. Knuth, TEX and METAFONT. New directions in
> > > > typesetting (Addi­son-Wesley, 1979). [PO00]	S. Person and S.
> > > > Otherperson, Another title, (1900). ```
> > > > 
> > > > How can I achieve that \cite[something] always renders in the short
> > > > form by default? How can I customize that references to Knuth contain
> > > > this extra '>'? How can I customize the APS style to also use the
> > > > short form in the list of publications instead of numbers?
> > > > 
> > > > Best
> > > > Gerion
> > > > 
> > > > [1]
> > > > https://tex.stackexchange.com/questions/295444/citation-style-with-first-letters-of-authors-lastname
> 


[-- Attachment #1.2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 659 bytes --]

[-- Attachment #2: Type: text/plain, Size: 511 bytes --]

___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!

maillist : ntg-context@ntg.nl / https://mailman.ntg.nl/mailman3/lists/ntg-context.ntg.nl
webpage  : https://www.pragma-ade.nl / https://context.aanhet.net (mirror)
archive  : https://github.com/contextgarden/context
wiki     : https://wiki.contextgarden.net
___________________________________________________________________________________

      reply	other threads:[~2024-04-25 15:42 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-04-16  4:04 [NTG-context] " Gerion Entrup
2024-04-17 13:06 ` [NTG-context] " Alan Braslau via ntg-context
2024-04-17 13:44   ` Gerion Entrup
2024-04-23 14:03     ` [NTG-context] Combine lua and btx setup, was: " Gerion Entrup
2024-04-25 15:40       ` Gerion Entrup [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=3091740.CbtlEUcBR6@falbala \
    --to=gerion.entrup@flump.de \
    --cc=ntg-context@ntg.nl \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).