编译时忽略命令

编译时忽略命令

我定义了一些用于 TODO 注释的自定义命令。如果我写注释,我会使用命令\stefan{}

现在我想定义一个新命令,例如\supervisor{}

我需要一种方法让 LaTeX 忽略其中一个命令。当\supervisor禁用时,我希望\stefan命令得到编译。

这可能吗?

答案1

您可以从命令行执行此操作。以@PeterGrill 的基本文档为例:

\documentclass{article}
\usepackage{xcolor}
\newcommand{\stefan}[1]{\textcolor{red}{#1}}
\newcommand{\supervisor}[1]{\textcolor{red}{#1}}

\begin{document}
Some text. \supervisor{Correct this!!}

Some text. \stefan{Correct this also!!}
\end{document}

这将为您提供所有评论。然后创建一个.sty文件,它可以很简单:

% disable various comments
\renewcommand{\stefan}[1]{}

然后,当您想要“隐藏”各种注释时,请从命令行进行编译:

pdflatex "\AtBeginDocument{\input{mycomments.sty}}\input{masterfile.tex}" 

或者当您希望所有注释都出现时,正常编译。

或者,也许更优雅的是,你可以实施@PeterGrill 的建议:

使用以下(例如)文件commentcommands.sty

\ifdefined\SupervisorMode
% re-define various commenting commands to do nothing
\renewcommand{\stephan}[1]{}
% ... etc., etc.
\fi

然后加载commentcommands.sty 主文件中的原始注释命令:

\usepackage{commentcommands}

然后,当您想要“禁用”交给主管的文档中的各种命令时,请运行以下命令:

pdflatex "\def\Supervisormode{}\input{masterfile.tex}"

这确实具有更清晰地调用的优点pdflatex,如果您愿意的话,也可以将其放入 makefile 中。

答案2

如果我理解正确的话,一种方法是用来\ifdefined\supervisor测试是否\supervisor已定义,如果已定义,则重新定义\stefan宏:

在此处输入图片描述

笔记:

  • 如果你正在使用该todonotes包,你可以使用\usepackage[disable]{todonotes}

代码:

\documentclass{article}
\usepackage{xcolor}

\newcommand{\stefan}[1]{\textcolor{red}{Stefan's Comment: #1}}

\newcommand{\supervisor}[1]{}


\begin{document}
Some text. \stefan{Correct this!!}

\ifdefined\supervisor
    \renewcommand{\stefan}[1]{}
\fi

Some text. \stefan{Correct this also!!}
\end{document}

答案3

您也可以使用一些布尔值。

例如:

\documentclass{article}

\makeatletter
\newif\if@supervisor 
\newcommand\stefan[1]{\if@supervisor\else#1\fi}
\newcommand\supervisor[1]{\if@supervisor#1\fi}

% toggle supervisor mode
\newcommand\supervisormode{\@supervisortrue}
\newcommand\notsupervisormode{\@supervisorfalse}
\notsupervisormode

\makeatother

\begin{document}

  \supervisormode
  \stefan{This is stefan comment}
  \supervisor{This is supervisor comment}

\end{document}

相关内容