我用它htlatex
来从 LaTeX 输入生成 html 文件。它工作正常。但是,我想要 2 个版本的 html 输出文件:一个版本的超链接指向硬盘上的文件以供离线使用,另一个版本供在线使用(其中超链接指向互联网上的类似链接)。
我有超过一百个链接,因此使用两个单独的原始 LaTeX 文件进行细微更改会很麻烦。有没有办法设置一个标志/开关,让我选择要\href
使用哪组链接?
类似这样的内容:
$htlatex --someflag N 文件名.tex htm,0
其中N=1
将选择离线链接并N=2
使用等效的在线链接。如果可能的话,语法是什么?此外,这些标志选项如何在原始 LaTeX 文件中指示?
答案1
tex4ht
支持配置文件,您可以在其中为各种命令提供自定义定义。在您的位置,我会使用一个宏来保存命令的基本路径\href
。在配置文件中,可以重新定义它以指向另一个目录或完全不同的网页。
简单示例:
\documentclass{article}
\usepackage{hyperref}
\newcommand\hrefroot{somedirectory/}
\begin{document}
Hello \href{\hrefroot report.pdf}{report}
\end{document}
引入了自定义命令\hrefroot
。它保存文件的路径,必须在所有\href
命令中使用。配置文件tex4ht
可能如下所示:
\Preamble{xhtml}
\ifOption{external}{\renewcommand\hrefroot{https://www.report.com/}}{\renewcommand\hrefroot{report/}}
\begin{document}
\EndPreamble
重要的一行是
\ifOption{external}{\renewcommand\hrefroot{https://www.report.com/}}{\renewcommand\hrefroot{report/}}
其余部分只是配置文件所需的结构。该\ifOption
命令检查可在命令行上指定的选项。如果使用此选项,则\hrefroot
重新定义为指向外部站点,report
否则使用目录。
编译文档的基本方法如下:
make4ht -c configfilename.cfg filename.tex
您可以external
使用以下语法指定该选项:
make4ht -c configfilename.cfg filename.tex "external"
以下是两种选择的结果:
<!--l. 5--><p class="noindent" >Hello <a
href="report/report.pdf" >report</a>
</p>
并且对于external
:
<!--l. 5--><p class="noindent" >Hello <a
href="https://www.report.com/report.pdf" >report</a>
</p>
答案2
感谢@michal.h21 的关注和建议,我明白了如何做我想做的事情。
\newcommand{\hrefoption}[2]{#1} % #1 = 离线;#2 = 在线
然后,
\href{\hrefoption{somedirectory/report.pdf}{https://www.report.com/reports/may/May15Report.pdf}}{report} 说明了我的意思。
这将使用第一个选项并生成离线版本。如果我想要在线版本,我将的定义更改\hrefoption
为
\newcommand{\hrefoption}[2]{#2} % #1 = 离线;#2 = 在线
这样它会忽略第一个参数(离线)并使用在线选项。
非常感谢@michal.h21 抽出时间和关注。我并没有采纳他们的建议,但他们让我以正确的方式思考这个问题。谢谢。
编辑以添加 - 它不完全是我所要求的(运行时设置的标志htlatex
),但它以最小的努力完成了我需要的工作(在定义中更改#1
为) 。#2
\hrefoption