4

I think it is better post my code and then ask my question

\documentclass[a4paper,12pt]{article}
\usepackage{amsmath}
\usepackage{amsthm}
\usepackage{lipsum}
\usepackage[T1]{fontenc} % optional
\usepackage{thmtools}

\declaretheoremstyle[%
spaceabove=\topsep,
spacebelow=\topsep,
headfont=\small\normalfont,
bodyfont=\itshape\small,
headpunct={.---},
postheadspace=1em,
headformat=\NAME\space\NUMBER,
headindent= 0pt,
]{remark}
\declaretheorem[style=remark,numberwithin=subsection]{remark}
\renewcommand{\theremark}{\arabic{remark}}
\newcommand\rmk[1]{\textit{Remark} \textup{\ref{#1}}}

\makeatletter
\renewcommand*{\p@section}{\S} %Add section symbol to section reference
\renewcommand*{\p@subsection}{\P} %Add section symbol to section reference
\makeatother

\begin{document}

\section{A}
\lipsum[1]

\subsection{A.1}
\label{a}

\begin{remark}
\label{remark}
\lipsum[2]
\end{remark}

\lipsum[2]

\subsection{A.2}

\begin{remark}
\lipsum[2]
\end{remark}

\lipsum[3]

\section{B}
\lipsum[1]
\subsection{B.1}

As we can see in \ref{a}~\rmk{remark}...

\end{document}

As you can see in my code, remark enumeration (and other environment enumerations) are restarted at each subsection. I'm very happy with that, but the problem is that when I want to cross-reference a remark from another subsection, I must specify the subsection explicitly, by writing \ref{sec:stuff}.

Is there a modification of my command \rmk such that includes the subsection reference automatically? Maybe create a new command which tells you the current subsection of that environment?

2
  • In my point it is easier with zref
    – user31729
    Mar 8, 2018 at 21:17
  • I had heard about cleveref package (I've even used it) but not about zref. I'll looking at it on the internet. Thanks.
    – Dog_69
    Mar 8, 2018 at 21:55

2 Answers 2

5

You can define \rmk in such a way that the number of the subsection is printed only if the referenced remark is in another subsection.

\documentclass[a4paper,12pt]{article}
\usepackage[T1]{fontenc}
\usepackage{amsmath}
\usepackage{amsthm}
\usepackage{thmtools}
\usepackage{xparse}

\usepackage{lipsum}

\declaretheoremstyle[
  spaceabove=\topsep,
  spacebelow=\topsep,
  headfont=\normalfont\itshape\small,
  bodyfont=\normalfont\small,
  headpunct={.\,---\enspace},
  postheadspace=0pt,
  headformat=\NAME\space\NUMBER,
  headindent= 0pt,
]{remark}
\declaretheorem[style=remark,numberwithin=subsection]{remark}
\renewcommand{\theremark}{\arabic{remark}}

\makeatletter
\renewcommand*{\p@section}{\S} %Add section symbol to section reference
\renewcommand*{\p@subsection}{\P} %Add section symbol to section reference
\renewcommand*{\p@remark}{\perhapssubsection{\thesubsection}}
\makeatother

\newcommand{\rmk}[1]{\textit{Remark}~\textup{\ref{#1}}}

\ExplSyntaxOn
\NewDocumentCommand{\perhapssubsection}{m}
 {
  \str_if_eq_x:nnF { #1 } { \thesubsection } { #1. }
 }
\ExplSyntaxOff

\begin{document}

\section{A}
\lipsum[1]

\subsection{A.1}
\label{a}

\begin{remark}
\label{remark}
\lipsum[2]
\end{remark}

\lipsum[2]

\subsection{A.2}

\begin{remark}
\lipsum[2]
\end{remark}

\lipsum[3]

\section{B}
\lipsum[1]
\subsection{B.1}

\begin{remark}\label{remarkhere}
\lipsum[2]
\end{remark}

As we can see in \rmk{remark}
and in \rmk{remarkhere}

\end{document}

I changed a bit the appearance of the remarks: I believe that the head should be in italics, but the body should be upright. Not only for uniformity with the references, but also for not making remarks too prominent: you're typesetting them in smaller type, after all. Feel free to revert.

enter image description here

5
  • your answer adding ''printed only if the referenced remark is in another subsection'' is awesome. In fact, this is was I wanted but I felt badly asking for so many things.
    – Dog_69
    Mar 8, 2018 at 21:59
  • 1
    @Dog_69 I just polished my crystal ball. 😀
    – egreg
    Mar 8, 2018 at 22:00
  • 2
    Yes, because you are a genius. All of you are genius in fact: ChristianHupfer, Mico, Ulrike Fischer, samcarter, barbara beeton... and many others I'm forgetting or simply I don't know them.
    – Dog_69
    Mar 8, 2018 at 22:05
  • It's too much but.. Would it be possible to change the order to able to get 1.1 Remark 1 instead of Remark 1.1.1?
    – Dog_69
    Mar 9, 2018 at 22:34
  • Forget it. I have found a way to do it. But thanks.
    – Dog_69
    Mar 9, 2018 at 22:36
3

Mostly, you need to add the instruction \renewcommand*{\p@remark}{\thesubsection.} in the preamble.

You may also want to look into loading the cleveref package (and its \cref macro) to simplify and streamline the creation of more than one cross-reference at a time. See the final paragraph of the following screenshot for an example of \cref.

enter image description here

% !TEX TS-program = pdflatex
\documentclass[a4paper,12pt]{article}
\usepackage{amsmath}
\usepackage{amsthm}
\usepackage[T1]{fontenc} % optional
\usepackage{thmtools}

\declaretheoremstyle[%
   spaceabove=\topsep,
   spacebelow=\topsep,
   headfont=\small\normalfont,
   bodyfont=\itshape\small,
   headpunct={.---},
   postheadspace=1em,
   headformat=\NAME\space\NUMBER,
   headindent= 0pt,
  ]{remark}
\declaretheorem[style=remark,numberwithin=subsection]
          {remark}
\renewcommand{\theremark}{\arabic{remark}}
\newcommand\rmk[1]{\textit{Remark}~\textup{\ref{#1}}}

\newcommand\blurb{Nam dui ligula, fringilla a, euismod sodales, 
    sollicitudin vel, wisi. Morbi auctor lorem non justo. Nam 
    lacus libero, pretium at, lobortis vitae, ultricies et, tellus.}

\makeatletter
\renewcommand*{\p@section}{\S}
\renewcommand*{\p@subsection}{\P}
\renewcommand*{\p@remark}{\thesubsection.} % <--- new
\makeatother

\usepackage{cleveref}
\crefname{remark}{\textit{Remark}}{\textit{Remarks}}

\begin{document}

\section{Bla bla bla}
\subsection{Ble ble ble}

\begin{remark} \label{remark_e}
\blurb
\end{remark}

\subsection{Bli bli bli}

\begin{remark} \label{remark_i}
\blurb
\end{remark}

\section{Blo blo blo}
\subsection{Blu blu blu}

As we can see in \rmk{remark_e} as well as in \rmk{remark_i}, \dots

\bigskip\noindent
As we can see in \cref{remark_e,remark_i}, \dots
\end{document}
1
  • Fantastic answer. I've decided to mark @egreg's answer because it includes a powerful tool which includes only the subsetion if it is different. On the other hand, I appreciate your comments about the cleveref package.
    – Dog_69
    Mar 8, 2018 at 22:02

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.