我正在输入很多语言示例,我希望标签格式具有灵活性,即设置预设就很棒。
也就是说,我希望能够根据我提出的示例提供现成的设置,尤其是忠实地再现特定书籍中特定作者的示例的想法。例如:
(1)a.(i)(标准),
(1)A.a.
(1)1.A.
(1)1.A.a.
ETC。
我使用的
Philex
基本上是的包装器Linguex
。请参阅下面的示例,我希望能够重现它,
- 但它需要 4 个级别,即 (1) A. 1. a.;
- 并且必须处理对主要例子的引用(Philex 仅提供表面上的支持):
Philex
得益于其 \subformat 和 \subsubformat 命令,您可以自定义每组子示例,这样您就可以在模式之间自由导航。但是只有 3 个级别可用,此外,您必须手动自定义设置,而理想情况下,预设会很方便。
我们可以加入垂直间距参数,就像 Alan Munn 的宏一样(https://tex.stackexchange.com/a/636371/262813):
\topsep\csname lngxtopsep\roman{ExDepth}\endcsname \itemsep\csname lngxitemsep\roman{ExDepth}\endcsname
我还想保留引用范围的能力。但根据给定子级使用的格式类型和分隔符,在 \crefrangelabelformat 的值中使用不同的命令:
当不涉及剥离时,我想要传统的(1)-(3),或(a)-(c),或(i)-(iii)风格,参见我的问题:
对于 (1a-e) 样式,使用 \crefstripprefix
- 参见https://tex.stackexchange.com/a/634181/262813(感谢 gusbrs);
对于 (1a.i-iii) 样式,包中的 \StrCut
xstring
可以完成这项工作,但必须有一个分隔符(参见快照上的红色省略号)- 参见https://tex.stackexchange.com/a/635636/262813(感谢安德鲁·斯旺);
我想保留对子示例的本地引用,即跳过父子标签:
仅跳过 1 个级别,如 (a)、(b) 或 (a)-(c),Philex 有 \rfx 和 \rnx ;
如果我们想跳过第一和第二级,如 (i)、(ii) 或 (i-iii) 中所述,并且如果涉及到一个点(如上所示),则
refcount
调用该包,以便使用 \gobbletodot 和 \getrefkeybykeydefault 宏- 参见有什么方法可以引用标签的特定组件吗?(感谢 Ulrich Diez);
- 如果使用点以外的其他分隔符,则仍需确定如何操作;
范围可能涉及跳过级别:我们可以按照我在此处建议的方式定义新命令:
我并不是要求在这篇文章中解决 \crefrange 问题的每个方面,但是,如果我们至少可以为不同的预设定义不同的命令,那就太好了,例如:
- \standard for (1) a. (i)
- \classic 对于(1)A. a.
- \fancy 对于 (1) 1. A.
- \complex 对于(1)A. a. (i)
- \lakoff 对于(1)A. 1. a.
- \crazy for (1) A. 1. a. (i)
- ETC。
分数维:
\documentclass{report}
\usepackage{philex}
\usepackage{cleveref}
\usepackage{xstring}
% Ranges of subexamples
\crefname{ExNo}{}{}
\crefname{SubExNo}{}{}
\crefname{SubSubExNo}{}{}
\creflabelformat{ExNo}{#2#1#3} % The output of the \cref command doesn't include parentheses.
\creflabelformat{SubExNo}{#2#1#3}
\creflabelformat{SubSubExNo}{#2#1#3}
\crefrangelabelformat{ExNo}{#3#1#4--#5#2#6}
\crefrangelabelformat{SubExNo}{#3#1#4--#5\crefstripprefix{#1}{#2}#6}
\newcommand{\mystriptocolon}[2]{\StrCut{#1}{.}{\myonea}{\myoneb}%
\StrCut{#2}{.}{\mytwoa}{\mytwob}%
\IfStrEq{\myonea}{\mytwoa}{\mytwob}{#2}}
\crefrangelabelformat{SubSubExNo}{#3#1#4--#5\mystriptocolon{#1}{#2}#6}
\newcommand\prefrange[2]{(\crefrange{#1}{#2})}
\begin{document}
\phildashes{}{.} % Adds a dot between sublevels 2 and 3 in references. Nothing between sublevels 1 and 2.
\subformat{a}{}{.} % Level 2 is of the form “a.”
\subsubformat{i}{(}{)} % Level 3 is of the form “(i)”
\lb{main}{This is the main level.
\lba{sub}{This is the sublevel.
\lba{subsub-a}{This is the subsublevel.}
\lbz{subsub-b}{Third level too.}}}
\phildashes{-}{.} % Adds a hyphen between sublevels 1 and 2, a dot between 2 and 3.
\subformat{A}{}{.} % Level 2 is of the form “A.”
\subsubformat{a}{}{.} % Level 3 is of the form “a.”
\lb{main2}{This is the main level.
\lba{sub2}{This is the sublevel.
\lba{subsub-a2}{This is the subsublevel.}
\lbz{subsub-b2}{Third level too.}}}
\phildashes{:}{} % Adds a colon between levels 1 and 2, and nothing between 2 and 3.
\subformat{1}{}{.} % Level 2 is of the form “1.”
\subsubformat{A}{}{.} % Level 3 is of the form “A.”
\lb{main3}{This is the main level.
\lba{sub3}{This is the sublevel.
\lba{subsub-a3}{This is the subsublevel.}
\lbz{subsub-b3}{Third level too.}}}
\rf{subsub-a} \rn{subsub-a} \rfx{subsub-a} \rnx{subsub-a}
\rf{subsub-a2} \rn{subsub-a2} \rfx{subsub-a2} \rnx{subsub-a2}
\rf{subsub-a3} \rn{subsub-a3} \rfx{subsub-a3} \rnx{subsub-a3}
\crefrange{subsub-a}{subsub-b} \prefrange{subsub-a}{subsub-b}
\crefrange{subsub-a2}{subsub-b2} \prefrange{subsub-a2}{subsub-b2}
\crefrange{subsub-a3}{subsub-b3} \prefrange{subsub-a3}{subsub-b3} % Here we would need \crefstripprefix instead of mystriptocolon, since there is no delimiter and we don't have roman numbering.
\vspace{10pt}
\noindent I would like to be able to freely navigate between presets, ideally creating
\begin{itemize}
\item a \textbackslash SubSubSubExNo counter
\item and maybe a \textbackslash SubSubSubSubExNo counter
\item specifying for each sublevel in each preset :
\begin{enumerate}
\item the vertical spacing;
\item the label format : arabic, alph, roman, etc.;
\item the delimiters : nothing, colon, hyphen, etc.;
\item values for \textbackslash creflabelformat and \textbackslash crefrangelabelformat, including prefix stripping and parent sublabel skipping.
\end{enumerate}
\end{itemize}
\end{document}
我遇到的最大问题是我无法重新定义 \crefrangelabelformat{SubSubExNo},因为只有在序言中定义它才会被考虑。
我希望能够将其定义为
- {#3#1#4--#5\mystriptocolon{#1}{#2}#6}
在分隔符后使用罗马数字时,以及
- {#3#1#4--#5\crefstripprefix{#1}{#2}#6}
当使用没有分隔符的 Alph 或 Arabian 时。
- 我在这里就该问题提出了一个新问题: