Use \IfEndWith com \ref e alnumsec.sty

Use \IfEndWith com \ref e alnumsec.sty

estou a usaralnumsecpara uma numeração de seção alfanumérica. Tenho um novo comando \myreferencepara criar referências com o hyperrefpacote. Isso funciona bem.

Quero que todas as minhas notas de rodapé criadas \myreferenceterminem com um ponto. É por isso que preciso verificar se a seção (por exemplo: I.1.) já termina com ponto. Tentei usar \IfEndWith{\detokenize{\ref{#1}}}{.}{(already has dot)}{.}mas não funciona.


Este é o meu exemplo:

\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

Responder1

\refnão é expansível, então \IfEndWithnão posso realmente trabalhar com \ref, mas \getrefnumberdo refcountpacote é expansível. O pacote é carregado de hyperrefqualquer maneira.

\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}

insira a descrição da imagem aqui

Responder2

Você pode usar \@addpunctfrom amsthmwhich não adicionará seu argumento se o fator de espaço atual for maior que 1000. No entanto, isso requer alterar um pouco o fator de espaço após os algarismos romanos.

\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}

Não se esqueça de mascarar os finais de linha nas definições de macro.

insira a descrição da imagem aqui

informação relacionada