隐藏包含铸造代码的环境

隐藏包含铸造代码的环境

任务:我想创建一个“notes”命令和一个可以用布尔标志隐藏的环境。

问题:这些“注释”可能包含minted代码块,这些代码块会破坏之前在互联网上找到的解决方案。此外,我们希望能够在本地启用/禁用该标志。

情况:

  • 我们正在创建一个包含多个子文件的文件
  • 我们希望能够在单独构建子文件时设置标志

研究:

目前的解决方案:到目前为止,我已经想出了这个效果很好的方法——除了我无法在本地覆盖标志。

\ifthenelse{\boolean{shownotes}}{%
    \newcommand{\notes}[1]{Notes: #1}%
    \newenvironment{notesenv}{Notes:}{}
}{%
    \newcommand{\notes}[1]{}
    \usepackage{environ}
    \NewEnviron{notesenv}{} % omitting the \BODY command creates a hidden environment
}

该标志无法在本地覆盖,因为需要在定义时进行相应设置。我想我可以将定义复制到每个文件,但这真的是唯一的解决方案吗?

答案1

作为一种解决方法,您可以\inputminted使用NewEnviron

例如:

\RequirePackage{environ}
\NewEnviron{hidden}[0][]{\if@hidden\else\BODY\fi}

...

\begin{hidden}
    \inputminted{c}{solution.c}
\end{hidden}

答案2

此解决方案不适用于您的环境notesenv。但对于宏,您可以使用\notes创建一个新的条件。您可以在本地将其设置为 true 或 false。\ifincludenotes\newif

\documentclass{standalone}

\newif\ifincludenotes
\includenotestrue

\newcommand{\notes}[1]{\ifincludenotes#1\fi}

\begin{document}

\notes{Note1}

{\includenotesfalse%
\notes{Note2}%
}

\notes{Note3}

\end{document}

答案3

我知道这是一个非常古老的问题,但由于它尚未解决,也许我找到的解决方案可以帮助那些现在阅读这个问题的人,就像我遇到的那样。

我在隐藏包含已创建内容的部分时遇到了同样的问题,这取决于在文档顶部设置的变量。我能够通过混合使用\newifversion包来解决这个问题。

这是我的代码:

\documentclass{article}

\usepackage{minted}

%-- Block for content  hiding ---------------------------
\newif\ifxml    % define the if command to use to show/hide the content
\usepackage{version}
\newenvironment{xmlsection}{}{} % create the environment that will contain the document part to show/hide

\xmltrue    % set \xmlfalse to hide the XML part

\ifxml \else \excludeversion{xmlsection} \fi % the ifelse clause to show/hide the section "xmlsection"
%-- Block end -------------------------------------------

\date{}
\title{My Title}
\begin{document}
    \maketitle
    A sentence with \ifxml something to be shown only with xmltrue and \fi some text.

    \begin{xmlsection} % the part of the document that will be shown/hidden
    \section{Section with XML code}
    Some text.\\

    \begin{minted}[tabsize=2, fontsize=\footnotesize, breaklines, breakanywhere=false, autogobble, samepage]{XML}
        <rss xmlns:g="http://base.google.com/ns/1.0" version="2.0">
        <channel>
            <!-- ... some XML tags -->
        </channel>
        </rss>
    \end{minted}

    \newpage
    \end{xmlsection}

    Other document sections\ldots
\end{document}

希望这可以帮助 :)

相关内容