如何定义类似 href 的命令?

如何定义类似 href 的命令?

我正在尝试制作一个\href类似命令,使其文本变色。我制作的命令在 URL 包含以下内容时会中断:#。我尝试了解决方案这里,但它仍然不起作用。

\documentclass{article}

\usepackage{hyperref,xcolor}
\colorlet{linkcolor}{green!20!black}

\begingroup\lccode`?=`# \lowercase{\endgroup
\newcommand*{\linc}[2]{\href{#1}{\textcolor{linkcolor}{#2}}}%link-colored
}%https://tex.stackexchange.com/questions/171847/defining-some-newcommand-with-href-problems-of

\begin{document}
\linc{https://tex.stackexchange.com/}{TeX.SE}%Causes no errors

\linc{https://en.wikipedia.org/wiki/LaTeX#Typesetting_system}{\LaTeX\ article}%Can't compile anymore
\end{document}

答案1

如果你不想逃离#链接,也不想为此担心,这里有一个lualatex

\documentclass[11pt]{scrartcl}
\usepackage{hyperref,xcolor}
%\colorlet{linkcolor}{green!20!black}
\colorlet{linkcolor}{red} %changed to red to make it more clear

\usepackage{luacode}
\begin{luacode*}
function linc(arg1,arg2)
   tex.print("\\href{"..arg1.."}{".."\\textcolor{linkcolor}{"..arg2.."}}");
end
\end{luacode*}

\newcommand*{\linc}[2]{\luadirect{ linc("\luatexluaescapestring{\unexpanded{#1}}",
                                       "\luatexluaescapestring{\unexpanded{#2}}")}}

\begin{document}    
\linc{http://tex.stackexchange.com/}{TeX.SE}%Causes no errors

\linc{https://en.wikipedia.org/wiki/LaTeX#Typesetting_system}{\LaTeX\ article}%no errors now
\end{document}

编译后lualatex foo.tex得到

Mathematica 图形

奇怪的是它竟然能正常工作。我本来打算使用 subs 替换lua 中的#to \#,这样调用者就不必担心了,但结果发现没必要!

答案2

在这种情况下,您需要转义的第一个参数#的符号\linc。以下操作不会出错:

\documentclass{article}

\usepackage{hyperref,xcolor}
\colorlet{linkcolor}{green!20!black}

\newcommand{\linc}[2]{\href{#1}{\textcolor{linkcolor}{#2}}}

\begin{document}
\linc{http://tex.stackexchange.com/}{TeX.SE}%Causes no errors

\linc{https://en.wikipedia.org/wiki/LaTeX\#Typesetting_system}{\LaTeX\ article}%Can't compile anymore
\end{document}

相关内容