问题:
如何在ntheorem
定理列表中对齐定理的名称?
截屏:
截图:(经过 Photoshop 处理)
语境:
我正在使用该ntheorem
包排版定理和定义列表(\listtheorems
),并定义了几个自定义定理环境。环境名称的字长不同,导致列表中的排版不一致。
我用德语写作,其中只有一个环境名称明显较短,尽管其他名称之间也存在明显的最小曲折。
截屏:
相关问题 我发现了两个相关的问题但都只关注间距。
TeX.SE 问题:53353 ntheorem 中 \listtheorems 的标题间距
TeX.SE 问题:43166 \listtheorems 的间距数字宽度控制
最小示例:
\documentclass{article}
\usepackage{ntheorem}
\theoremlisttype{allname}
\newtheorem{axiom}{Axiom}
\newtheorem{proposition}{Proposition}
\newtheorem{lemma}{Lemma}
\newtheorem{corollary}{Corollary}
\newtheorem{converse}{Converse}
\begin{document}
\listtheorems{axiom,proposition,lemma,corollary,converse}
\begin{axiom}[Theorem 1] \end{axiom}
\begin{proposition}[Theorem 2] \end{proposition}
\begin{lemma}[Theorem 3] \end{lemma}
\begin{corollary}[Theorem 4] \end{corollary}
\begin{converse}[Theorem 5] \end{converse}
\end{document}
答案1
为了解决这个问题,我们需要\thm@@thmline
修补ntheorem
。
它被称为\thm@@thmline@noname
或,\thm@@thmline@name
取决于被调用的选项all
或opt
或,分别allname
或optname
。
中有两个版本的宏ntheorem
。带有四个参数的宏用于非hyperref
文档。带有五个参数的宏用于hyperref
加载文档时。
因此,您可以像第一个代码片段一样\thm@@thmline
直接修补并强制allname
/optname
行为,也可以像第二个代码片段一样修补,这将保留使用和 的\thm@@thmline@name
能力。 这两个代码片段都可以在有和没有 的情况下工作。opt
all
hyperref
解决方案 1
\documentclass{article}
\usepackage{ntheorem}
%\usepackage{hyperref}
%\usepackage[hyperref]{ntheorem}
\makeatletter
\AtBeginDocument{
\@ifpackageloaded{hyperref}
{
% hyperref version of the macro
\renewcommand\thm@@thmline[5]{%
\@dottedtocline {-2}{0em}{2.3em}{\hyper@linkstart{link}{#5}{\makebox[\widesttheorem][l]{#1 \protect \numberline {#2}}#3}\hyper@linkend}{#4}%
}
}
{
% standard, non-hyperref version of the macro
\renewcommand\thm@@thmline[4]{%
\@dottedtocline {-2}{0em}{2.3em}{\makebox[\widesttheorem][l]{#1 \protect \numberline {#2}}#3}{#4}%
}
} \settowidth{\widesttheorem}{命题 10\quad} } \makeatother \newlength\widesttheorem
\theoremlisttype{allname}
\newtheorem{axiom}{Axiom}
\newtheorem{proposition}{Proposition}
\newtheorem{lemma}{Lemma}
\newtheorem{corollary}{Corollary}
\newtheorem{converse}{Converse}
\begin{document}
\listtheorems{axiom,proposition,lemma,corollary,converse}
\begin{axiom}[Theorem 1]
\end{axiom}
\begin{proposition}[Theorem 2]
\end{proposition}
\begin{lemma}[Theorem 3]
\end{lemma}
\begin{corollary}[Theorem 4]
\end{corollary}
\begin{converse}[Theorem 5]
\end{converse}
\end{document}
解决方案 2
\documentclass{article}
\usepackage{ntheorem}
%\usepackage{hyperref}
%\usepackage[hyperref]{ntheorem}
\makeatletter
\def\thm@@thmline@name#1#2#3#4{%
\@dottedtocline{-2}{0em}{2.3em}%
{\makebox[\widesttheorem][l]{#1 \protect\numberline{#2}}#3}%
{#4}}
\@ifpackageloaded{hyperref}{
\def\thm@@thmline@name#1#2#3#4#5{%
\ifx\\#5\\%
\@dottedtocline{-2}{0em}{2.3em}%
{\makebox[\widesttheorem][l]{#1 \protect\numberline{#2}}#3}%
{#4}
\else
\ifHy@linktocpage\relax\relax
\@dottedtocline{-2}{0em}{2.3em}%
{\makebox[\widesttheorem][l]{#1 \protect\numberline{#2}}#3}%
{\hyper@linkstart{link}{#5}{#4}\hyper@linkend}%
\else
\@dottedtocline{-2}{0em}{2.3em}%
{\hyper@linkstart{link}{#5}%
{\makebox[\widesttheorem][l]{#1 \protect\numberline{#2}}#3}\hyper@linkend}%
{#4}%
\fi
\fi}
}
\makeatother
\newlength\widesttheorem
\AtBeginDocument{
\settowidth{\widesttheorem}{Proposition 10\quad}
}
\theoremlisttype{allname}
\newtheorem{axiom}{Axiom}
\newtheorem{proposition}{Proposition}
\newtheorem{lemma}{Lemma}
\newtheorem{corollary}{Corollary}
\newtheorem{converse}{Converse}
\begin{document}
\listtheorems{axiom,proposition,lemma,corollary,converse}
\begin{axiom}[Theorem 1]
\end{axiom}
\begin{proposition}[Theorem 2]
\end{proposition}
\begin{lemma}[Theorem 3]
\end{lemma}
\begin{corollary}[Theorem 4]
\end{corollary}
\begin{converse}[Theorem 5]
\end{converse}
\end{document}
在参数中\settowidth
放置最长的标签、最大的数字和合适的间距。