像 \iffalse 一样使用 \ifdraft

像 \iffalse 一样使用 \ifdraft

注意:我认为该ifdraft包没有提供我所寻找的东西,但它可以被包装(我只是不知道如何:-))

我想这样做:

\ifdraft
... pgf graph component that's only for me
\fi

我目前正在使用\iffalse\fi,但更改 20 个位置显然比更改一个位置更麻烦。我试图避免这样做,\ifdraft{do x}{do y}因为 1) 它更丑陋,因此可读性更差 2) 95% 的用例都是\ifdraft{do X}{}。如果有办法包装ifdraft{do X}{}\ifdraft X \fi那样就完美了!

答案1

用一个\newif

\documentclass{article}
\newif\ifdraft
\drafttrue % or \draftfalse
\begin{document}
\ifdraft
This is a draft.
\else
This isn't.
\fi
\end{document}

\else部分可以省略。

答案2

你可以改变的含义\ifdraft

\documentclass[draft]{article}
\usepackage{ifdraft}

% save a copy of \ifdfraft
\let\ORIifdraft\ifdraft
% redefine it to be a normal conditional with \else and \fi
% according to the document condition
\ORIifdraft{\let\ifdraft\iftrue}{\let\ifdraft\iffalse}

\begin{document}

\ifdraft
 DRAFT
\fi

Text.

\end{document}

或者,更好的方法是,您可以定义自己的新条件。这是我推荐的方法。

\documentclass[draft]{article}
\usepackage{ifdraft}

% define a new conditional with \else and \fi
% according to the document condition
\ifdraft{\let\ifxdraft\iftrue}{\let\ifxdraft\iffalse}

\begin{document}

\ifxdraft
 DRAFT
\fi

Text.

\end{document}

答案3

你可以定义你自己的并且可以随意\ifdraftT使用。\ifdraftT{do X}

否则,真正的 TeX也if \ifdraft需要\let如此\iffalse\iftrue否则可能会出错……

随着ifdraft包加载后,你可以简单地

\let\ifdraft\if@draft

\ifdraft作为内部工作\if@draft(由原始使用\ifdraft)。

代码

\documentclass[draft]{article}
\usepackage{ifdraft}
\makeatletter
\let\ifdraft\if@draft
\newcommand*{\ifdraftT}{\if@draft\expandafter\@firstofone\else\expandafter\@gobble\fi}
\makeatother
\begin{document}
Foo\par
\ifdraft
  something
\fi

Bar\par
\ifdraftT{something else}

Biba
\end{document}

相关内容