tikz 图形后的间距

tikz 图形后的间距

我正在尝试添加外部链接符号(来自https://tex.stackexchange.com/a/294990/163482) 到 href,但出于某种原因,当我重新定义 href 命令时,符号后的间距是错误的。正确的做法是什么(以及正确的间距是多少)?

\documentclass{article}
\usepackage{tikz,hyperref}
\newcommand{\ExternalLink}{%
  \tikz[x=1.2ex, y=1.2ex, baseline=-0.5ex, scale=0.75]{% 
    \begin{scope}[x=1ex, y=1ex]
      \clip (-0.1,-0.1) 
       --++ (-0, 1.2) 
       --++ (0.6, 0) 
       --++ (0, -0.6) 
       --++ (0.6, 0) 
       --++ (0, -1);
      \path[draw=black, line width = 0.5,
            rounded corners=0.5] (0,0) rectangle (1,1);
    \end{scope}
    \path[draw=black, line width = 0.5] (0.5, 0.5) -- (1, 1);
    \path[draw=black, line width = 0.5] (0.6, 1)   -- (1, 1) -- (1, 0.6);
  }
}

\let\orighref\href
\renewcommand{\href}[2]{\orighref{#1}{#2}$\,$\ExternalLink}

\begin{document}
\noindent
Some text \href{http://google.com}{link} some more text.\\
Some text \orighref{http://google.com}{link}$\,$\ExternalLink some more text.
\end{document}

在此处输入图片描述

答案1

当你写:

Some text \orighref{http://google.com}{link}$\,$\ExternalLink some more text.

\ExternalLinkTeX 会忽略后面的空格,因为\ExternalLink是名称以字母结尾的控制序列。相反,使用:

Some text \href{http://google.com}{link} some more text.

后面有一个空格标记{link},它不会被忽略。它为正在构建的水平列表贡献了一个单词间空格。这就是为什么您在示例的第一个案例中看到更大的空间(此处为第二个案例)。为了摆脱这个额外的空间,您可以编写:

Some text \href{http://google.com}{link}some more text.

\ignorespaces或者在重新定义中使用\href,以忽略输入中的空格(\ignorespaces根据 TeX 语法,从输入流中扩展标记,直到找到不是 〈空格标记〉 的不可扩展标记):

\renewcommand*{\href}[2]{\orighref{#1}{#2}$\,$\ExternalLink\ignorespaces}

但实际上,您不想使用任何这些建议。这是因为在您的\ExternalLink命令中,有一个很可能不需要的空格:

\newcommand{\ExternalLink}{%

...

    \path[draw=black, ...] ... ;
  } % <------- here, remove the space
}

因此,您的\ExternalLink命令无条件地在图标后添加了这个空格。我认为,当超链接后面跟着逗号或句号时,这是不必要的。因此,我会删除这个空格;这样您就不再需要了\ignorespaces

还请注意,您无需处于数学模式即可使用;在数学模式之外使用时\,会产生。因此,您可以执行以下操作:\thinspace

\renewcommand*{\href}[2]{\orighref{#1}{#2}\,\ExternalLink}

其他建议:您可能希望在可点击链接中包含图标:

\renewcommand*{\href}[2]{\orighref{#1}{#2\,\ExternalLink}}

我使用是\renewcommand*因为大多数可能的参数\href不应该包含\par标记;这使得查找错误更容易。

注意:在 处不会有换行符\,,因为此宏\thinspace在非数学模式下会扩展为 ,而它本身会扩展为,并且只有紧接着粘连符时\kern才能在 处换行——但此处并非如此,因为以一个框开头:Ti\kern\ExternalLinkZ 图片。

最后说明:您的链接将使 TeX 在 Ti 上努力工作每次使用时都会重新定义 Z 图片\href(即,对于每个超链接)。由于图标始终相同,因此有一种方法可以节省编译时间:保存图片一次放在一个框中,然后在需要时使用该框。这非常节省计算资源。总而言之,这是我的建议(由于我们在评论中的讨论,我添加了一张带标题的图片——该\usebox命令不需要编辑\protect,如示例所示):

\documentclass{article}
\usepackage{tikz}
\usepackage[hidelinks]{hyperref} % 'hidelinks' removes the border around links

\newsavebox{\ExternalLinkIcon}

\begin{lrbox}{\ExternalLinkIcon}
  \begin{tikzpicture}[x=1.2ex, y=1.2ex, baseline=-0.5ex, scale=0.75]
    \begin{scope}[x=1ex, y=1ex]
      \clip (-0.1,-0.1)
       --++ (-0, 1.2)
       --++ (0.6, 0)
       --++ (0, -0.6)
       --++ (0.6, 0)
       --++ (0, -1);
      \path[draw=black, line width = 0.5,
            rounded corners=0.5] (0,0) rectangle (1,1);
    \end{scope}
    \path[draw=black, line width = 0.5] (0.5, 0.5) -- (1, 1);
    \path[draw=black, line width = 0.5] (0.6, 1)   -- (1, 1) -- (1, 0.6);
  \end{tikzpicture}% <--- important!
\end{lrbox}

\let\orighref\href

\renewcommand*{\href}[2]{%
  \orighref{#1}{#2\,\usebox{\ExternalLinkIcon}}%
}

\begin{document}

\noindent
Some text \href{http://example.com}{link} some more text. Spacing is also fine
before a \href{http://example.com}{comma}, as you can see. Periods are fine
too, of course---we don't have to do anything special.

\begin{figure}[htbp]
  \centering
  This is the figure contents.
  \caption{A caption containing a \href{http://example.com}{hyperlink}}
\end{figure}

\end{document}

截屏

相关内容