检查一个人是否在 pdflatex、latex 或 html 处理器(例如 tex4ht)中运行的正确方法是什么?
假设我有一些 latex 代码,我只想在 html 中显示,而不在 pdf 中显示,也不在 .ps 中显示。
由于 tex4ht 在乳胶模式下工作,因此如果我尝试这样做:
\ifpdf
% pdflatex code, do not show the link here
\else
% latex code
\htmladdnormallink{home}{../../index.htm}
\fi
那么上面的代码在用tex4ht运行时可以正常显示链接,而在用pdflatex运行时则不会显示。但问题是,当我运行dvi2ps生成.ps文件时,链接也会显示出来。
如果我用
\usepackage{html}
...
\begin{htmlonly}
% html only code
\end{htmlonly}
分离 html 代码,然后 tex4ht不理解上述内容。我最终得到的 html 页面缺少上面的代码!
\documentclass[titlepage]{article}%
\usepackage{ifpdf}
\usepackage{html}
\usepackage{tex4ht}
\usepackage{hyperref}
\begin{document}
\begin{htmlonly}
\htmladdnormallink{home}{index.htm}
\end{htmlonly}
\end{document}
然后
htlatex foo.tex
生成的 html 中没有显示任何链接。顺便说一句,htlatex 确实处理得\htmladdnormallink
很好,因为我删除后链接很好\begin{html}
。它只是不知道\begin{html}
tex4ht 不关心 pdflatex 模式,它似乎在 latex 模式下工作。
但是命令
latex2html foo.tex
生成一个包含链接的 html 文件。
如果我尝试这样做:
\documentclass[titlepage]{article}%
\usepackage{ifpdf}
\usepackage{html}
\usepackage{hyperref}
\begin{document}
\ifpdf
% pdflatex code, do not show the link here
\else
% latex code
\begin{htmlonly}
\htmladdnormallink{home}{../../index.htm}
\end{htmlonly}
\fi
\end{document}
然后同样的问题。ps 不显示链接,这是我想要的,而且 tex4ht 生成的 html 文件也不显示链接!
因此,我现在尝试使用 tex4ht 而不是 latex2html 来生成 html 来尝试一下,但我也想从同一个文档生成 .pdf 和 .ps。
在 latex 中执行此操作的正确方法是什么?以 tex4ht 也能理解的方式。基本上我真正想要的是有一些仅在使用 tex4ht 生成 html 时使用的代码。否则,如果没有办法做到这一点,我将继续使用 latex2html。
更新
这是最终的设置,一个完整的独立示例,展示了如何将同一个 latex 文件与 pdflatex、latex/dvips 和 tex4ht 一起使用。
\documentclass[titlepage]{article}%
\usepackage{ifpdf}
\usepackage{hyperref}
\makeatletter
\edef\texforht{TT\noexpand\fi
\@ifpackageloaded{tex4ht}
{\noexpand\iftrue}
{\noexpand\iffalse}}
\makeatother
\begin{document}
\ifpdf
I am in pdf mode % pdflatex code,will show up in pdf only
\else
% latex code, check if htlatex is loaded and use link only then
\if\texforht
\href{../../index.htm}{home} % show up in HTML only
\else
I am in latex mode % shows up in dvi and .ps only but not in html
\fi
\fi
\end{document}
现在执行htlatex foo.tex
和pdflatex foo.tex
和latex foo.tex
都dvips foo.dvi
按预期工作。只有 foo.html 会显示链接。
谢谢大家的帮助。
答案1
由于您想tex4ht
使用进行测试\@ifpackagesloaded
,因此您不想tex4ht
在每个作业中都加载!这会干扰标准 pdfLaTeX 设置并使 PDF 创建更加困难。相反,请保留包加载(但包括测试)并将在您创建 HTML 文件时htlatex
进行必要的加载安排。tex4ht