emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: Denis Maier <denis.maier.lists@mailbox.org>
To: Org Mode List <emacs-orgmode@gnu.org>,
	Nicolas Goaziou <mail@nicolasgoaziou.fr>
Subject: Re: [wip-cite-new] Adjust punctuation around citations
Date: Fri, 14 May 2021 00:14:25 +0200	[thread overview]
Message-ID: <07260010-35df-bab3-a276-440dda068d55@mailbox.org> (raw)
In-Reply-To: <871raawc7j.fsf@nicolasgoaziou.fr>

Thanks Nicolas! That looks quite good already.

Your test cases give good results for German.
I've also added another language property for when you want to switch to 
an in-text citation style:

(defun org-test--language-to-rule (info)
   (pcase (plist-get info :language)
     ("en-us" '(inside outside after))
     ((or "en" "de" "en-gb") '(strict outside after))
     ("de-author-year" '(outside outside before))
     ("fr" '(strict inside before))
     (_ nil)))

Exporting your example with #+language: de-author-year gives me:

=========================
"This is a complete sentence"[1].

"This is an incomplete sentence"[2].

"This is an incomplete sentence"[3].

This is a complete sentence[4].

This is an incomplete sentence[5].
=========================

The only quirk here is that you'll obviously want spaces before the 
citaitons, but I guess this is because citation end up in footnotes. 
With an in-text style spaces won't be collapsed here, right?

Again, thanks for all your work on this one.

Denis

Am 13.05.2021 um 23:33 schrieb Nicolas Goaziou:
> Hello,
> 
> Following discussion with Bruce D'Arcus and Denis Maier, I pushed, in
> the "wip-cite-new" branch, the first version of a tool for adjusting the
> location of the citation and surrounding punctuation according to fixed
> rules. The name is `org-cite-adjust-punctuation' and its docstring is:
> 
>    Adjust punctuation around CITATION object.
> 
>    When CITATION follows a quotation, or when there is punctuation next to it,
>    the function tries to normalize the location of punctuation and citation
>    according to some RULE.
> 
>    RULE is a triplet of symbols (PUNCT POSITION RELATIVE):
> 
>      PUNCT is the desired location of the punctuation with regards to the
>      quotation, if any.  It may be `inside', `outside', or`strict', the latter
>      meaning the punctuation should not be moved.
> 
>      POSITION is the desired location of the citation with regards to the
>      quotation, if any.  It may be `inside' or `outside'.
> 
>      RELATIVE is the relative position of the citation with regards to the closest
>      punctuation.  It may be `after' or `before'.
> 
>    For example,
> 
>      (inside outside after) corresponds to American typography;
>      (strict outside after) corresponds to German typography;
>      (strict inside before) corresponds to French typography.
> 
>    INFO is the export state, as a property list.
> 
>    Optional argument PUNCT is a list of punctuation marks to be considered.
>    When nil, it includes the following: \".\" \",\" \";\" \":\" \"!\" and \"?\".
> 
>    Parse tree is modified by side-effect.
> 
>    Note: if you are calling both `org-cite-adjust-punctuation' and
>    `org-cite-wrap-citation' on the same object, call `org-cite-adjust-punctuation'
>    first.
> 
> Citation processors focused on export may choose to use it, particularly
> when using note style.
> 
> As an example, the following code implements a processor named `test'
> that uses note style, and adjust punctuation according to the language
> specified for the document.
> 
> --8<---------------cut here---------------start------------->8---
> (defun org-test--language-to-rule (info)
>    (pcase (plist-get info :language)
>      ("en-us" '(inside outside after))
>      ((or "en" "de" "en-gb") '(strict outside after))
>      ("fr" '(strict inside before))
>      (_ nil)))
> 
> (defun org-test-export-citation (citation _style _backend info)
>    (pcase (org-test--language-to-rule info)
>      (`nil nil)
>      (rule (org-cite-adjust-punctuation citation rule info)))
>    (unless (org-cite-inside-footnote-p citation)
>      (org-cite-wrap-citation citation info))
>    "...")
> 
> (org-cite-register-processor 'test
>    :export-citation #'org-test-export-citation)
> --8<---------------cut here---------------end--------------->8---
> 
> Once evaluated, you can test it, for example, by exporting the following
> document:
> 
> --8<---------------cut here---------------start------------->8---
> #+language: de
> #+cite_export: test
> 
> "This is a complete sentence." [cite:@key]
> 
> "This is an incomplete sentence" [cite:@key].
> 
> This is a complete sentence. [cite:@key]
> 
> This is an incomplete sentence [cite:@key].
> --8<---------------cut here---------------end--------------->8---
> 
> and changing language value.
> 
> WDYT?
> 
> Regards,
> 



  reply	other threads:[~2021-05-13 22:15 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-05-13 21:33 [wip-cite-new] Adjust punctuation around citations Nicolas Goaziou
2021-05-13 22:14 ` Denis Maier [this message]
2021-05-13 23:21 ` Bruce D'Arcus
2021-05-14  8:31   ` Denis Maier
2021-05-14 10:26   ` Nicolas Goaziou
2021-05-14 12:37     ` Bruce D'Arcus
2021-05-14  8:42 ` Denis Maier
2021-05-14 12:28   ` Bruce D'Arcus
2021-05-15 11:56   ` Nicolas Goaziou
2021-05-15 12:03     ` Bruce D'Arcus
2021-05-15 12:43       ` Bruce D'Arcus
2021-05-16 21:29     ` Denis Maier
2021-05-16 21:38       ` Bruce D'Arcus
2021-05-16 22:03         ` Denis Maier via General discussions about Org-mode.
2021-05-16 22:24           ` Bruce D'Arcus
2021-05-17  8:08             ` Denis Maier
2021-06-05 21:35               ` Nicolas Goaziou
2021-06-05 21:45                 ` Bruce D'Arcus
2021-06-05 22:00                   ` Denis Maier
2021-06-12  9:39                     ` Nicolas Goaziou
2021-06-12 21:41                       ` Bruce D'Arcus
2021-06-12 22:04                         ` Nicolas Goaziou
2021-06-12 22:12                           ` Bruce D'Arcus
2021-06-13  8:22                           ` Denis Maier
2021-06-13 21:54                       ` Denis Maier
2021-06-13 22:04                         ` Bruce D'Arcus
2021-06-13 22:23                           ` Denis Maier
2021-06-13 22:47                             ` Bruce D'Arcus
2021-06-14 11:45                               ` Denis Maier
2021-06-14 11:51                                 ` Denis Maier
2021-06-14 23:37                                 ` Bruce D'Arcus
2021-06-14 23:41                                   ` Bruce D'Arcus
2021-06-20  7:41                                   ` Nicolas Goaziou
2021-06-20 16:37                                     ` Bruce D'Arcus
2021-06-20 17:17                                       ` Nicolas Goaziou
2021-06-21  8:12                                     ` Denis Maier
2021-06-21  8:45                                       ` Nicolas Goaziou
2021-06-21  9:49                                         ` Denis Maier
2021-06-21 10:07                                         ` Denis Maier
2021-05-14 13:39 ` Denis Maier
2021-05-15 11:43   ` Nicolas Goaziou

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

  List information: https://www.orgmode.org/

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

  git send-email \
    --in-reply-to=07260010-35df-bab3-a276-440dda068d55@mailbox.org \
    --to=denis.maier.lists@mailbox.org \
    --cc=emacs-orgmode@gnu.org \
    --cc=mail@nicolasgoaziou.fr \
    /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.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

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 read-only IMAP folder(s) and NNTP newsgroup(s).