alltt 和 hyperref 包不能很好地协同运行

alltt 和 hyperref 包不能很好地协同运行

我正在尝试在两个文档之间创建一些交叉引用。我在两个文档中使用 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用作/参数文本。这样就不需要额外的空格了。

相关内容