在同一个 latex 文档中检查 latex、pdflatex 和 html 的正确方法是什么?

在同一个 latex 文档中检查 latex、pdflatex 和 html 的正确方法是什么?

检查一个人是否在 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.texpdflatex foo.texlatex foo.texdvips foo.dvi按预期工作。只有 foo.html 会显示链接。

谢谢大家的帮助。

答案1

由于您想tex4ht使用进行测试\@ifpackagesloaded,因此您不想tex4ht在每个作业中都加载!这会干扰标准 pdfLaTeX 设置并使 PDF 创建更加困难。相反,请保留包加载(但包括测试)并将在您创建 HTML 文件时htlatex进行必要的加载安排。tex4ht

相关内容