I finally work out a satifactory work-around.
In the news recipe that inherits from BasicNewsRecipe, override the function
def create_opf(self, feeds, dir=None) with exactly the same content as in the base class
http://calibre-ebook.com/user_manual...eeds/news.html, except the line
mi.publication_type = 'periodical:'+self.publication_type+':'+self.short _title()
Change it to
mi.publication_type = self.publication_type+':'+self.short_title()
The string "periodical" looks to be why the Kindle device treats the generated document as periodical rather than a book. Relevant Calibre source codes are at
here and
here.