创建新函数,允许我根据全局变量插入或忽略文本片段

创建新函数,允许我根据全局变量插入或忽略文本片段

我正在使用该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

这不是一个精确的答案,但是评论太长了:

在不涉及您的具体问题的情况下,我的方法确实是使用rmarkdownbookdown(用于书籍的 rmarkdown),因为:

  1. Rmarkdown 语法更简单,并且可以通过 LaTeX 转换为 epub、LaTeX 或 PDF 等格式。

  2. 它可以包含在转换为 PDF(通过 LaTeX)时被忽略的原始 html 块

  3. 它可以包含导出为 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

相关内容