如何引用推文?

如何引用推文?

有没有巧妙的方式来引用推文?我用的是《芝加哥格式手册》,上面只说,但这还不算是一个真正的指南。

理想情况下,你可以有一个宏,只需将推文的 URL 放入其中,如下所示:

\tweet{https://twitter.com/Horse_ebooks/status/382466889332445184}

... 然后在您的页面上一个漂亮的框中看到推文,并附上参考书目。不确定这是否可行,即使从理论上来说?

我的序言的相关部分:

   \usepackage[backend=biber,isbn=false,notes]{biblatex-chicago}

在主文件中,我有:

 \bibliography{biblio/biblio.bib}

下一步该怎么做?很抱歉遇到这样的麻烦,希望有人能帮忙!

答案1

我喜欢你的问题。是的,可以获取推文并添加到参考书目中。

我制作了一个允许引用推文的“代码”。首先,我将解释这个想法,然后我将解释代码。(它使用latexpython

想法

  1. 可以使用curl(获得的字符串是json格式)获取推文,并且 latex 包download允许使用 curl。

  2. 要将格式转换json为,bibtex可以使用 中的一个小脚本python,它将获得一个包含推文数据的 .bib 文件。(我不知道 latex 是否有一些包可以做到这一点)。

  3. 最后,可以定义一些driver条目tweet和一些宏来管理推文。

代码

1. 获取推文格式json

download包允许您使用 获取推文curl。其使用形式如下:

\download[filelocalname]{url}

filelocalname是您计算机中文件的名称。url是推文的 url(json)。 这很重要! 在您的问题中,您显示了示例 url:

https://twitter.com/Horse_ebooks/status/382466889332445184 但在这里,只有推文的url才是重要的。与包一起使用的 for是:ìdnumber382466889332445184urldownload

https://api.twitter.com/1/statuses/oembed.json?id=idnumber

例如,在您的示例中,url 是:

https://api.twitter.com/1/statuses/oembed.json?id=382466889332445184

然后\tweetadd是 latex 中的一个宏,它接收idnumber并以 json 格式下载推文,并将其保存到磁盘并以名称保存idnumber.tweet

\def\tweetadd#1{\download[#1.tweet]{https://api.twitter.com/1/statuses/oembed.json?id=#1}}

2. 将推文从json一种格式转换为bibtex另一种格式。(twitt.py

Beautiful Soup 4是必需的。安装说明如下这里。Beautiful Soup 4 用于获取tweet文本,因为在使用包获取的文件中,download推文是html格式的,并且 Beautiful Soup 4 允许您提取text推文的和date

其他 Python 包是标准包(jsonreos)。解码使用包 (latex)json获得的文件并提取推文的、和。其他字段(、)使用获得。downloadauthor nameauthor urlurlusernamedatere

python 脚本 ( twitt.py) 的工作原理很简单。script输入是directory随包下载的文件在哪里\download,并查找所有带有扩展名的文件.tweetscript处理每个文件并使用 bibtex 数据创建一个文件 (.bib)(.bib每个.tweet文件一个文件)。

使用的bibtex的字段有:

  • a.author推文作者的姓名。

  • b.title 推文文本。

  • c.url 推文网址。

  • d.nameaddon 作者的用户名(@...)。

  • e.addendum 作者个人资料的网址。

  • f.date 推文的日期。

输入键是tweet:idnumber

最后,为每个文件script创建一个.tex包含的文件。文件名称为。\addbibresource.bibtweetsinputbib.tex

twitt.py3. 如何从乳胶中运行?

脚本遵循解释的方法这里使用\write18包。如第 2 点所述,脚本需要文件的目录.tweet(.tex 文件的同一目录);为此,我们使用\currfile包(latex)。重要!\currfile需要-recorder执行 latex 时当前文件的完整路径

然后definetweets宏运行该twitt.py脚本。(该脚本需要与 .tex 位于同一目录中)

\def\definetweets{%
\immediate\write18{python \currfileabsdir/twitt.py \currfileabsdir}
}

4. 其他宏

\tweet宏使用 bib 字段并打印tweet文本、dateusername

\def\tweet#1{%
\par
\begin{minipage}[t]{0.95\columnwidth}%
\hfill\citetitle{#1}\par
\hfill--\citefield{#1}{nameaddon}, \space\citedate{#1}
\end{minipage}\par}

打印\citetweet的推文引用类似于您引用的链接中显示的格式。

\def\citetweet#1{%
In a Twitter post on \citedate{#1}, \citeauthor{#1} \mkbibparens{\citefield{#1}{nameaddon}} 
wrote, \mkbibquote{\citetitle{#1}}}

这里定义了两种字段格式:title(tweet)和nameaddon(username)。第一种格式在标题前面加上“Tweet”一词。第二种格式将用户名放在括号之间,如果hyperref使用了包,则附加一个指向用户 Twitter 个人资料的链接。

\DeclareFieldFormat{tweet}{Tweet:\space\emph{#1}}

\DeclareFieldFormat{username}{%
    \mkbibparens{%
      \ifhyperref
        {\href{\thefield{addendum}}{#1}}
        {#1}}}`

tweet驱动程序是biblatex 风格misc的默认驱动程序authoryear。(没有未使用的字段)。

\DeclareBibliographyDriver{tweet}{%
  \usebibmacro{begentry}%
  \setunit{\addcomma\space}
  \usebibmacro{author}
  \printfield[username]{nameaddon}
  \newunit
  \setunit{\labelnamepunct}\newblock
  \printfield[tweet]{title}%
  \newunit\newblock
  \printdate
  \newunit\newblock
  \usebibmacro{url}%
  \newunit\newblock
  \setunit{\bibpagerefpunct}\newblock
  \usebibmacro{pageref}%
  \newunit\newblock
  \iftoggle{bbx:related}
    {\usebibmacro{related:init}%
     \usebibmacro{related}}
    {}%
  \usebibmacro{finentry}}

完整文件。

  1. 文件latex。名称:tweetaddon.tex

\usepackage{download}
\usepackage[abspath]{currfile}[2012/05/06]
\RequirePackage{biblatex}

\def\tweetadd#1{\download[#1.tweet]{https://api.twitter.com/1/statuses/oembed.json?id=#1}}

\def\definetweets{%
\immediate\write18{python \currfileabsdir/twitt.py \currfileabsdir}
}

\def\tweet#1{%
\par
\begin{minipage}[t]{0.95\columnwidth}%
\hfill\citetitle{#1}\par
\hfill--\citefield{#1}{nameaddon}, \space\citedate{#1}
\end{minipage}\par}

\def\citetweet#1{%
In a Twitter post on \citedate{#1}, \citeauthor{#1} \mkbibparens{\citefield{#1}{nameaddon}} wrote, \mkbibquote{\citetitle{#1}}}

\DeclareFieldFormat{tweet}{Twitter post:\space\emph{#1}}

\DeclareFieldFormat{username}{%
    \mkbibparens{%
      \ifhyperref
        {\href{\thefield{addendum}}{#1}}
        {#1}}}

%Driver biblatex for tweet
\DeclareBibliographyDriver{tweet}{%
  \usebibmacro{begentry}%
  \setunit{\addcomma\space}
  \usebibmacro{author}
  \printfield[username]{nameaddon}
  \newunit
  \setunit{\labelnamepunct}\newblock
  \printfield[tweet]{title}%
  \newunit\newblock
  \printdate
  \newunit\newblock
  \usebibmacro{url+urldate}%
  \newunit\newblock
  \setunit{\bibpagerefpunct}\newblock
  \usebibmacro{pageref}%
  \newunit\newblock
  \iftoggle{bbx:related}
    {\usebibmacro{related:init}%
     \usebibmacro{related}}
    {}%
  \usebibmacro{finentry}}

  1. 文件python名称:twitt.py

import json
import re
from bs4 import  BeautifulSoup
import os

months={'January':'01','February':'02','March':'03','April':'04','May':'05','June':'06','July':'07','August':'08','September':'09','October':'10','November':'11','December':'12'}

def formatday(day):
    if int(day)<10:
        day='0'+day
    return day

def smplncndtex(string):
    chars={'&':'\&','%':'\%','$':'\$','#':'\#','_':'\_','{':'\{','}':'\}'}
    for item in chars:
        string=string.replace(item,chars[item])
    return string

class tweet:
    def __init__(self, directory=None,file=None):
        self.id=file.replace('.tweet','')
        self.file=file
        self.get_tweet_filecontent(directory)
        self.define_tweet()
        self.entrybib=simpleentrybibtex(self).entry

    def get_tweet_filecontent(self,directory):
        with open(os.path.join(directory,self.file)) as file:
            self.filecontent=file.read()

    def define_tweet(self):
        dcfcnt= json.loads(self.filecontent)
        soup=BeautifulSoup(dcfcnt['html'])
        self.tweet=unicode(smplncndtex(soup.find('p').text))  #in note
        self.author=unicode(smplncndtex(dcfcnt['author_name']))   #in author
        self.author_url=dcfcnt['author_url']   #in addendum
        self.url=dcfcnt['url']   #in url
        username =unicode(smplncndtex('@'+re.match('.+twitter.com/(.+)',self.author_url).group(1)))   #in nameaddon
        self.username=username
        all_a=soup.find_all('a')
        for atag in all_a:
            if atag.get('href')==self.url.replace('/statuses/','/status/'):
                match=re.match('(\w+)\s(\d+),\s(\d+)',atag.text)
                #print date_parts
                self.date= '%s-%s-%s' % (match.group(3),months[match.group(1)],formatday(match.group(2)))
                #print self.date

    def save_tweet(self,directory):
        with open(os.path.join(directory,self.id)+'.bib','w') as file:
            file.write(self.entrybib.encode('utf-8'))

class tweets:
    def __init__(self,directory):
        self.directory=directory
        self.tweets=[]
        self.get_tweets()

    def get_tweets(self):
        for file in os.listdir(self.directory):
            if file.endswith(".tweet"):
                a=tweet(self.directory,file)
                self.tweets.append(a)

class simpleentrybibtex:
    def __init__(self,ctt,entryname='tweet'):
        self.entry='@%s{tweet:%s,author={%s},title={{%s}},url={%s},nameaddon={{%s}},addendum={%s},date={%s}}' % (entryname,ctt.id,ctt.author,ctt.tweet, ctt.url, ctt.username, ctt.author_url, ctt.date)

if __name__ == "__main__":
    import sys
    if len(sys.argv) ==1:
        print 'It is necessary a directory'
    else:
        if os.path.exists(sys.argv[1]):
            directory=sys.argv[1]
        #directory='/home/carlos/latex/teste/testedownload'
            tw=tweets(directory)
            tex_input=file(os.path.join(directory,'tweetsinputbib.tex'),'w')
            for tweet in tw.tweets:
                tweet.save_tweet(directory)
                tex_input.write('\\addbibresource{%s}\n' % (tweet.id+'.bib'))
        else:
            print '%s is not a directory' % (sys.argv[1])

妇女权利委员会:

我使用了biblatex带有authoryear风格的包。我想你也可以使用biblatex-chicago


\documentclass{article}
\usepackage{hyperref}
\usepackage[utf8]{inputenc}  
\usepackage[style=authoryear,backend=biber]{biblatex}
\input{tweetaddon} %below of \usepackage{biblatex}
%add the tweet to use between \input{tweetaddon} and \definetweets 382466889332445184 is the id tweet in twitter, get it from url of the tweet.
\tweetadd{382466889332445184} 
\tweetadd{382467902751784961} 
\definetweets
\input{tweetsinputbib}        %input this file that contain the addresource
\begin{document}
A tweet:
\tweet{tweet:382466889332445184}  
Other tweet:
\tweet{tweet:382467902751784961}

Or cite a tweet in the form of your link.

\citetweet{tweet:382467902751784961}.

\printbibliography
\end{document}

结果


在此处输入图片描述

相关内容