我定义了一些用于 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}