这个最简单的代码
\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 指出的那样。