我想要一种输出仅包含单次微距。下面的 MWE 中,这是\ImportantMacro
。全部此宏之外的其他文本将被忽略。
\ImportantMacro
解决这个问题的一个明显的开始是在这种模式下重新定义非:
\ifdefined\OnlyOutputImportantMacro% Redefine all macros to be ignored.
\renewcommand{\MacroToBeIgnored}[1]{}%
\fi
但是,那些不在宏中的文本怎么办?下面的 MWE 输出:
所有红色文字应被隐藏,并且仅有的应输出蓝色文本。
相关参考文献:
奖金:
- 有没有比重新定义更简单的方法全部不是一我感兴趣的宏是什么?
是否可以忽略主文档中的宏,但是不是如果出现则忽略它之内。当然
\ImportantMacro
,我可以使用蛮力方法,在输入时设置一个标志\ImportantMacro
,然后有条件地忽略宏,除非设置了标志。或者在以下情况下重新定义宏\ImportantMacro
:\newcommand{\ImportantMacro}[1]{% \ifdefined\OnlyOutputImportantMacro \renewcommand{\MacroToBeIgnored}[1]{\begingroup\textcolor{blue}{\bfseries##1}\endgroup}% BONUS \fi \textcolor{blue}{#1}% \ifdefined\OnlyOutputImportantMacro \renewcommand{\MacroToBeIgnored}[1]{}% \fi }%
并不是一个实用的选择。想知道是否有更 TeXish 的方式来做到这一点。这是大胆的输出中的蓝色文本。
代码:
\def\OnlyOutputImportantMacro{}
\documentclass{article}
\usepackage{xcolor}
\newcommand{\MacroToBeIgnored}[1]{\textcolor{red}{#1}}%
\newcommand{\ImportantMacro}[1]{%
\ifdefined\OnlyOutputImportantMacro
\renewcommand{\MacroToBeIgnored}[1]{\begingroup\textcolor{blue}{\bfseries##1}\endgroup}% BONUS
\fi
\textcolor{blue}{#1}%
\ifdefined\OnlyOutputImportantMacro
\renewcommand{\MacroToBeIgnored}[1]{}%
\fi
}%
\ifdefined\OnlyOutputImportantMacro% Redefine all macros to be ignored.
\renewcommand{\MacroToBeIgnored}[1]{}%
\fi
\begin{document}\color{red}
Some text outside of macro that needs to be ignored.
\MacroToBeIgnored{%
Some text inside of macro that needs to be ignored.%
}
\ImportantMacro{%
Some text inside of macro that needs to be output.
\MacroToBeIgnored{Bonus text not to be suppressed.}%
}
\MacroToBeIgnored{%
Some text inside of macro that needs to be ignored.%
}
Some more text outside of macro that needs to be ignored.
\end{document}
答案1
概念证明:
\documentclass{article}
\newcommand\ImportantMacro[1]{%
\gdef\ImportantMacroArg{#1}%
\aftergroup\ImportantMacroArg
}
\AtBeginDocument{\setbox0=\vbox\bgroup}
\AtEndDocument{\egroup}
\begin{document}
whatever you want
\ImportantMacro{This will print}
some other text
\end{document}
恐怕你是试图伸展得太远了。