执行命令后吃一个点

执行命令后吃一个点

我有一个参考书目,其中的 URL 后面带有一个“。”。我想省略 URL 以节省空间,我可以通过重新定义 URL 命令来实现这一点,但这会留下一个点。有没有办法定义一个命令来删除后面的“。”?

答案1

  • 的重新定义\url并不简单,因为参数可能包含百分号字符。因此需要使用逐字 catcode 读取参数。

  • 可以使用 删除点\@ifnextchar.\@gobble{}。这也会捕获以下情况\url{...}不是后面跟着一个点。副作用是\@ifnextchar删除空格。可以使用\ltx@ifnextchar@nospaceltxcmds而不是来避免这种情况\@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}

在此处输入图片描述

相关内容