我想创建一个结构分隔符,其行为与 相同,\section
但有条件地进行编译。在下面的 MWE 中,我将其标记为\draftsection
。本节的内容仅应在 时进行编译\draftmodetrue
。我应该如何定义\draftsection
?
% arara: lualatex
\documentclass[10pt,twocolumn]{book}
\usepackage[margin=0.5in,showframe]{geometry}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{graphicx}
\usepackage{lipsum}
\newif\ifdraftmode
\draftmodefalse
\begin{document}
\chapter{Apple}
\lipsum{1-2}
\section{Banana}
\lipsum{2-3} % Always show this
\draftsection{Cherry}
% if \draftmodefalse do not compile anything from here
\lipsum{3-4} %(should not be shown, since \draftmodefalse)
% To here
%% if \draftmodetrue, everything should compile identically to the case \draftsection were replaced by \section
\section{Durian}
\lipsum{4-5} % Since this is not a draft section it should always be shown
\end{document}
我还知道我可以创建一个条件注释,如下面的代码所示:
\newif\ifdraftmode
\DeclareRobustCommand{\draftcomment}[1]{
\ifdraftmode
#1
\fi
}
我希望能够找到一个解决方案,(有效地)自动将上面}
的结束括号\draftcomment
放在下一节的开头。
那就是我认为我基本上想要
\draftcomment{\section {section content} }
其中 {section content} 是 Cherry 和 Durian 之间的所有内容。问题是我不知道如何让 latex{section content}
自动找出它们是什么。
LaTeX 如何跟踪哪个内容在哪个章节?显然,对于方程式编号,LaTeX 会跟踪方程式出现在哪个章节中。
我通常使用 lualatex 进行编译,因此对于需要或不需要的解决方案我都可以接受。
答案1
您可以\draftsection
按照以下方式定义:
\long\def\draftsection#1#2\section{%
\section{#1}% Print regular \section{<title>} for \draftsection{<title>}
\ifdraftmode
#2% Only print content between \draftsection and next \section if in draft mode
\fi
\section% Restore captured \section for next \section
}
它的作用如下:
\section{<title>}
只要您使用它就会打印\draftsection{<title>}
(无论 的状态如何\ifdraftmode
;仅当 时,才会打印
\draftsection{<title>}
和 后续内容之间的内容。\section
\draftmodetrue
它需要有一个明确的
\section
紧随其后\draftsection{<title>}
。因此,您不能将 用作\draftsection{<title>}
文档的最后一节。*
如果您打算使用(带星号、未编号)版本,或者需要可选参数(如\draftsection[<ToC entry>]{<title>}
),则需要更新定义。