本网站主Tex聊天室的一些用户(其中一个使用TeX 直播) 报告说此代码 (或类似代码) 会输出可点击的 URL,而对于我来说 (使用TeXShop),事实并非如此...可能是什么问题?
平均能量损失
\documentclass[a4paper]{article}
\usepackage{xparse, hyperref}
\ExplSyntaxOn
\cs_set_eq:NN
\IfEmptyTF
\tl_if_blank:nTF
\ExplSyntaxOff
\NewDocumentEnvironment {mainentry} { m m m } {%
\IfEmptyTF{#3}{
First argument returns #1 NO
}{%
Second argument returns #2 YES
}%
}{%
\href{http://a.beautiful.url/?searchid=#1}{Click on me}%
}
\begin{document}
A) There should be a YES here. OK.
\begin{mainentry}{
first
}{
second
}{
third
}
\end{mainentry}
B) There should be a NO here. OK.
\begin{mainentry}{
first
}{
second
}{
%
}
\end{mainentry}
\end{document}
答案1
除了 Manuels 的评论
\ExplSyntaxOn
\cs_set_eq:NN\IfEmptyTF\tl_if_blank:nTF
\cs_set_eq:NN\Trim\tl_trim_spaces:n
\ExplSyntaxOff
\NewDocumentEnvironment {mainentry} { m m m } {%
\IfEmptyTF{#3}{
... 3 is empty
}{%
... 3 is not empty
}%
{%
\typeout{'#1'}% just to verify
\edef\temp{\Trim{#1}}
\typeout{'\temp'}% just to verify
\expandafter\href\expandafter{http://a.beautiful.url/?searchid=\temp}{Click
on me}%
}
}
其余代码与 OP 中的相同
答案2
这里的问题是空格。按照用户 daleif 的好建议(对 OP 的评论) 使用不同的查看器检查 PDF 输出,在打开 OP 的 PDF 输出时,我进行了以下分析(全部在 Mac 上):
- TeXShop 3.88:没有任何超链接的迹象
- Safari 11.0:没有任何超链接的迹象
- Adobe Acrobat Reader DC 17.012.20098:输出可点击的超链接,
http://a.beautiful.url/?searchid=%20first%20
即http://a.beautiful.url/?searchid=first
其中%20
是空格的百分比编码。
解决这个问题的一个例子是通过改变语法布局例如
原来的
\begin{mainentry}{
first
}{
second
}{
third
}
\end{mainentry}
进入
解决方案 1
\begin{mainentry}
{first}
{second}
{third}
\end{mainentry}
我觉得这其实很麻烦,因为当复制粘贴手动行(在这种情况下,例如,内容“ first
”,“ second
”,“ third
”)时,将它们粘贴到空行中要容易得多(参见原来的),而不是将它们粘贴在花括号之间(参见解决方案 1)。
为了解决至少一半的问题,可以提出解决方案 2,通过插入一些实例,%
我们至少可以在粘贴任何内容之前将一侧的空白行保持为空:
解决方案 2
\begin{mainentry}{%
first%
}{
second%
}{
third%
}
\end{mainentry}