我正在尝试制作一个\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
得到
奇怪的是它竟然能正常工作。我本来打算使用 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}