使用 \url 内的命令?

使用 \url 内的命令?

如何使用 \url{..} 内的命令?

梅威瑟:

\documentclass{article}
\usepackage{textcomp}   
\usepackage{xcolor}
\usepackage{url}

\newcommand{\placeholder}[1]{\textcolor{red!60!black}{\textlangle#1\textrangle}}

\begin{document}
\url{Hello \placeholder{name}}.
\end{document}

生成结果:

Hello \placeholder{name}.

而不是预期的:

Hello <name>.

这是一个人为的例子。实际上,我定义了几个自定义 url 命令(用于格式化和破坏类名、文件路径等的宏?),在这些命令中我想使用占位符。但我相信这种更简单情况的解决方案与自定义 url 命令相同。

答案1

\UrlLeft并可\UrlRight用于添加尖括号,请参阅“6 更多的灵活性”url部分文档。 例子:

\documentclass{article}

\usepackage{url}
\DeclareUrlCommand\url{%
  \def\UrlLeft{\langle}%
  \def\UrlRight{\rangle}%
}

\begin{document}
  \url{http://www.example.org/}
\end{document}

结果

评论:

  • \langle\rangle代替文本模式命令,因为 隐式使用了 的数学模式\url

包裹hyperref

命令\url被重新定义以添加 所需的额外代码hyperref,因此不能直接重新定义。旧的含义被存储并用作\Hurl,因此这是可以重新定义的宏:

\documentclass{article}

\usepackage[colorlinks]{hyperref}% loads package url
\DeclareUrlCommand\Hurl{%
  \def\UrlLeft{\langle}%
  \def\UrlRight{\rangle}%
}

\begin{document}
  \url{http://www.example.org/}
\end{document}

结果超链接

尖括号是链接的一部分,但不是链接 URL 的一部分。如果括号不应通过 option 着色colorlinks,则可以将颜色重置\normalcolor为栅栏的颜色:

\documentclass{article}

\usepackage[colorlinks]{hyperref}% loads package url
\DeclareUrlCommand\Hurl{%
  \def\UrlLeft{\begingroup\normalcolor\langle\endgroup}%
  \def\UrlRight{\begingroup\normalcolor\rangle\endgroup}%
}

\begin{document}
  \url{http://www.example.org/}
\end{document}

结果 hyperref normalcolor 括号

如果应该使用当前颜色而不是\normalcolor,那么它会变得稍微复杂一些。包中xcolor有当前颜色的概念.,并且可以通过保存此颜色\colorlet并在 url 命令中稍后使用:

\documentclass{article}

\usepackage{xcolor}
\usepackage{letltxmacro}
\usepackage[colorlinks]{hyperref}% loads package url

\LetLtxMacro\OriginalUrl\url
\DeclareRobustCommand*{\url}{%
  \colorlet{beforeurl}{.}%
  \OriginalUrl
}
\DeclareUrlCommand\Hurl{%
  \def\UrlLeft{\begingroup\color{beforeurl}\langle\endgroup}%
  \def\UrlRight{\begingroup\color{beforeurl}\rangle\endgroup}%
}

\begin{document}
  \color{blue}\url{http://www.example.org/}
\end{document}

结果 hyperref currentcolor

答案2

我不确定我是否理解了这些要求,但这里有一些自定义内容,\verb或多或少是从我在另一个场合需要的一些代码中提取出来的。作为alltt来自alltt包的环境,它通常会将\{}视为环境。此外,它将空格视为常规tex源代码中的空格,从而允许换行。这是一个内联的,而不是显示的“环境”。

用作\myverb!stuff!\myverb+stuff+等...(参数中没有空行,强制多个空格,\ \ \例如在标准文本中使用)。

我的动词

\documentclass{article}
\usepackage{xcolor}
\usepackage{textcomp}

\makeatletter
% DEFINITIONS FOR SOME CUSTOM INLINE VERBATIM À LA ALLTT
% customize as desired:
\def\MicroFont{\normalfont\ttfamily\hyphenchar\font 45 }

\def\mydo@noligs #1% 
% jfbu: modification to \do@noligs  (added space after `#1) is mandatory if
% space is not made active via \@vobeyspaces in verbatim stuff.
{%
    \catcode `#1\active 
    \begingroup \lccode `\~=`#1\relax 
    \lowercase {\endgroup \def ~{\leavevmode \kern \z@ \char `#1 }}%
}%

% custom inline verbatim allowing line-breaks and like in alltt environment, \,
% { and } have their standard behavoir. For example an hyphenation point may be
% added with \-. NOTA BENE: spaces are treated as elsewhere, thus multiple
% spaces in source collapsed into only one in printed result. Line breaks are
% possible. 
\def\myverb 
{%
  \relax \ifmmode\hbox\else\leavevmode\null\fi
  \bgroup \MicroFont
  \let\do\mydo@noligs  \verbatim@nolig@list
  \let\do\@makeother   \dospecials 
  \catcode32 10 
  \catcode92 0 \catcode123 1 \catcode125 2
  \frenchspacing
  \@myverb 
}% 
\def\@myverb #1{\catcode`#1\active\lccode`\~`#1\lowercase{\let~\egroup}}%

\makeatother

\newcommand{\placeholder}[1]{\textcolor{red!60!black}{\textlangle#1\textrangle}}

\begin{document}\thispagestyle{empty}
\myverb+Hello \placeholder{name}
Hello \placeholder{name}
Hello \placeholder{name}
Hello \placeholder{name}
Hello \placeholder{name}
Hello \placeholder{name}
Hello \placeholder{name}
Hello \placeholder{name}+ and this works also in math mode $a^n
+\myverb?b^n=c^n?$. Back to normal.
\end{document}

我会尝试

\newcommand{\urlholder}[1]{\textcolor{red!60!black}{\textlangle\url{#1}\textrangle}}

母语:

\documentclass{article}
\usepackage{textcomp}   
\usepackage{xcolor}
\usepackage{url}

\newcommand{\urlholder}[1]{\textcolor{red!60!black}{\textlangle\url{#1}\textrangle}}

\begin{document}

Hello \urlholder{name and \name}

\end{document}

网址持有者

相关内容