\ref 输出的 latex 文本操作

\ref 输出的 latex 文本操作

由于某种原因,我需要操纵\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}

在此处输入图片描述

相关内容