以下是我的 MWE。我定义了一个函数,因为我想在我的文档中发布许多链接。这些链接指向一个显示德国法律的网站;要么是该法律的概述页面,要么如果指定(使用可选参数),则直接跳转到某个段落:
\documentclass[12pt]{article} \usepackage{hyperref} \usepackage{ifthen} \usepackage{xifthen} \begin{document} \newcommand{\gesetze}[2]{http://www.gesetze-im-internet.de/#1/ \ifthenelse{\isempty{#2}}{}{ \textunderscore\textunderscore#2.html } } \href{\gesetze{bgb}{622}}{This is the 622nd paragraph in the law.} % \href{\gesetze{bgb}}{This is the main page on that law.} \end{document}
当函数\gesetze{bgb}{622}
不在参数中\href
,而只是纯文本中时,上述方法有效。
\href
但是,当我想将其包含在-command 中时,会显示错误,或者当我取消注释该函数没有可选参数的行时。
日志中有一些带有下划线的奇怪输出和标志,因此我_
用替换了\textunderscore
。
需要做什么才能使函数接受一个或两个参数,根据需要将它们构建在一起以创建链接,并将它们安全地传递给 hyperref?
答案1
您需要一些可扩展的东西,ifthen 和 xifthen 将不起作用。
\documentclass[12pt]{article}
\usepackage{hyperref}
\begin{document}
\ExplSyntaxOn
\newcommand{\gesetze}[2]
{
http\c_colon_str//www.gesetze-im-internet.de/#1/
\tl_if_blank:nF {#2}{__#2.html}
}
\ExplSyntaxOff
\href{\gesetze{bgb}{622}}{This is the 622nd paragraph in the law.}
\href{\gesetze{bgb}{}}{This is the main page on that law.}
\end{document}
答案2
如果您想更频繁地链接到特定段落/部分或整个法律以及一些文本,您可以为此定义专用命令。
我使用etoolbox
's\ifblank
来测试字符串是否为空,因为我通常etoolbox
更喜欢测试而不是ifthen
,但这只是一个风格问题。
\documentclass[12pt]{article}
\usepackage{etoolbox}
\usepackage{hyperref}
\newcommand{\lawlinktext}[3][]{%
\def\lawlinktexturl{http://www.gesetze-im-internet.de/#2/}%
\ifblank{#1}
{}
{\appto\lawlinktexturl{__#1.html}}%
\href{\lawlinktexturl}{#3}}
\begin{document}
\lawlinktext[622]{bgb}{This is the 622nd paragraph in the law.}
\lawlinktext{bgb}{This is the main page on that law.}
\end{document}
没有辅助宏的替代定义是
\newcommand{\lawlinktext}[2][]{%
\ifblank{#1}
{\href{http://www.gesetze-im-internet.de/#2/}}
{\href{http://www.gesetze-im-internet.de/#2/__#1.html}}}
但我们必须重复 URL 存根。
这里我们还使用了 TeX 自动抓取的剩余参数\href
。