交叉引用:更多子级别和预设

交叉引用:更多子级别和预设

我正在输入很多语言示例,我希望标签格式具有灵活性,即设置预设就很棒。

  • 也就是说,我希望能够根据我提出的示例提供现成的设置,尤其是忠实地再现特定书籍中特定作者的示例的想法。例如:

    • (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 个级别,如 (a)、(b) 或 (a)-(c),Philex 有 \rfx 和 \rnx ;

    • 如果我们想跳过第一和第二级,如 (i)、(ii) 或 (i-iii) 中所述,并且如果涉及到一个点(如上所示),则refcount调用该包,以便使用 \gobbletodot 和 \getrefkeybykeydefault 宏

    • 范围可能涉及跳过级别:我们可以按照我在此处建议的方式定义新命令:

我并不是要求在这篇文章中解决 \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 时。

  • 我在这里就该问题提出了一个新问题:

如何使 \crefrangelabelformat 适应子示例格式?

在此处输入图片描述

相关内容