仅从单个宏输出内容

仅从单个宏输出内容

我想要一种输出仅包含单次微距。下面的 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}

恐怕你是试图伸展得太远了。

相关内容