我如何制作一个条件来检查它当前是否在\part
、\chapter
或内部\section
?
IF inside sectioning = TRUE
DO "This text is inside a section."
ELSE
DO "This text is not inside a section."
答案1
ConTeXt 提供系统模式 *section
在节标题内处于活动状态的、*subsection
等。例如
\def\CheckSection
{\doifmodeelse{*section}
{inside section}
{outside section}}
\def\CheckSubSection
{\doifmodeelse{*subsection}
{inside subsection}
{outside subsection}}
\setuppapersize[A7]
\starttext
\section{Test \CheckSection\ \CheckSubSection}
Test \CheckSection\ \CheckSubSection
\subsection{Test \CheckSection\ \CheckSubSection}
Test \CheckSection\ \CheckSubSection
\stoptext
给出
请注意,这些模式不活跃显示目录时。如果您想检查是否位于目录(或 ConTeXt 术语中的列表)内,请检查*list
模式。同样,您可以检查*marking
模式以查看是否位于标记(页眉或页脚)内,并检查以*register
查看是否位于寄存器(索引等)内。
答案2
\documentclass{article}
\newcount\Level
\let\Part=\part\def\part{\global\Level=0\Part}
\let\Chapter=\chapter\def\chapter{\global\Level=1\Chapter}
\let\Section=\section\def\section{\global\Level=2\Section}
\let\Subsection=\subsection\def\subsection{\global\Level=3\Subsection}
\let\Subsubsection=\subsubsection\def\subsubsection{\global\Level=4\Subsubsection}
\def\levelText{i am inside a
\ifcase\the\Level part
\or chapter
\or section
\or subsection
\or subsubsection
\else default text \fi}
\begin{document}
\part{foo}
\levelText
\section{bar}
\levelText
\subsection{baz}
\levelText
\end{document}
答案3
如果你的问题与你的另一个问题并自动提供\protect
之前\fbox
,你可以简单地说
\usepackage{etoolbox}
\robustify{\fbox}
这样以后的任何使用\fbox
都不需要\protect
内部移动参数(例如章节标题)。