I have created an enhanced #quote function to support, in addition to an attribution, restatements and translations. Translation is used to present a quotation that is not in the language of the article in the language of the article; restatement is used to present a quotation in a different form (antiqua instead of an original fraktur type face, or phonetically, or translated into a third language.) There may be multiple restatements and translations. My current code handles the multiples well, but I cannot seem to get a second level of array working to support specification of the language of a restatement so that it is properly hyphenated.
Restatements are almost always in the language of the original quotation, but not always (consider phonetic transcriptions, or instances as shown here where Latin is used to restate a Greek original). So, I would prefer not to explicitly state a language, but only state it for the exceptional cases. I would expect an array like;
restatement: (
[restatement_in_language_of_quotation],
( [other_language_code], [restatement_in_other_language]),
( [null_language_code], [phonetic transcription])
)
should work, but I cannot get that working.
The code so far:
#let QGray = luma(175)
#let QInset = 2em
#let QScale = 1.1818em // roughly 13pt for 11pt text
#let QAOpen = [#text(size: QScale, fill: QGray)[--]]
#let QAIndent = -4mm // Indent for attribution decoration
#let QROpen = [#text(size: QScale, fill: QGray)[\[]]
#let QRClose = [#text(size: QScale, fill: QGray)[#sym.wj\]]]
#let QRIndent = -2.5mm // Indent for attribution decoration
#let QTOpen = [#text(size: QScale, fill: QGray)[\(]]
#let QTClose = [#text(size: QScale, fill: QGray)[#sym.wj\)]]
#let QTIndent = -2.5mm // Indent for attribution decoration
#let Quote(
label: none,
attribution: none,
restatement: (),
translation: (),
lang: none,
body,
) = {
if restatement != none [
#if type(restatement) != array {
restatement = (restatement,)
}
]
if translation != none [
#if type(translation) != array {
translation = (translation,)
}
]
block(
above: 0em, //-0.5em,
below: 0em, //-0.5em,
inset: QInset,
[
#if lang != none [
#set text(
lang: lang
)
]
#body
#if restatement != none [
#for restate in restatement [
#par(
first-line-indent: QRIndent
)[
#QROpen
#restate
#QRClose
]
]
]
#if translation != none [
#for trans in translation [
#par(
first-line-indent: QTIndent
)[
#QTOpen
#trans
#QTClose
]
]
]
#if attribution != none [
#par(
first-line-indent: QAIndent
)[
#QAOpen
#attribution
]
]
]
)
}
#Quote(
attribution: [Synesius of Cyrene (_circa_ 370--_circa_ 413) in modernized Greek, followed by Latin restatements (1) as used by Robert Burton in _The Anatomy of Melancholy_ (1628) and matching the Latin by Thomas Naogeorgus (1559), (2) published by Claudius Morellus in a 1605 collection of Synesius's letters, and (3) by Rudolf Hercher in his 1873 collection of the letters, followed by Burton's English translation],
restatement: (
[Magis impium Mortuorum Lucubrationes quam veſtes furari.],
[arbitror magis impiú mortuorum ſcript furari, quam veſtes, quod appelatur buſta effodere.],
[Magis autem impium esse arbitror mortuorum lucubrationes quam vestes furari, quod sepulcra perfodere dicitur.]
),
translation: [It is a greater offence to ſteale dead mens labours, than their clothes],
lang: "el"
)[ἡγοῦμαι δὲ ἀσεβέστερον ἀποθανόντων λόγους κλέπτειν ἢ θοἰμάτια, ὃ καλεῖται τυμβωρυχεῖν.
]
Can somebody suggest how to process the two-level array?