我想eplain
在程序中使用宏CWEB
,但eplain
和cwebmac
似乎在 PDF 支持方面存在冲突。具体来说,它们都定义了\ifpdf
。
该cweave
程序将下面的代码(mwe.w
)转换为顶部带有的.tex
文件。我可以使用下面的代码进行编译,方法是在输入原始文件之前添加。但生成的 PDF 在某些 PDF 查看器(通常在 Debian 上可靠)中存在无法查看的空白页。\input cwebmac
\let\ifpdf\relax
eplain
.w
mupdf
相反,如果我cweave mwe
不输入前两行(即根本不输入 eplain),然后手动在顶部插入\input eplain
,\input cwebmac
那么mwe.tex
它可以正确编译。
所以,我如何正确输入eplain
CWEB程序?
下列程序应保存为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 中是一件坏事。