如何区分编号部分和未编号部分?

如何区分编号部分和未编号部分?

这个问题类似于我最近提出的问题. 其他问题涉及章节,这一个指的是部分。针对章节的解决方案似乎不适用于部分。


我正在写memoir文档,我想使用以下方法自定义部分标题的外观蒂克兹1.到目前为止,这是有效的,如 MWE 2所示:

\documentclass[a4paper,11pt]{memoir}

\usepackage{lipsum}

\usepackage{tikz}
\usetikzlibrary{calc}

\renewcommand{\midpartskip}{}
\renewcommand{\printpartname}{}
\renewcommand{\partnamenum}{}
\renewcommand{\printpartnum}{}
\renewcommand{\printparttitle}[1]{\noindent\Huge\begin{tikzpicture}
  \clip (0,0) rectangle (\textwidth,\baselineskip);

  \node (bottomleft) at (0,0) {};
  \node (topright) at (\textwidth,\baselineskip) {};

  \draw[red] (bottomleft.center) -- (topright.center);

  \node at ($(bottomleft)!0.5!(topright)$) {\textbf{#1}};

  \node at (.1\textwidth, .5\baselineskip) {\thepart};
\end{tikzpicture}}

\begin{document}

\part{First}

\lipsum[1-10]

\part*{Extra}

\lipsum[11-20]

\part{Last}

\lipsum[21-30]

\end{document}

这将在每个零件的开头输出零件名称和零件编号,以便将这两条信息嵌入到图形中。

不幸的是(尽管并不令人意外),中间未编号part( \part*) 重复使用前一个部分的编号。我想隐藏该编号。因此,我的问题是:

我如何知道当前零件是否已编号?是否有任何函数可以返回这样的值,或者是否有一个函数仅在当前部分已编号时才打印其参数?


正如我已经问过的关于章节的类似问题,我首先尝试应用针对该问题建议的解决方案:

编号章节会调用该\printchapternum命令,而未编号章节则会调用该\printchapternonum命令。因此,这些命令中的每一个都可以替换,以设置一个标记,然后可以从 内部进行检查\printchaptertitle

不幸的是,虽然\printpartnum存在零件命令,但\printpartnonum似乎不存在类似的命令。memoir手动的,也没有提到未编号部分,就像没有提到未编号章节和一样\printchapternonum。因此,适用于章节的解决方案显然不适用于部分。


1:我的实际图形要复杂得多,也更吸引人。此处 MWE 中的简单图形部分标题仅用于演示目的。

2:与我的实际文档不同,此 MWE 的内容取自lipsum包裹

答案1

基于评论经过达莱夫,我可以通过修补来解决这个问题\@spart

\documentclass[a4paper,11pt]{memoir}

\usepackage{lipsum}

\newif\ifisstarredpart
\isstarredpartfalse

\usepackage{tikz}
\usetikzlibrary{calc}

\usepackage{letltxmacro}
\makeatletter
\LetLtxMacro{\@oldspart}{\@spart}
\renewcommand{\@spart}[1]{\isstarredparttrue\@oldspart{#1}\isstarredpartfalse}
\makeatother

\renewcommand{\midpartskip}{}
\renewcommand{\printpartname}{}
\renewcommand{\partnamenum}{}
\renewcommand{\printpartnum}{}%{\isstarredpartfalse}
\renewcommand{\printparttitle}[1]{\noindent\Huge\begin{tikzpicture}
  \clip (0,0) rectangle (\textwidth,\baselineskip);

  \node (bottomleft) at (0,0) {};
  \node (topright) at (\textwidth,\baselineskip) {};

  \draw[red] (bottomleft.center) -- (topright.center);

  \node at ($(bottomleft)!0.5!(topright)$) {\textbf{#1}};

  \ifisstarredpart
  \else
    \node at (.1\textwidth, .5\baselineskip) {\thepart};
  \fi
\end{tikzpicture}}

\begin{document}

\part{First}

\lipsum[1-10]

\part*{Extra}

\lipsum[11-20]

\part{Last}

\lipsum[21-30]

\end{document}

对于修补,我使用了letltxmacro包裹,正如建议的那样另一个问题的答案

补丁程序的工作原理是,在\@spart评估原始版本之前,将带星号部分的标志设置为true,之后再次设置为false

相关内容