上下文: 我正在撰写一份包含多个章节的科学报告,其中包含许多编号的假设。我在序言中创建了一个自定义假设环境:
\newtheorem{hypothesis}{Hypothesis}[chapter]
文档正文中的假设示例如下:
\begin{hypothesis}
\label{HXonY}
There is a positive relationship between X and Y.
\end{hypothesis}
我的问题: 我如何创建自定义假设列表(如列出以下内容的目录):
- 假设数字(例如 1.1、1.2、2.1 等)
- 文档中每个假设的文本
- 记录的页码
例如,
List of Hypotheses
1.1 There is a positive relationship between X and Y .................. 32
1.2 There is a negative relationship between something and Z........... 43
ETC。
答案1
我无法让任何定理包直接生成这样的列表。因此,以下使用 提供的工具生成自己的列表ntheorem
。它的工作原理是直接将行添加到定理列表中hypolist
。
\documentclass{book}
\usepackage{ntheorem}
\newtheorem{hypo}{Hypothesis}[chapter]
\newtheorem{hypolist}{Hypothesis}[chapter]
\newcommand*\hypothesis[1]{%
\stepcounter{hypolist}%
\addtheoremline{hypolist}{#1}%
\begin{hypo}#1\end{hypo}
}
\begin{document}
\chapter*{List of Hypotheses}
\listtheorems{hypolist}
\chapter{foo}
\hypothesis{There is a positive relationship between $X$ and $Y$.}
\chapter{bar}
\hypothesis{There is a positive relationship between $X$ and $Z$.}
\hypothesis{There is a positive relationship between $Z$ and $Y$.}
\end{document}
我定义了一个命令而不是一个环境,因为它更简单,而且无论如何你不能在列表中使用多段落条目。
答案2
该ntheorem
包可以执行以下操作:
\listtheorems{hypothesis}
答案3
您可以使用thm工具包(注意创建新定理的不同语法)。
\documentclass{book}
\usepackage{amsthm}
\usepackage{thmtools}
\declaretheorem[numberwithin=chapter]{hypothesis}
\declaretheorem[numberwithin=chapter]{theorem}
\begin{document}
\renewcommand{\listtheoremname}{List of Hypotheses}
\listoftheorems[ignoreall,show={hypothesis}]
\chapter{foo}
\begin{hypothesis}[X-Y-relationship]
There is a positive relationship between X and Y.
\end{hypothesis}
\begin{theorem}
Some text.
\end{theorem}
\end{document}
答案4
最后我决定使用斯维夫。即,我有一个包含 tex 和 R 代码块的 Rnw 文件,它充当 LaTeX 文档的预处理器。
我有一个 csv 文件,其中存储假设,每行一个假设:
hypotheses <- read.csv("hypotheses.csv")
以下 R 函数输出假设环境的乳胶:
outputHypothesis <- function(label, data = hypotheses) {
result <- c("\\begin{hypothesis}",
paste("\\label{", label, "}"),
data[data$label==label, "text"],
"\\end{hypothesis}")
cat(result, sep="\n")
}
然后 Rnw 文件有一个插入 tex 的 R 代码块:
<<results=tex>>=
outputHypothesis("H1XcausesY")
@
我仍然需要完成实际创建假设表的下一步,但我想我会在 Sweave 中将其作为 R 代码块来实现。
我已经做过的一件事是使用数据库在讨论部分显示一个表格,该表格使用假设数据库作为来源,并显示(基于数据库)一组研究中的每项研究是否支持这些假设:
\begin{landscape}
\singlespacing
\begin{longtable}[p]{p{2cm}p{10cm}p{2.5cm}p{2.5cm}p{2.5cm}}
\caption{Summary of Support for Hypotheses}
\label{discussionhypotheses}\\
\toprule
Number & Hypothesis & Study 1 & Study 2 & Study 3\\
\midrule
\endfirsthead
\toprule
Number & Hypothesis & Study 1 & Study 2 & Study 3\\
\midrule
\endhead
\multicolumn{5}{r}{\emph{Table continues on next page}} \\
\endfoot
\bottomrule
\endlastfoot
<<hypothesis_table, results=tex>>=
discussionHypotheses <- paste("\\ref{", hypotheses$label, "}",
"& ", hypotheses$text,
" & ", hypotheses$support_study1,
" & ", hypotheses$support_study2,
" & ", hypotheses$support_study3,
"\\\\")
cat(discussionHypotheses, sep ="\n")
@
\end{longtable}
\end{landscape}