使用 cleveref 交叉引用 exsheets 问题

使用 cleveref 交叉引用 exsheets 问题

我非常喜欢exsheets,一个用于排版练习表和试卷(及其解决方案)的包。一个特别好的特性是可以为question环境分配标签。这是通过传递auto-label包选项来完成的,如果没有label=<label>将任何选项传递给question环境,则使用 的question唯一值ID来创建标签,如下所示:

\label{qu:<label>}

\label不幸的是,该标签功能目前没有利用cleveref包裹,我最喜欢的排版交叉引用包。更具体地说,将宏cleveref重新定义\label为除了强制参数外还采用一个可选参数:

\label[<type>]{<label>}

可选参数在调用期间<type>使用(也重新定义)来识别引用标签与哪种环境相关联,以便选择和排版正确的交叉引用格式。cleveref\refcleveref\ref

我想修补 的exsheets环境,以便它使用而不是 来question创建标签。这听起来相对容易。不幸的是,由于我(目前)对 还不熟悉,因此到目前为止,我的所有尝试都证明是徒劳的。有谁熟悉 可以帮我解决这个问题吗?\label[qu]{<label>}\label{qu:<label>}expl3exsheetsexpl3

下面是一些描述我想要实现的目标的代码。

在此处输入图片描述

\documentclass{article}

\usepackage[english]{babel}
\usepackage{lipsum}

\newcommand\myQname{Q.} % macro for question headings (for more automation)

\usepackage[auto-label]{exsheets}
    \SetupExSheets[question]{name=\myQname}

\usepackage{hyperref}
\usepackage{cleveref}
    \crefformat{qu}{#2\myQname~#1#3} % custom format for cross-ref. to a single question

\begin{document}

\begin{question}[name=Question, ID=foo]
    % Currently, 'ID=foo' (assuming 'auto-label') results in '\label{qu:foo}'.
    % However I would like it to result in 
    \label[qu]{foo} 
    % but that should be done by exheets "behind the scenes".
    %
    \lipsum[1]
\end{question}
%
Then, I could refer to that first question
using {\ttfamily\string\cref\{foo\}} (see below).

\begin{question}[name=Question]
    Do as in \cref{foo}, but use the following data instead:
    \lipsum[2]
\end{question}


\end{document}

答案1

@Jubobs 让我很忙 :)

版本 0.12 2013/12/02(今日抵达 TeX Live)实现了以下选项

  • label-formatauto-label-使用该选项时自动放置的标签的格式。#1用问题 ID 替换。默认:qu:#1
  • label-cmd- 用于创建标签的命令。此命令应有一个强制参数(当然实际上会创建一个标签...)。默认值:\label

现在你可以这样做:

\documentclass{article}
\usepackage[auto-label]{exsheets}[2013/12/02]
\usepackage{cleveref}

\SetupExSheets{
  label-format = {#1} ,
  label-cmd    = \label[qu]    
}
\crefname{qu}
  {\GetLCTranslation{exsheets-exercise-name}}
  {\GetLCTranslation{exsheets-exercise-name}s}
\Crefname{qu}
  {\GetTranslation{exsheets-exercise-name}}
  {\GetTranslation{exsheets-exercise-name}s}

\begin{document}

\begin{question}
  foo
\end{question}

\begin{question}[ID=bar]
  bar
\end{question}

Text \cref{1} text \cref{bar} text. \Cref{bar} \ldots

\Cref{1,bar}

\end{document}

在此处输入图片描述

相关内容