CWEB 中的 eplain 宏

CWEB 中的 eplain 宏

我想eplain在程序中使用宏CWEB,但eplaincwebmac似乎在 PDF 支持方面存在冲突。具体来说,它们都定义了\ifpdf

cweave程序将下面的代码(mwe.w)转换为顶部带有的.tex文件。我可以使用下面的代码进行编译,方法是在输入原始文件之前添加。但生成的 PDF 在某些 PDF 查看器(通常在 Debian 上可靠)中存在无法查看的空白页。\input cwebmac\let\ifpdf\relaxeplain.wmupdf

相反,如果我cweave mwe不输入前两行(即根本不输入 eplain),然后手动在顶部插入\input eplain\input cwebmac那么mwe.tex它可以正确编译。

所以,我如何正确输入eplainCWEB程序


下列程序应保存为mwe.w,然后cweave mwe运行pdftex mwe

\let\ifpdf\relax  % non-working workaround
\input eplain

@* Minimal working example.
This is a \.{CWEB} program that uses \.{eplain} macros.

\numberedlist
\li First
\li Second
\endnumberedlist

@p
#include <stdio.h>

int main(void)
{
    @<Say hello@>@;
    return(0);
}

@ Here is the message we will print.

@<Say hello@>=
printf("Hello, TeX!\n");

答案1

\relax不够明确,使用

\let\ifpdf\undefined  % working workaround
\input eplain
\pdffalse % restore cwebmac definition

在此处输入图片描述

仅仅取消定义\ifpdf是不够的,两个系统\ifpdf出于不同的原因进行定义,eplain 使用它来测试 pdftex,但是 cweave 用于\ifpdftex那个并且用于\ifpdf与...一起使用dvipdf(m)(x)

  \ifpdftex\expandafter\xdef\csname curr#1\endcsname{\secno}
    \ifnum#1>0\countB=#1 \advance\countB by-1
      \advancenumber{chunk\the\countB.\expnumber{curr\the\countB}}\fi\fi
  \ifpdf\special{pdf: outline #1 << /Title (\the\toksE) /Dest

如果\ifpdf是真的,那么

  \special{pdf: outline 

这在 pdftex 中是一件坏事。

相关内容