我非常喜欢exsheets
,一个用于排版练习表和试卷(及其解决方案)的包。一个特别好的特性是可以为question
环境分配标签。这是通过传递auto-label
包选项来完成的,如果没有label=<label>
将任何选项传递给question
环境,则使用 的question
唯一值ID
来创建标签,如下所示:
\label{qu:<label>}
\label
不幸的是,该标签功能目前没有利用cleveref
包裹,我最喜欢的排版交叉引用包。更具体地说,将宏cleveref
重新定义\label
为除了强制参数外还采用一个可选参数:
\label[<type>]{<label>}
可选参数在调用期间<type>
使用(也重新定义)来识别引用标签与哪种环境相关联,以便选择和排版正确的交叉引用格式。cleveref
\ref
cleveref
\ref
我想修补 的exsheets
环境,以便它使用而不是 来question
创建标签。这听起来相对容易。不幸的是,由于我(目前)对 还不熟悉,因此到目前为止,我的所有尝试都证明是徒劳的。有谁熟悉 可以帮我解决这个问题吗?\label[qu]{<label>}
\label{qu:<label>}
expl3
exsheets
expl3
下面是一些描述我想要实现的目标的代码。
\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-format
auto-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}