
я использую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
Вы можете использовать \@addpunct
from 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}
Не забудьте маскировать концы строк в определениях макросов.