维基百科文章链接的 LaTeX 宏

维基百科文章链接的 LaTeX 宏

我想创建一个 LaTeX 宏,它可以自动为我创建指向 Wikipedia 页面的链接。

 \usepackage{xstring}
 \usepackage{hyperref}

 % replaces the whitespace with '%20'
 \newcommand{\urlwhitespacereplace}[1]{\StrSubstitute{#1}{ }{\%20}}

 % takes an article name, replaces the whitespace, and concatenates to form the full URL 
 \newcommand{\wikipedialink}[1]{http://en.wikipedia.org/wiki/\urlwhitespacereplace{#1}}

 % takes an article name and gives me a link called 'Wikipedia'
 \newcommand{\anonymouswikipedialink}[1]{\href{\wikipedialink{#1}}{Wikipedia}}

然后我尝试像这样调用它......

 \urlwhitespacereplace{Charlie Bucket} %expected 'Charlie%20Bucket'

 \wikipedialink{Charlie Bucket} %expected 'http://en.wikipedia.org/wiki/Charlie%20Bucket'

 \namedwikipedialink{Charlie Bucket} %expected 'Wikipedia' (hyperlink)

前两个方法有效,返回的结果与您预期的完全一致。但是,当我使用第三个方法时,我得到了...

! TeX capacity exceeded, sorry [input stack size=5000].
\Hy@href {->\hyper@normalise 
                         \href@ {
l.11 \namedwikipedialink{Charlie Bucket}

这可能与转义的 % 在宏之间移动有关吗?谢谢阅读。

答案1

笔记:

  • 维基百科使用下划线 ( _)转义空格
  • 链接空间也起作用。
  • 嵌套宏和超链接问题马丁·沙雷尔

    正确的语法是,\hyperlink{<name>}{<text>}其中<name>必须是一个有效的、可扩展的标签名称。它不能包含任何不可扩展的命令。[…] 该名称必须直接扩展为一些文本。

代码

\documentclass{article}
\usepackage{xstring}
\usepackage{hyperref}

%\newcommand{\urlwhitespacereplace}[1]{\StrSubstitute{#1}{ }{\%20}[\wpLink]}
\newcommand{\urlwhitespacereplace}[1]{\StrSubstitute{#1}{ }{_}[\wpLink]}
\newcommand{\wikipedialink}[1]{http://en.wikipedia.org/wiki/#1}% needs \wpLink now
\newcommand{\anonymouswikipedialink}[1]{\urlwhitespacereplace{#1}\href{\wikipedialink{\wpLink}}{Wikipedia}}
\newcommand{\namedwikipedialink}[1]{\urlwhitespacereplace{#1}\href{\wikipedialink{\wpLink}}{#1}}

\begin{document}
\urlwhitespacereplace{Charlie Bucket} \par % no output
\wikipedialink{Charlie Bucket} \par % no substituting
\namedwikipedialink{Charlie Bucket} \par
\anonymouswikipedialink{Charlie Bucket}
\end{document}

答案2

我的texlinks.stymorehypebundle 提供了用于链接到维基百科文章的宏,请参阅第 8 节,例如texlinks.pdf,只需\Wikiref{⟨lemma⟩}“当前”语言。文档从主干进展到更智能的宏,可能难以快速理解,抱歉。

\documentclass{minimal} 
\usepackage{hyperref,texlinks} 
\begin{document} 
    Look up \wikiref{Charlie Bucket}{Wikipedia}
        for \Wikiref{Charlie Bucket}. 
\end{document}

仅供参考,我还没有研究过这个问题的细节。texlinks.sty宏无需xstring,即使词根中有空格,我也不知道具体原因,只是在这里看到这个。只有引用维基百科文章的部分内容时才需要“转义”空格、变音符号、逗号……我猜是维基媒体维基百科) 引擎,将空格转换为下划线等。

相关内容