将带引文的 LaTeX 转换为 MediaWiki

将带引文的 LaTeX 转换为 MediaWiki

我想将我的 LaTeX 论文转换为 MediaWiki 格式,以便将其部分内容贡献给维基百科。主要困难是引用。这是一个 MWE LaTeX 文件:

\documentclass{article}
\usepackage[authoryear]{natbib}

\begin{document}
Over twenty years ago, \cite{McAfee1992Dominant} introduced the first
double auction mechanism.

\bibliographystyle{plainnat}
\bibliography{mwe}
\end{document}

以及匹配的 BibTeX 文件:

@article{McAfee1992Dominant,
    author = {McAfee, R. Preston},
    title = {{A dominant strategy double auction}},
    year = {1992}
}

预期结果应该是这样的:

Over twenty years ago, McAfee<ref>{{Cite journal|author=R. Preston McAfee|title=A dominant strategy double auction|year=1992}}</ref> introduced the first double auction mechanism.

我尝试使用潘多克

pandoc -f latex -t mediawiki mwe.tex > mwe.wiki

但结果中没有出现该引文:

Over twenty years ago,  introduced the first double auction mechanism.

所以我猜测 Pandoc 不支持这种转换。

是否有其他工具/编辑器可以用于这种转换?

答案1

您可以使用tex4ht合适的配置。我会使用biblatex而不是natbib,因为它允许我们访问书目字段。您修改后的示例:

\documentclass{article}
\usepackage[style=authoryear]{biblatex}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\addbibresource{mwe.bib}

\begin{document}

\section{Hello world}

\subsection{Hello, hello}

Over \textit{twenty years} ago, \cite{McAfee1992Dominant} \textbf{introduced} the first
double auction mechanism.

\end{document}

我添加了一些命令来说明我的配置示例。您可以对此类文件使用以下配置,例如hello.cfg

\Preamble{xhtml}

% remove html structure
\Configure{HTML}{}{}
\Configure{@HEAD}{}
\Configure{BODY}{}{}
\Configure{DOCTYPE}{}
\Configure{HEAD}{}{}
\Configure{TITLE}{}{}
\Configure{VERSION}{}

\newcommand\starttag[1]{\NoFonts\HCode{#1}}
\newcommand\stoptag[1]{\NoFonts\HCode{#1}}
\newcommand\ConfigureInlinetag[2]{%
  \Configure{#1}{\starttag{#2}}{\stoptag{#2}}%
}

\ConfigureInlinetag{textit}{''}
\ConfigureInlinetag{textbf}{'''}

\newcommand\ConfigureSection[2]{%
  \Configure{#1}{}{}{\starttag{#2}}{\stoptag{#2\Hnewline}}%
}

\ConfigureSection{section}{==}
\ConfigureSection{likesection}{==}
\ConfigureSection{subsection}{===}
\ConfigureSection{likesubsection}{===}

% remove section id
\def\gobbleone#1#2{}
\Configure{toTocLink}{\gobbleone}{}

% remove <p> elements
\Configure{HtmlPar}{}{}{\HCode{\Hnewline}}{\HCode{\Hnewline}}

\DeclareFieldFormat[article]{entrytype}{Cite journal}
\DeclareFieldFormat*{titlecite}{{title=#1}}%
\DeclareFieldFormat*{yearcite}{{year={#1}}}%
\DeclareNameFormat*{labelname}{\ifthenelse{\value{listcount}=1}{#1}{}}
\DeclareCiteCommand{\cite}%
  {\printnames{labelname}\HCode{<ref>}\{\{}%
  {%
  \printfield{entrytype}
  \setunit{|}%
  \printtext{author=}%
  \printnames{author}%
  \setunit{|}%
  \printfield[titlecite]{title}%
  \setunit{|}%
  \printfield[yearcite]{year}%
  }%
  {}%
  {\}\}\HCode{</ref>}}%

\begin{document}

\EndPreamble

有一些有趣的事情:

% remove html structure
\Configure{HTML}{}{}
\Configure{@HEAD}{}
\Configure{BODY}{}{}
\Configure{DOCTYPE}{}
\Configure{HEAD}{}{}
\Configure{TITLE}{}{}
\Configure{VERSION}{}

通过这些配置,我们删除了所有<html><head></head><body>内容,因此我们只得到了干净的文本。

我们需要配置所有可能生成 html 的命令,使其要么不生成任何内容,要么mediawiki生成格式化内容。如下所示:

\newcommand\starttag[1]{\NoFonts\HCode{#1}}
\newcommand\stoptag[1]{\NoFonts\HCode{#1}}
\newcommand\ConfigureInlinetag[2]{%
  \Configure{#1}{\starttag{#2}}{\stoptag{#2}}%
}

\ConfigureInlinetag{textit}{''}
\ConfigureInlinetag{textbf}{'''}

我们\ConfigureInlineTag可以为内联元素设置mediawiki标签,例如\textit。可以为部分命令提供类似的配置:

\newcommand\ConfigureSection[2]{%
  \Configure{#1}{}{}{\starttag{#2}}{\stoptag{#2\Hnewline}}%
}

\ConfigureSection{section}{==}
\ConfigureSection{likesection}{==}
\ConfigureSection{subsection}{===}
\ConfigureSection{likesubsection}{===}

likesection已加星标\section*

最复杂的东西是配置\cite命令来产生你想要的输出:

\DeclareFieldFormat[article]{entrytype}{Cite journal}
\DeclareFieldFormat*{titlecite}{{title=#1}}%
\DeclareFieldFormat*{yearcite}{{year={#1}}}%
\DeclareNameFormat*{labelname}{\ifthenelse{\value{listcount}=1}{#1}{}}
\DeclareCiteCommand{\cite}%
  {\printnames{labelname}\HCode{<ref>}\{\{}%
  {%
  \printfield{entrytype}
  \setunit{|}%
  \printtext{author=}%
  \printnames{author}%
  \setunit{|}%
  \printfield[titlecite]{title}%
  \setunit{|}%
  \printfield[yearcite]{year}%
  }%
  {}%
  {\}\}\HCode{</ref>}}%

我已经有一段时间没有配置了biblatex,但这应该会以你想要的格式打印内联引用。请注意,你应该添加

\DeclareFieldFormat[publication type]{entrytype}{publication info}

对于每个使用的出版物类型。article默认情况下仅支持,因为我不知道应该为其他类型生成什么。

使用以下方式编译您的文档

make4ht -um draft -c hello.cfg filename
biber filename
make4ht -um draft -c hello.cfg filename

你将获得:

   ==Hello world== 



   ===Hello, hello=== 

   Over ''twenty years'' ago, McAfee<ref>{{Cite journal |author=McAfee, R. Preston|title=A dominant strategy double auction|year=1992}}</ref> '''introduced''' the first double auction mechanism.

filename.html

答案2

我建议使用手部百科用于创建 Wiki 文章。它使用 MediaWiki,但包含 BibTeX 管理器。这意味着您只需将 BibTeX 文件上传到 HandWiki,然后在 HandWiki 中使用相同的 BibTeX 密钥来引用文章

答案3

您需要指定参考书目才能使其发挥作用:

pandoc -f latex -t mediawiki --bibliography=mediawiki.bib mediawiki.tex -o  mediawiki.wiki

您还可以指定 CSL 样式来根据您的需要格式化引用。

答案4

Pandoc 是最容易实现这一点的方法。

pandoc -f latex -t mediawiki --metadata link-citations --bibliography=bibl.bib --csl=cslstyle.csl test.tex -o test.wiki

--metadata link-citations创建包含文内引用和参考书目的超链接。如果不需要,可以删除此部分。

bibl.bib是您使用的参考书目文件

cslstyle.csl是您想要的引用样式。有很多选择可以从editor.citationstyles.org

test.tex是您要转换的文件

test.wiki是你想要的输出文件

所有文件都应位于同一文件夹中,否则应指定位置

相关内容