我想将我的 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
是你想要的输出文件
所有文件都应位于同一文件夹中,否则应指定位置