当 ocgcolorlinks 存在时,如何将 \href 的长文本移到下一行?

当 ocgcolorlinks 存在时,如何将 \href 的长文本移到下一行?

这个最简单的代码

\documentclass[a4paper]{book}

\usepackage[ocgcolorlinks]{hyperref}

\begin{document}
    \href{"some URL"}{"long text"}
\end{document}

通过编译pdflatex将 放在"long text"一行中,即占满该行。当省略包ocgcolorlinks的选项时hyperref,文本通常会转移到下一行。

我的问题:我怎样才能强制将文本延续到下一行ocgcolorlinks

答案1

选项ocgcolorlinks不支持可以跨行断开的链接。摘自hyperref的 README:

  • 主要缺点:链接不能跨行断开。PDF 参考 1.7:4.10.2“使图形内容可选”:图形状态操作(例如设置颜色等)仍然适用。因此,链接文本被放在一个框中并设置两次,一次有颜色,一次没有颜色。

答案2

\usepackage{hyperref}
\usepackage[ocgcolorlinks]{ocgx2}[2017/03/30]

包裹ocgx2,截至版本0.24,重新实现ocgcolorlinks选择hyperref, 基于B. Lerner 代码进行了一些改进:

除了环绕换行符的 OCG 颜色链接外,还可以环绕分页符嵌套支持超链接(仅支持 pdfLaTeX/LuaLaTeX,因为 XeTeX 根本不支持嵌套链接),并且空链接文本已经解决了。


示例代码(打开分享LaTeX):

\documentclass[a6paper]{scrartcl}

\usepackage{hyperref}
\usepackage[ocgcolorlinks]{ocgx2}[2017/03/30]

\usepackage{mwe,graphicx}

\begin{document}\raggedright\huge
  Empty links $\Rightarrow$\href{https://tex.stackexchange.com}{\qquad}$\Leftarrow$ don't flood the page with link colour.\\[2ex]

  Visit \href{https://ctan.org/tex-archive/macros/latex/contrib/ocgx2}{ocgx2 ocgx2 ocgx2 ocgx2 ocgx2 ocgx2 ocgx2 ocgx2 ocgx2 ocgx2 ocgx2 ocgx2 ocgx2 ocgx2 ocgx2 ocgx2 ocgx2 ocgx2 \hypersetup{urlcolor=red}\href{https://ctan.org}{on CTAN CTAN CTAN CTAN CTAN CTAN CTAN CTAN CTAN CTAN CTAN CTAN CTAN CTAN CTAN CTAN} ocgx2 ocgx2 ocgx2 ocgx2 ocgx2}!\\[2ex]

  {
    \normalsize Graphical content, if mixed with text inside the link text, must be protected by enclosing in \verb+\ocglinkprotect{...}+:\\[1ex]
  }

  Visit \href{https://ctan.org/tex-archive/macros/latex/contrib/mwe}{this fancy \ocglinkprotect{\includegraphics[width=1cm]{example-image}} on CTAN!}
\end{document}

在此处输入图片描述 在此处输入图片描述

答案3

TeX.SX 上的这个答案ocgcolorlinks作者 Ben Lerner使用了一个 hack 来实现在使用时自动换行:

代码 […] 依赖于 PDF 中可选内容组含义的一个怪癖:虽然无论是否启用 OCG 都会发生颜色变化操作,但填充路径等图形操作是有条件的。而且,PDF 有一种模式,其中文本用于设置剪切路径,而不是渲染为实际文本

该机制存在一些问题,尤其是空文本和分页符。前者可以通过先在框中排版文本并检查其是否为空来自动检测。后者可能可以使用以下技巧来解决对 LaTeX 中的分页符做出反应

原则上,也可以编写一个宏,将文本分解成单个单词(或字符,如该答案的 OP (LittleLatexNoTex)尝试这样做),并将每个包装在一个不同的 上\href{url}{word}。然而,当在文本中使用宏时,这样做并不是一件容易的事,正如 LittleLatexNoTex 指出的那样。

相关内容