Используйте \IfEndWith с \ref и alnumsec.sty

Используйте \IfEndWith с \ref и alnumsec.sty

я используюalnumsecдля буквенно-цифровой нумерации разделов. У меня есть новая команда \myreferenceдля создания ссылок с hyperrefпакетом. Это работает отлично.

Я хочу, чтобы все мои сноски, созданные , \myreferenceзаканчивались одной точкой. Вот почему мне нужно проверить, заканчивается ли раздел (например: I.1.) уже точкой. Я пробовал использовать, \IfEndWith{\detokenize{\ref{#1}}}{.}{(already has dot)}{.}но это не работает.


Вот мой пример:

\documentclass[]{report}

\usepackage{hyperref}
\usepackage{xstring}

\usepackage{alnumsec}
\alnumsectionlevels{1}{section,subsection,subsubsection}
\alnumsecstyle{Ral}

\newcommand{\myreference}[1]{
   \footnote{
    See page \pageref{#1}, section \ref{#1}
    \IfEndWith{\detokenize{\ref{#1}}}{.}{(already has dot)}{.}
   }
}

\begin{document}

\section{Section}\label{a}
First section\myreference{a}
\subsection{jkhahjkas}
My subsection.
\subsubsection{three}\label{b}
Third section\myreference{b}

\end{document}
\endinput

решение1

\refне расширяемый, поэтому \IfEndWithне может работать с \ref, но \getrefnumberиз refcountпакета расширяемый. Пакет загружается в hyperrefлюбом случае.

\documentclass[]{report}

\usepackage{xstring}
\usepackage{hyperref}


\usepackage{alnumsec}
\alnumsectionlevels{1}{section,subsection,subsubsection}
\alnumsecstyle{Ral}

\newcommand{\myreference}[1]{
   \footnote{
    See page \pageref{#1}, section \ref{#1}
    \IfEndWith{\getrefnumber{#1}}{.}{(already has dot)}{.}
   }
}

\begin{document}

\section{Section}\label{a}
First section\myreference{a}
\subsection{jkhahjkas}
My subsection.
\subsubsection{three}\label{b}
Third section\myreference{b}

\end{document}

введите описание изображения здесь

решение2

Вы можете использовать \@addpunctfrom amsthm, который не будет добавлять свой аргумент, если текущий фактор пространства больше 1000. Однако для этого потребуется немного изменить фактор пространства после римских цифр.

\documentclass[]{report}

\usepackage{amsthm} % for \@addpunct
\usepackage{hyperref}

\usepackage{alnumsec}

\alnumsectionlevels{1}{section,subsection,subsubsection}
\alnumsecstyle{Ral}
\protected\def\Romanperiod{\spacefactor1001 .}
\surroundRoman{}{\Romanperiod}

\makeatletter
\newcommand{\myreference}[1]{% <-- don't forget
   \footnote{% <-- don't forget
     See page~\pageref{#1}, section~\ref{#1}\@addpunct{.}% <-- don't forget
   }% <-- don't forget
}
\makeatother

\begin{document}

\section{Section}\label{a}
First section\myreference{a}

\subsection{jkhahjkas}
My subsection.

\subsubsection{three}\label{b}
Third section\myreference{b}

\end{document}

Не забудьте маскировать концы строк в определениях макросов.

введите описание изображения здесь

Связанный контент