我有一个宏,可以在表中添加一个条目。第一个条目是 URL。
这对大多数 URL 都有效,除了一些带有奇怪字符的 URL。
我想使用一个宏,因为我想在宏内部根据某些条件对其进行自定义。
现在我在宏本身中有了\url
命令。而不是在调用方端。有没有办法传递 URL 而不出现错误,还是我必须更改所有代码以\url
在调用方端添加?
这是 MWE
\documentclass[12pt]{article}
\usepackage{hyperref}
\newcommand{\addEntry}[3]
{%
\expandafter\url\expandafter{\detokenize{#1}}%


\\\hline
}%
\begin{document}
\begin{tabular}[c]{|p{2in}|p{2in}|p{1in}|}\hline
Link&description&date added\\\hline
\addEntry{https://www.maplesoft.com/support/help/maple/view.aspx?path=odeadvisor%2FAbel}{Maple entry for Abel first kind}{August 2022}
\end{tabular}
\end{document}
上面的代码报错,因为 url 中有?
和%
?错误是
lualatex foo.tex
(/usr/local/texlive/2022/texmf-dist/tex/latex/l3backend/l3backend-luatex.def)
(./foo.aux) (/usr/local/texlive/2022/texmf-dist/tex/latex/base/ts1cmr.fd)
(./foo.out) (./foo.out))
Runaway argument?
{https://www.maplesoft.com/support/help/maple/view.aspx?path=odeadvis\ETC.
! File ended while scanning use of \addEntry.
<inserted text>
\par
<*> foo.tex
?
我知道我可以不使用宏,而是在表格本身中对所有内容进行硬编码,就像这样
\begin{tabular}[c]{|p{2in}|p{2in}|p{1in}|}\hline
Link&description&date added\\\hline
\url{https://www.maplesoft.com/support/help/maple/view.aspx?path=odeadvisor%2FAbel}&Maple entry for Abel first kind&August 2022
\end{tabular}
上述方法可行。但是如何使用宏来实现呢?我尝试将其放在\url
调用方一侧,但没有成功。我这样做了
\documentclass[12pt]{article}
\usepackage{hyperref}
\newcommand{\addEntry}[3]
{%
#1


\\\hline
}%
\begin{document}
\begin{tabular}[c]{|p{2in}|p{2in}|p{1in}|}\hline
Link&description&date added\\\hline
\addEntry{\url{https://www.maplesoft.com/support/help/maple/view.aspx?path=odeadvisor%2FAbel}}{Maple entry for Abel first kind}{August 2022}
\end{tabular}
\end{document}
仍然出现同样的错误。
如何正确地将此 URL 传递给宏?
ps. 我不想编辑 URL 并转义任何奇怪的字符,这就是为什么我使用\url
和\href
Linux 上的 TL 2022。
答案1
您需要逐字读取 URL 参数。这可以使用\NewDocumentCommand{}{}{}
from 来完成解析
\documentclass[12pt]{article}
\usepackage{geometry}
\usepackage[colorlinks]{hyperref}
\NewDocumentCommand{\addEntry}{vmm}{%
\url{#1} & #2 & #3 \\ \hline}
\begin{document}
\begin{tabular}{|p{2in}|p{2in}|p{1in}|}
\hline
Link & description & date added \\
\hline
\addEntry{https://www.maplesoft.com/support/help/maple/view.aspx?path=odeadvisor%2FAbel}%
{Maple entry for Abel first kind}%
{August 2022}
\end{tabular}
\end{document}