如何将外部存储的链接文本添加到超链接中?

如何将外部存储的链接文本添加到超链接中?

我有一堆链接,它们分别存储在文本文件中。我想创建一个 LaTeX 文档,其中使用相对路径访问这些文件,并将链接包含在最终 PDF 中。原因是以后我可能想要更改文件中的链接,生成的 PDF 应该会相应更新。

这是我尝试过的:

\usepackage{verbatim}
\href{\verbatiminput{./links/1.txt}}

但我收到了错误:

TeX 容量超出,抱歉 [输入堆栈大小=5000]。

这是一个最小工作示例:

创建文件:1.txt

1.1. 输入https://www.youtube.com/

1.2. 关闭文件

无需从文本文件中提取 Latex 代码

% !TeX program = lualatex
\documentclass{article}%
\usepackage{graphicx}


\usepackage{hyperref}% for the links
\usepackage{verbatim}% for the input

\begin{document}%
\href{https://www.youtube.com}{\includegraphics[width=\linewidth]{example-image}}

\end{document}%

效果很好!

现在从文本文件中提取

% !TeX program = lualatex
\documentclass{article}%
\usepackage{graphicx}


\usepackage{hyperref}% for the links
\usepackage{verbatim}% for the input

\begin{document}%
\href{\include{1.txt}}{\includegraphics[width=\linewidth]{example-image}}

\end{document}%

我收到错误:

第 10 行:@include 的参数有一个额外的}。\href{\include{1.txt}}

第 10 行:段落在 @include 完成之前结束。

\href{\include{1.txt}} 第 10 行:段落在 \href@ 之前结束

完成。 \href{\include{1.txt}} 第 10 行:额外 },或者忘记了

\endgroup. \href{\include{1.txt}} 第 10 行:\hbox 过满(15.0pt 太

宽)在段落中

编辑:

基于@Ulrike Fischer,我尝试过

% !TeX program = lualatex
\documentclass{article}%
\usepackage{graphicx}


\usepackage{hyperref,catchfile}% for the links
\usepackage{verbatim}% for the input

\begin{document}%

\CatchFileDef\myurl{1.txt}{}
\href{\myurl}{\includegraphics[width=\linewidth]{example-image}}

\end{document}%

但我得到了:

软件包 catchfile 错误:未找到文件“1.txt”。 \CatchFileDef\myurl{1.txt}{} 抑制目标为空的链接 段落中的 \hbox 过满(太宽 15.0pt)

编辑2:

还尝试创建一个新命令,但没有作用: http://www.emerson.emory.edu/services/latex/latex_19.html

\newcommand\urlFromFile[1]{\CatchFileDef{#1}{}}

编辑3:

% !TeX program = lualatex
\documentclass{article}%
\usepackage{graphicx}


\usepackage{hyperref,catchfile}% for the links
\usepackage{verbatim}% for the input


\usepackage{hyperref,catchfile}
\newcommand\urlFromFile[1]{%
    \CatchFileDef\myurl{#1}{\catcode`\#=12\catcode`\%=12}%
    \expandafter\url\expandafter{\myurl}}

\begin{document}
    \href{\urlFromFile{1.txt}}{\includegraphics[width=\linewidth]{example-image}}
\end{document}
%

我得到:

第 16 行:超出 TeX 容量,抱歉 [参数堆栈大小=10000]。 \href{\urlFromFile{1.txt}}

答案1

您可以使用 catchfile 来加载 url:

\begin{filecontents*}{1.txt}
https://www.youtube.com/
\end{filecontents*}

\documentclass{report}
\usepackage{hyperref,catchfile}
\CatchFileDef\myurl{1.txt}{}
\begin{document}
\expandafter\url\expandafter{\myurl}
\end{document}

如果 url 包含特殊字符,如 % 或 _ 或 #,您可以使用命令的最后一个参数来设置 catcodes。

包含一些特殊字符和命令的扩展示例:

\begin{filecontents*}{1.txt}
https://www.youtube_blub#%.com/
\end{filecontents*}

\documentclass{report}
\usepackage{hyperref,catchfile}
\newcommand\urlFromFile[1]{%
 \CatchFileDef\myurl{#1}{\catcode`\#=12\catcode`\%=12}%
 \expandafter\url\expandafter{\myurl}}
\begin{document}
\urlFromFile{1.txt}
\end{document}

相关内容