由于某种原因,我需要操纵\ref
命令的输出以匹配没有点的四位数字的模式。例如:
\title{A Very Simple \LaTeXe{} Template}
\documentclass[12pt]{article}
\begin{document}
\section{Section 1}\label{sec:section1}
\subsection{Section 1.1}\label{sec:section11}
\ref{sec:section11}
\end{document}
的输出\ref{sec:section11}
是“1.1”,但我需要它“是0011”。
我使用xparse
和得到了一些代码l3regex
我在这里找到了:如何替换文本,但这只适用于纯文本。
\replace{1.1}{.}{} results in 11
\replace{\ref{sec:section11}}{.}{} results in 1.1
答案1
如果你想执行字符串替换,最好\getrefnumber
使用refcount
包而不是\ref
。它是 的可扩展版本,\ref
可用于字符串替换等。\getrefnumber
但是,如果它们不首先扩展其参数(从而在\getrefnumber{sec:section11}
而不是 在 上执行替换1.1
),您链接到的问题的一些答案可能仍然无法开箱即用。
这是一个可能的解决方案,使用xstring
包。我不知道应该通过什么程序将 1.1 转换为 0011,所以这可能无法准确地实现您的要求。
\documentclass{article}
\usepackage{refcount}
% \usepackage{hyperref} %% Optional
%% N.B. refcount is automatically loaded by hyperref, so you don't need both
\usepackage{xstring} %% Package for string manipulation
\DeclareRobustCommand*\myref[1]{\formatsectionnumber{\getrefnumber{#1}}}
\newcommand*\formatsectionnumber[1]{%
\begingroup
%% Prepend and append two 0's, perform the substitution and store the result in \temp:
\StrSubstitute[0]{00#100}{.}{}[\temp]%
%% Store the first four characters in \temp:
\StrLeft{\temp}{4}[\temp]%
%% Print the result
\temp
\endgroup
}
\begin{document}
\section{Section 1}\label{sec:section1}
\subsection{Section 1.1}\label{sec:section11}
Section~\myref{sec:section1} has a subsection which we will call \myref{sec:section11}.
\end{document}
答案2
的输出\ref
是一系列的命令印刷号码。您需要一个可扩展的版本,它由 提供refcount
。
借助expl3
它,你得到想要的东西并不难(但确切的规则却很神秘)。
\documentclass{article}
\usepackage{refcount}
\usepackage{xparse}
\ExplSyntaxOn
% define an expl3 version
\cs_new_eq:NN \christian_getrefnumber:n \getrefnumber
% allocate a tl variable
\tl_new:N \l__christian_bizarreref_tl
% the main command
\NewDocumentCommand{\bizarreref}{m}
{
% get the reference number and store it
\tl_set:Nx \l__christian_bizarreref_tl { \christian_getrefnumber:n { #1 } }
% remove all periods
\tl_replace_all:Nnn \l__christian_bizarreref_tl { . } { }
% pad with zeros
\prg_replicate:nn { 4 - \tl_count:N \l__christian_bizarreref_tl } { 0 }
% the reference
\tl_use:N \l__christian_bizarreref_tl
}
\ExplSyntaxOff
\begin{document}
\section{Section 1}\label{sec:section1}
\subsection{Section 1.1}\label{sec:section11}
\bizarreref{sec:section11}
\end{document}