按部分将“章节编号:”附加到参考书目中已编号的章节,但不附加未编号的章节

按部分将“章节编号:”附加到参考书目中已编号的章节,但不附加未编号的章节

我使用以下代码在“书籍”文档中概括按章节列出的参考书目,但这会将“章节编号:”附加到所有章节,包括未编号的章节。我如何修改代码以仅将其附加到编号的章节?

梅威瑟:

\documentclass{book}

\usepackage{lipsum}
\usepackage[backend=biber,
        natbib=true,
        style=authoryear]{biblatex}
\usepackage{nameref} % For ref. by segment

\addbibresource{biblatex-examples.bib}

\defbibheading{bibintoc}{%
    \section*{Chapter \ref{refsegment:\therefsection\therefsegment}: 
    \nameref{refsegment:\therefsection\therefsegment}}
}

\begin{document}

    \chapter{Numbered chapter}
    \setcounter{chapter}{1}
    \begin{refsegment}
        \lipsum[1]
        \cite{glashow,weinberg}
    \end{refsegment}

    \chapter*{Unnumbered}
    \begin{refsegment}
        \lipsum[2]
        \cite{reese}
    \end{refsegment}

    \printbibheading
    \bibbysegment[heading=bibintoc]

\end{document}

答案1

如果您加载该hyperref包,则有关标签是用于编号章节还是未编号章节的信息将写入.aux文件中。然后您可以通过结果的第四个元素访问此信息\real@setref并提供适当的文本。

对于编号章节,第四个元素代表chapter.7第 7 章;对于未编号章节,其形式为chapter*.1。您可以使用xstring包来检查子字符串是否存在*.

这是一个宏\mychref,它根据章节是否编号来打印您想要的标题文本类型。

\makeatletter
\newcommand*{\mychref}[1]{\IfSubStr{%
    \expandafter\real@setref\csname r@#1\endcsname\@fourthoffive{#1}%
  }{*.}{}{Chapter \ref{#1}: }\nameref{#1}}
\makeatother

示例输出

\documentclass{book}

\usepackage{lipsum}
\usepackage[backend=biber,
        natbib=true,
        style=authoryear]{biblatex}
\usepackage{xstring,nameref,hyperref}

\makeatletter
\newcommand*{\mychref}[1]{\IfSubStr{%
    \expandafter\real@setref\csname r@#1\endcsname\@fourthoffive{#1}%
  }{*.}{}{Chapter \ref{#1}: }\nameref{#1}}
\makeatother

\addbibresource{biblatex-examples.bib}

\defbibheading{bibintoc}{%
  \section*{\mychref{refsegment:\therefsection\therefsegment}}
}

\begin{document}

    \chapter{Numbered chapter}
    \setcounter{chapter}{1}
    \begin{refsegment}
        \lipsum[1]
        \cite{glashow,weinberg}
    \end{refsegment}

    \chapter*{Unnumbered}
    \begin{refsegment}
        \lipsum[2]
        \cite{reese}
    \end{refsegment}

    \printbibheading
    \bibbysegment[heading=bibintoc]

\end{document}

相关内容