我正在使用 LaTeX 排版一些家庭作业,由于我们分配的问题分散在教科书中,所以我必须为我排版的每个问题输入问题编号。我希望这些问题看起来像这样:
问题 4.15。证明对于每个素数页,…
据我所知,所有直接使用的方法amsthm
都会产生类似
问题(4.15)。
或者
4.15. 问题。
这两种方法都不是我真正想要的。我在网上找到的大多数示例都比较复杂,因为它们支持自动编号,但这对我来说不是必需的(甚至不是很有用)。我想出了这个:
\newenvironment{myproblem}[1][]
{\vspace{1em} \noindent \textbf{Problem #1.}}
{\vspace{1em}}
它产生了我想要的输出,给出或带去难以察觉的间距,但这感觉像是一个临时解决方案。有没有办法使用amsthm
或ntheorem
或类似的东西来获得我想要的东西?
答案1
您可以使用该包作为定义您自己的定理样式thmtools
的前端。您可以使用选项来抑制自动编号,并使用附加注释字段手动引入编号。但请注意,这种方法有两个缺点:1) 您失去了交叉引用问题的可能性。2) 手动编号容易出错。amsthm
numbered=no
这是一个简单的例子:
\documentclass{article}
\usepackage{amsthm}
\usepackage{thmtools}
\declaretheoremstyle[
notefont=\bfseries, notebraces={}{},
bodyfont=\normalfont,
postheadspace=0.5em,
numbered=no,
]{mystyle}
\declaretheorem[style=mystyle]{problem}
\begin{document}
\begin{problem}[4.15]
Prove that for every prime $p$,
\end{problem}
\begin{problem}[3.12]
Prove that every integer
\end{problem}
\end{document}
正如我已经提到的,先前的解决方案消除了交叉引用。这是另一种允许您交叉引用问题的方法。我假设问题的双重计数器的第一个组件(您示例中的“4”)与已定义的计数器(按惯例为分段单元的计数器)相关联,并且只有第二个组件(您示例中的“15”)将被手动引入(再次可能是错误来源)。
在下面的例子中,我amsthm
定义了一个新的类定理结构definition
;这个新结构将在各节内按从属顺序编号。然后我使用一个带有强制参数的新环境包装了这个定义,该参数将用于为计数器的第二个组件设置适当的值。
\documentclass{article}
\usepackage{amsthm}
\theoremstyle{definition}
\newtheorem{prob}{Problem}[section]
\newenvironment{problem}[1]
{\setcounter{prob}{\numexpr#1-1\relax}\begin{prob}}
{\end{prob}}
\begin{document}
\section{Test}
\begin{problem}{15}\label{test1}
Prove that for every prime $p$,
\end{problem}
\section{Test}
\begin{problem}{8}\label{test2}
Prove that for every ring $R$,
\end{problem}
We see in Problems~\ref{test1} and~\ref{test2}
\end{document}
答案2
这是一个更简单的解决方案,它也可以处理交叉引用。
\documentclass[a4paper]{article}
\usepackage{amsthm}
\makeatletter
\newtheorem*{probleminn}{Problem \@currentlabel}
\newenvironment{problem}[1]
{\def\@currentlabel{#1}\probleminn}{\endprobleminn}
\makeatother
\begin{document}
\begin{problem}{4.14}
Prove that $2$ is prime.
\end{problem}
\begin{problem}{4.15}\label{bigproblem}
Prove that $2+2=4$.
\end{problem}
\begin{problem}{5.5}\label{easyone}
Prove that every even integer greater than $2$ is the sum of two primes.
\end{problem}
I can solve \ref{easyone}, but I'm stuck with \ref{bigproblem}.
\end{document}
定义\@currentlabel
是为 分配正确值所需要的\label
。
答案3
这个怎么样:
\documentclass{book}
\usepackage{thmtools}
\declaretheorem[numberwithin={}]{theorem}
\begin{document}
\begin{theorem}
something
\end{theorem}
\begin{theorem}
something
\end{theorem}
\end{document}