我正在使用该tex4ht
软件包用 LaTeX 编译 EPUB 文档。但是,我也使用相同的基础.tex
文件用 编译 PDF 文档pdflatex
。由于 EPUB 和 PDF 文件的工作和编译方式存在一些显著差异,我发现自己希望有函数允许我根据一些全局变量(即我将其编译为 EPUB 还是 PDF)打开和关闭某些文本片段。
用例 1:
我用imakeidx
它来生成索引。当我用 PdfLaTeX 编译索引时,它会“合并”\index
同一页上出现的多个实例。因此,索引条目可能显示为:
沃尔里德,49-61,142
因此,我对\index
放置这些单词相当“慷慨”,将它们放置在每个出现特定单词的新段落中。
tex4ebook
但是,当我使用(using package)编译索引时,tex4ht
它没有不同的页面(当然,因为输出是重排文本格式)。相反,每个实例都会显示在索引中:
沃尔里德,693,695,701,708,719,734,736,742,743,747,752,763,777,792,794,796,798,802,804,819,828,837,840,848,855,867,877,880,915,920,935,946,956,960,961,983,1003,1006,1009,1012,1017,1021,1029,1030,2683
这使得索引过长。因此,如果我可以让其中一些\index
实例消失,那将很有用 - 但只有当我用它编译它tex4ebook
(或设置一些全局变量)时才可以。
用例 2:
虽然我目前正在编译的 PDF 和 EPUB 文件都带有超链接,但最终我想准备一个用于按需印刷的 PDF 版本 - 当然不会有任何超链接。因此,我需要在战略位置插入页面引用。现在,LaTeX 可以轻松进行页面引用:
(see p. \ref{walrider})
但是我仅有的在为按需打印编译 PDF 版本时需要这些页面引用,因此再次使用某种函数会很有用,它允许我设置一个全局变量来决定是否实际编译这些页面引用。
由于我没有太多编写新 LaTeX 的经验,所以我想知道最优雅的方法是什么。
答案1
为了解决您的第一个问题,我将定义两个命令 - 一个用于重要术语,当您甚至想要 Epub 文件中的索引条目时也应该使用该命令;第二个命令用于 PDF 版本中所需的所有实例。
第二个问题可以通过使用多个 TeX 文件来解决 - 一个单独的文件用于按需打印,另一个用于其他用途。文档文本可以放在另一个文件中,该文件将被驱动程序文件包含。
以下是一个例子:
电子格式的主要驱动因素:
\documentclass{article}
\usepackage{myindex}
\makeindex
\begin{document}
\input{text}
\end{document}
按需打印驱动程序(参见重新定义的\printref
命令):
\documentclass{article}
\usepackage{myindex}
\renewcommand\printref[1]{\ (see p.~\pageref{#1})}
\makeindex
\begin{document}
\input{text}
\end{document}
两个驱动程序都使用自定义包myindex.sty
:
\ProvidesPackage{myindex}
\RequirePackage{imakeidx}
\newcommand\primaryindex[1]{\index{#1}}
\newcommand\secondaryindex[1]{\index{#1}}
\newcommand\printref[1]{}
\endinput
对于 Epub 版本,我们需要重新定义\secondaryindex
为不打印任何内容。将以下内容保存为myindex.4ht
:
\renewcommand\secondaryindex[1]{}
样本text.tex
:
\section{Hello}\label{sec:hello}
Helo world \primaryindex{Hello}\secondaryindex{Hello}\secondaryindex{Hello}
More text\printref{sec:hello}.
\printindex
这是按需印刷的版本:
还有这个 HTML:
答案2
这不是一个精确的答案,但是评论太长了:
在不涉及您的具体问题的情况下,我的方法确实是使用rmarkdown
或 bookdown
(用于书籍的 rmarkdown),因为:
Rmarkdown 语法更简单,并且可以通过 LaTeX 转换为 epub、LaTeX 或 PDF 等格式。
它可以包含在转换为 PDF(通过 LaTeX)时被忽略的原始 html 块
它可以包含导出为 HTML(或 EPUB)时被忽略的原始 LaTeX 块。
例子:
---
output:
bookdown::epub_book: null
html_document: default
pdf_document: default
---
*test1* <i>test2</i> \emph{test3}
第一和第二个输出应该产生:
测试1 测试2
而 PDF 输出应该是:
测试1 测试3