我正在尝试在两个文档之间创建一些交叉引用。我在两个文档中使用 alltt 来控制部分内容的布局。对于交叉引用链接,我使用 \hyperdef 定义锚点。对于同一文档中的引用,我使用 \hyperlink 创建链接。对于外部引用,我使用 \hyperref。
我发现,根据我将各种 \hyper* 命令放在 alltt 块内部还是外部,链接要么有效,要么失效。出于好奇,我在文本编辑器中打开了生成的 PDF 文件,发现当 \hyper* 命令放在 alltt 块内部时,它会被破坏。
Outside of alltt: /Subtype/Link/A<</F(external\040doc.pdf)/S/GoToR/D(EXTERNAL\040TARGET\0401.EXTERNAM\040TARGET\0401)>>
Inside of alltt: /Subtype/Link/A<</F(external\\unhbox\040\\voidb@x\040\\penalty\040\\@M\040\\\040doc.pdf)/S/GoToR/D(EXTERNAL\\unhbox\040\\voidb@x\040\\penalty\040\\@M\040\\\040TARGET\\unhbox\040\\voidb@x\040\\penalty\040\\@M\040\\\0401.EXTERNAM\\unhbox\040\\voidb@x\040\\penalty\040\\@M\040\\\040TARGET\\unhbox\040\\voidb@x\040\\penalty\040\\@M\040\\\0401)>>
对于同一手册中的链接,这不是什么大问题。我只是在 alltt 块中创建链接和锚点。我没有外部链接的解决方案或解决方法。有什么关于如何防止发生这种混乱的想法吗?外部链接必须在 alltt 块内工作。
下面是我创建的一个示例,用于演示该问题。
测试1.文本
\documentclass{article}
\usepackage{lipsum}
\usepackage{alltt}
\usepackage{hyperref}
\begin{document}
\section{Source a}
Outisde alltt
\hyperref{external doc.pdf}{EXTERNAL TARGET 1}{EXTERNAM TARGET 1}{\textbf{ To external target }} \newline
\hyperlink{INSIDE ALLTT}{LINK \#1}
\begin{alltt}
Inside alltt
\hyperref{external doc.pdf}{EXTERNAL TARGET 1}{EXTERNAM TARGET 1}{\textbf{ To external target }} \newline
\hyperlink{INSIDE ALLTT}{lINK \#2}
\end{alltt}
\lipsum
\section{Source b}
\begin{alltt}
\hypertarget{INSIDE ALLTT}{}
\end{alltt}
Fu baz
\end{document}
外部文档文本
\documentclass{article}
\usepackage{lipsum}
\usepackage{hyperref}
\begin{document}
\section{Source a}
\lipsum
\hyperdef{EXTERNAL TARGET 1}{EXTERNAM TARGET 1}{External Target \#1} \newline
\end{document}
答案1
环境alltt
使空间变得活跃,其定义不适合\hypertarget
或\hyperref
或\hyperlink
。
解决方法:可以屏蔽空间:
\documentclass{article}
\usepackage{lipsum}
\usepackage{alltt}
\usepackage[verbose]{hyperref}
\def\SPACE/{ }
\begin{document}
\section{Source a}
Outside alltt
\hyperref{external doc.pdf}{EXTERNAL TARGET 1}{EXTERNAM TARGET 1}{\textbf{ To external target }} \newline
\hyperlink{INSIDE ALLTT}{LINK \#1}
\begin{alltt}
Inside alltt
\hyperref{external\SPACE/doc.pdf}{EXTERNAL\SPACE/TARGET\SPACE/1}{EXTERNAM\SPACE/TARGET\SPACE/1}{\textbf{ To external target }} \newline
\hyperlink{INSIDE\SPACE/ALLTT}{lINK \#2}
\end{alltt}
\lipsum
\section{Source b}
\begin{alltt}
\hypertarget{INSIDE\SPACE/ALLTT}{}
\end{alltt}
Fu baz
\end{document}
\space
不能使用,因为它需要一个空格(在 中有效alltt
)来将其与后面的字母分开。因此\SPACE
用作/
参数文本。这样就不需要额外的空格了。