平均能量损失

平均能量损失

下面的代码\percentifier确保我们可以将例如中文字符输入到 eg 的第一个参数中\href,方法是使用以下方法将字符串转换为其百分比编码:url_encode (如需进一步参考,另请参阅这个答案致 OP”如何将环境中的中文字符串参数附加到 \href 的第一个参数“)

\percentifier

\makeatletter
\directlua{function url_encode(str)
  if (str) then
    str = string.gsub (str, "\string\n", "\string\r\string\n")
    str = string.gsub (str, "([^\@percentchar w \@percentchar -\@percentchar _\@percentchar .\@percentchar \string~])",
        function (c) return string.format ("\@percentchar \@percentchar \@percentchar 02X", string.byte(c)) end)
    str = string.gsub (str, " ", "+")
  end
  return str    
end}
\makeatother
%
\def\percentifier#1{\directlua{
tex.print(url_encode('\detokenize{#1}'))
}}

\href

  \href{http://a.beautiful.url/?searchid=\percentifier{#1}}{Link}%

我们代码的另一个组成部分是mainentry-environment。假设我们的答案中需要这样的环境。实际上,这个环境将有多个参数,但当然,我为了平均能量损失。其第一个参数将始终用于完成 URL:

mainentry-环境:

\newenvironment {mainentry}
  {\mainentryA}
%
  {\clearpage}
%
\def\mainentryA#1{%
     #1 \href{http://a.beautiful.url/?searchid=\percentifier{#1}}{Link}%
    }{
 }

在里面平均能量损失下面,请注意代码对于 运行完美Test1(因为它被呈现为Test1%。但是,代码对于 运行不佳Test2(因为 Tex 解释了它后面的尾随空格,这是由于url_encode添加了+)。

现在,我的目的不是改变将空格更改为 的行为+,这是为了使 正常运行url_encode。不过,我不希望 Tex 将 的实例解释Test2为带有尾随空格。因此,也许可以在 的定义中解决该问题\percentifier,或者如果不能:在 的定义中\mainentryA

请注意,我不想使用解决方案 1 或解决方案 2这个答案另一篇题为“为什么此代码对某些用户输出可点击的 URL,而对其他用户却不输出?“。

我宁愿有一个类似的解决方案这个答案。使用\cs_set_eq:NN\Trim\tl_trim_spaces:n或类似构造的东西。不知何故,我一直无法这样做。

平均能量损失

\documentclass[a4paper]{article}

\usepackage{hyperref}

%%%%%%%
% \percentifier
\makeatletter
\directlua{function url_encode(str)
  if (str) then
    str = string.gsub (str, "\string\n", "\string\r\string\n")
    str = string.gsub (str, "([^\@percentchar w \@percentchar -\@percentchar _\@percentchar .\@percentchar \string~])",
        function (c) return string.format ("\@percentchar \@percentchar \@percentchar 02X", string.byte(c)) end)
    str = string.gsub (str, " ", "+")
  end
  return str    
end}
\makeatother
%
\def\percentifier#1{\directlua{
tex.print(url_encode('\detokenize{#1}'))
}}
%
%%%%%%%

%%%%%%%
% \mainentry
\newenvironment {mainentry}
  {\mainentryA}
%
  {\clearpage}
%
\def\mainentryA#1{%
     #1 \href{http://a.beautiful.url/?searchid=\percentifier{#1}}{Link}%
    }{
 }
%
%%%%%%%

\begin{document}

\begin{mainentry}{%
Test1%
}
\end{mainentry}

\begin{mainentry}{%
Test2
}
\end{mainentry}

\end{document}

答案1

要从参数中删除尾随空格,可以使用\stripspace以下两行定义的宏:

\def\stripspace#1#2{\stripspaceA#2\end/ \end/\relax#1{#2}}
\def\stripspaceA#1 \end/#2\relax#3#4{\if\relax#2\relax#3{#4}\else#3{#1}\fi}

\def\percentifier#1{[#1]} % just for testing

\stripspace\percentifier {text1 and text}
\stripspace\percentifier {text2 and text }
without stripping: \percentifier{text3 and text }

\bye

这是完全可扩展的解决方案。

在您的应用程序中您可以替换

\href{http://a.beautiful.url/?searchid=\percentifier{#1}}{Link}%

经过

\href{http://a.beautiful.url/?searchid=\stripspace\percentifier{#1}}{Link}%

相关内容