我想创建一个 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.sty
在morehype
bundle 提供了用于链接到维基百科文章的宏,请参阅第 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
,即使词根中有空格,我也不知道具体原因,只是在这里看到这个。只有引用维基百科文章的部分内容时才需要“转义”空格、变音符号、逗号……我猜是维基媒体(维基百科) 引擎,将空格转换为下划线等。