我有一个参考书目,其中的 URL 后面带有一个“。”。我想省略 URL 以节省空间,我可以通过重新定义 URL 命令来实现这一点,但这会留下一个点。有没有办法定义一个命令来删除后面的“。”?
答案1
的重新定义
\url
并不简单,因为参数可能包含百分号字符。因此需要使用逐字 catcode 读取参数。可以使用 删除点
\@ifnextchar.\@gobble{}
。这也会捕获以下情况\url{...}
:不是后面跟着一个点。副作用是\@ifnextchar
删除空格。可以使用\ltx@ifnextchar@nospace
包ltxcmds
而不是来避免这种情况\@ifnextchar
。
示例文件:
\documentclass{article}
\usepackage{url}
\makeatletter
\newcommand*{\urlgobble}{%
\begingroup
% set verbatim catcodes
\let\do\@makeother
\dospecials
% restore catcode of argument braces
\catcode`\{=1 %
\catcode`\}=2 %
\@urlgobble
}
\newcommand*{\@urlgobble}[1]{%
% eats the URL in #1
\endgroup
% skip an optional dot
\@ifnextchar.\@gobble{}%
}
\newcommand*{\skipurls}{\let\url\urlgobble}
\makeatother
\begin{document}
Normal url:
\url{http://www.example.org/Hello%20World.html}
\skipurls
Skipped urls:
\url{http://www.example.net/Hello%20World.html}
\url{http://www.example.com/Hello%20World.html}.
\end{document}
答案2
仅当 URL 不包含特殊字符时才有效!
\documentclass{article}
\usepackage{url}
\begin{document}
\url{http://www.dante.de}.
\makeatletter
\let\URL\url
\def\url#1{\@ifnextchar.\url@i{\url@i.}}
\def\url@i.{}
\makeatother
Not printed: \url{http://www.dante.de}.
\URL{http://www.dante.de}
\end{document}