编译文档中的所有定义,但输出中的格式不一致

编译文档中的所有定义,但输出中的格式不一致

我正在使用以下代码编译笔记末尾的所有定义列表,有点像词汇表,但自动化了。但是,输出中定义的格式存在问题: - 只有前两个定义以粗体显示单词“定义 4.1”左右,并且左对齐,而所有后续定义都居中对齐,没有粗体部分。我不明白为什么会发生这种情况,也不知道我应该做哪些更改。

    \documentclass{book}
\usepackage{amsmath, amssymb, amsthm, latexsym}
\theoremstyle{plain}
\newtheorem{thm}{Theorem}[chapter]
\usepackage{environ}
\theoremstyle{definition}
\newtheorem{defnINN}{Definition}[chapter]
    \makeatletter
    \newtoks\definition@toks
    \newcounter{definitioncount}

    \NewEnviron{defn}[1][]{%
      \@tempswafalse
      \expandafter\catch@definitionlabel\BODY\label\@@nil\@nil
      \if\relax\detokenize{#1}\relax
        \defnINN
      \else
        \defnINN[#1]%
      \fi
      \if@tempswa
        \refstepcounter{definitioncount}%
        \edef\definition@label{\romannumeral\value{definitioncount}}%
        \label{\definition@label}%
      \fi
      \BODY
      \enddefnINN
      \edef\@tempa{%
        \noexpand\item[Definition\noexpand~\thedefnINN\noexpand~%
        (page\noexpand~\noexpand\pageref{\definition@label})]%
        \unexpanded\expandafter{\BODY}%
      }
      \global\definition@toks=\expandafter{\the\expandafter\definition@toks\@tempa}%
    }
    \def\catch@definitionlabel#1\label#2#3\@nil{%
      \if\relax\detokenize{#3}\relax
        % no \label
        \@tempswatrue
      \else
        % \label
        \def\definition@label{#2}%
      \fi

    }
    \def\printdefinitions{%
      \begin{description}\let\label\@gobble
      \the\definition@toks
      \end{description}
    }
    \makeatother
    \begin{document}
    \chapter{One}
    \begin{defn}
    A model is said to be a game if it comprises of players. \\
    \end{defn}

    \chapter{two}
    \begin{defn}
     this is chapter two
    \end{defn}

    \chapter{three}
    \section*{three as well}
    \begin{defn}
     \center{this is chapter three}
    \end{defn}

    \chapter*{List of Definitions}
    \printdefinitions
    \end{document}

我进行了编辑以制作一个例子,但代码似乎与这个例子运行得很好,我想我的序言中的其他内容因此产生了冲突!

编辑:如果有人对问题的原因感兴趣,我在第二个定义中使用了 \center{},导致所有其他内容在最后的列表中居中对齐。

答案1

由于您的 MWE 编译时没有显示您的问题,因此很难排除代码故障,但您是否过度处理了这个问题? 以下内容似乎可以满足您的要求,但也许还有一些其他功能需要您采用不同的方法:

\documentclass{book}
\usepackage{amsmath, amssymb, amsthm, latexsym}
\theoremstyle{plain}
\newtheorem{thm}{Theorem}[chapter]
\theoremstyle{definition}
\newtheorem{Definition}{Definition}[chapter]
\usepackage{etoolbox}
\usepackage{environ}
\newcommand\definitionList{\relax}
\NewEnviron{defn}[1][\relax]{%
    \ifx#1\relax\relax\Definition\BODY\endDefinition%
    \else\Definition[#1]\BODY\endDefinition%
    \fi%
    %\label{definition\theDefinition}% unneccesary
    \xappto\definitionList{\noexpand\item[Definition~\theDefinition\space (page \thepage)]\BODY}%
}
\newcommand\listofdefinitions{% print list of definitions
      \chapter*{List of Definitions}
      \begin{description}\definitionList\end{description}
}

\begin{document}
    \chapter{One}
    \begin{defn}
    A model is said to be a game if it comprises of players.
    \end{defn}

    \chapter{two}
    \begin{defn}
     This is chapter two
    \end{defn}

    \chapter{three}
    \section*{three as well}
    \begin{defn}
     This is chapter three
    \end{defn}

    \listofdefinitions
\end{document}

输出如下:

在此处输入图片描述

使用xappto来自电子工具箱包导致了一些简化,但主要的变化是你不需要使用标签,因为定义列表正在被打印定义已创建。如果您想将定义列表中的超链接添加回实际定义(我希望如此),那么您确实需要标签。以下修改处理超链接:

\documentclass{book}
\usepackage{amsmath, amssymb, amsthm, latexsym}
\theoremstyle{plain}
\newtheorem{thm}{Theorem}[chapter]
\theoremstyle{definition}
\newtheorem{Definition}{Definition}[chapter]
\def\Definitionautorefname{Definition}

\usepackage{etoolbox}
\usepackage{environ}
\usepackage{hyperref}
\newcommand\definitionList{\relax}
\NewEnviron{defn}[1][\relax]{%
    \ifx#1\relax\relax\Definition\BODY\endDefinition%
    \else\Definition[#1]\BODY\endDefinition%
    \fi%
    \label{definition\theDefinition}
    \xappto\definitionList{%
       \noexpand\item[\noexpand\autoref{definition\theDefinition} (page \thepage)]\BODY%
    }%

\newcommand\listofdefinitions{% print list of definitions
      \chapter*{List of Definitions}
      \begin{description}\definitionList\end{description}
}

\begin{document}
    \chapter{One}
    \begin{defn}
    A model is said to be a game if it comprises of players.
    \end{defn}

    \chapter{two}
    \begin{defn}
     This is chapter two
    \end{defn}

    \chapter{three}
    \section*{three as well}
    \begin{defn}
     This is chapter three
    \end{defn}

    \listofdefinitions
\end{document}

相关内容