如何在定理类型环境中生成定理环境名称?

如何在定理类型环境中生成定理环境名称?

动机:我想声明一个命令\tbc(不带参数)以在环境中使用它。我希望此命令生成如下文本问题 2 继续在下一页,开始新的一页并制作问题 2 继续...我使用各种环境,例如问题、问题、练习等,但都使用带有计数器的连续编号theorem。当然,我希望我\tbc问题 2当它用于\begin{problem}和之间\end{problem}问题 3当它用于\begin{question}和之间时\end{question}

问题:我知道我可以用 获取环境编号\the\value{theorem}。但我不知道如何获取环境名称。

我知道还有其他软件包可以实现这个功能,但是拥有自己的小命令可以让我更好地将其与我的文档风格相融合。

答案1

一个利用的黑客攻击amsthm:当排版标题时,我重新定义\tbcname扩展为#1(定理名称)。

\documentclass{article}
\usepackage{amsthm}
\usepackage{lipsum}

\newtheoremstyle{definition-keep}
  {\topsep}   % ABOVESPACE
  {\topsep}   % BELOWSPACE
  {\upshape}  % BODYFONT
  {0pt}       % INDENT (empty value is the same as 0pt)
  {\bfseries} % HEADFONT
  {.}         % HEADPUNCT
  {5pt plus 1pt minus 1pt} % HEADSPACE
  {\gdef\tbcname{#1}\thmname{#1} \thmnumber{#2}\thmnote{ (#3)}} % CUSTOM-HEAD-SPEC

\newtheorem{theorem}{Theorem}
\theoremstyle{definition-keep}
\newtheorem{problem}[theorem]{Problem}
\newtheorem{exercise}[theorem]{Exercise}

\newcommand{\tbc}{%
  \par
  \textit{\tbcname~\thetheorem\ continues on the next page}\clearpage
  \textit{\tbcname~\thetheorem\ continued}\dots\par
}

\begin{document}

\begin{problem}
\lipsum[1-3]
\tbc
\lipsum[4]
\end{problem}

\end{document}

在此处输入图片描述

答案2

如果您的环境名称与这些环境使用的计数器名称相同,则您可以使用它\@currenvir来获取环境名称和与该环境关联的计数器。

除此之外:

  1. 瓦里雷夫-package 可用于获取“下一页”或“下一页”等短语。这给文本带来了一些变化。

  2. 我认为,为了从环境外部引用\autoref-command超链接-package 将成为你的朋友。

    它会将与计数器相关的名称添加到引用的前面。

    这些名称来自于名称具有模式的宏 ,或者(如果未定义进一步的宏)。
    \⟨counter⟩autorefname

    \⟨counter⟩name
    (请参阅 hyperref-package 手册第 4 节“附加用户宏”。)

    但有一个小问题:

    当您对几个类似定理的环境使用同一个计数器时,您需要 为该计数器提供几个名称/几个宏。\⟨counter⟩autorefname

    该问题已由以下软件包解决别名作者:Heiko Oberdiek。

以下是一个小例子:

\documentclass{article}

%===================[adjust margins/layout for the example]====================
\paperwidth=8.91cm
\paperheight=5.25 cm
\csname @ifundefined\endcsname{pagewidth}{}{\pagewidth=\paperwidth}%
\csname @ifundefined\endcsname{pdfpagewidth}{}{\pdfpagewidth=\paperwidth}%
\csname @ifundefined\endcsname{pageheight}{}{\pageheight=\paperheight}%
\csname @ifundefined\endcsname{pdfpageheight}{}{\pdfpageheight=\paperheight}%
\textwidth=\paperwidth
\oddsidemargin=1.25cm
\marginparsep=.125\oddsidemargin
\marginparwidth=\oddsidemargin
\advance\marginparwidth-2\marginparsep
\advance\textwidth-2\oddsidemargin
\advance\oddsidemargin-1in
\evensidemargin=\oddsidemargin
\textheight=\paperheight
\topmargin=1.25cm
\footskip=.5\topmargin
{\normalfont\global\advance\footskip.5\ht\strutbox}%
\advance\textheight-2\topmargin
\advance\topmargin-1in
\headheight=0ex
\headsep=0ex
\pagestyle{plain}
\parindent=0ex
\parskip=0ex 
\topsep=0ex
\partopsep=0ex
%==================[eof margin-adjustments]====================================

\usepackage{varioref}

% In case you wish no hyperlinks and no bookmarks:
\AtBeginDocument{\NoHyper}
\usepackage[bookmarks=false]{hyperref}
% In case you wish hyperlinks and bookmarks:
%\usepackage{hyperref}

\usepackage{aliascnt}

\newtheorem{theorem}{Theorem}

% Create fake-counters that use the same count-register as the
% theorem-counter:
\newaliascnt{problem}{theorem}
\newaliascnt{question}{theorem}
\newaliascnt{exercise}{theorem}

% Define the autoref-names of the fake-counters when referencing then
% via \autoref
\newcommand\problemautorefname{Problem}
\newcommand\questionautorefname{Question}
\newcommand\exerciseautorefname{Exercise}


% Create theorem-environments that use the fake-counters:
\newtheorem{problem}[problem]{Problem}
\newtheorem{question}[question]{Question}
\newtheorem{exercise}[exercise]{Exercise}

% Apply the fix provided by the package aliascnt for \newtheorem when
% being used with a fake-counter -- see section 1, "User Interface" of
% the manual of the aliascnt-package, URL:
% <http://mirrors.ctan.org/macros/latex/contrib/oberdiek/aliascnt.pdf>
\aliascntresetthe{problem}
\aliascntresetthe{question}
\aliascntresetthe{exercise}

\makeatletter
%
% \tbc or \tbc[<referencing-command>]
%
\newcommand\tbccnt{0}%
\newcommand{\tbc}[1][\vpageref*]{%
  \par
  % globally step \tbccnt:
  \xdef\tbccnt{\number\numexpr\tbccnt+1\relax}%
  \begingroup
  % You probably wish to adjust varioref's behaviour:
  % \def\reftextfaceafter{on the next page}%
  % \def\reftextafter{on the next page}%
  \textit{%
    \csname\@currenvir autorefname\endcsname~%
    \csname the\@currenvir\endcsname\ continues \null%
    \hyperref[{tbc@continued@\tbccnt}]{#1{tbc@continued@\tbccnt}}.%
  }%
  \endgroup
  \clearpage
  \textit{%
    \phantomsection
    \label{tbc@continued@\tbccnt}%
    \csname\@currenvir autorefname\endcsname~%
    \csname the\@currenvir\endcsname\ continued%
  }\dots\par\ignorespaces
}
\makeatother

\begin{document}

\begin{theorem}
\label{Firsttheorem}
This is a theorem.
\tbc
This is a theorem.
\end{theorem}

\vfill

\begin{problem}
\label{Firstproblem}
This is a problem.
\tbc
This is a problem.
\end{problem}

\vfill

\begin{question}
\label{Firstquestion}
This is a question.
\tbc
This is a question.
\end{question}

\vfill

\begin{exercise}
\label{Firstexercise}
This is an exercise.
\tbc[on page~\pageref*]
This is an exercise.
\end{exercise}

\newpage

\noindent Referencing:

\verb|\autoref{Firsttheorem}|: \autoref{Firsttheorem}

\verb|\autoref{Firstproblem}|: \autoref{Firstproblem}

\verb|\autoref{Firstquestion|: \autoref{Firstquestion}

\verb|\autoref{Firstexercise}|: \autoref{Firstexercise}

\end{document}

在此处输入图片描述

在此处输入图片描述

在此处输入图片描述

在此处输入图片描述

在此处输入图片描述

在此处输入图片描述

相关内容