今天我正在寻找一种方法来使用 LATEX 排版二分法键(德语:Bestimmungsschluessel,biol.)
\begin{enumerate}
\item ...
\end{enumerate}
环境。
这种键用于植物或动物,使用方式如下:
选择两个选项之一
>1 description one .... go to #2
>1* description alternative one ... go to #4
>2 description two ... go to
>2* description alt. two
>...
>...
它看起来应该像这样(德语的真实例子):http://www.sn.schule.de/~biologie/lernen/bestimmung/schlussel.html
因此,我需要一个列表,用于在枚举环境中自动对每个第二项使用相同的数字和星号符号进行编号。
创建固定列表可能不行,因为添加更多项目的可能性很高。
此外,设置一个
\ref
在每行末尾获取下一个数字。有没有办法不标记每个项目并手动使用 ref?只是在考虑对超过 1000 种植物或 600 和 600* 个项目的可能描述。
梅威瑟:
\documentclass[10pt, a4paper]{book}
\usepackage[utf8]{inputenc}
\usepackage[english, ngerman]{babel}
\usepackage{lipsum}
\usepackage{hyperref}
\hypersetup{hidelinks}
\usepackage{enumerate}
\usepackage{enumitem}
\begin{document}
\thispagestyle{empty}
% \maketitle
% \clearpage
\begin{enumerate}
\item\label{item1} \lipsum[1] \dotfill \ref{item2} % this would be #1 description one ... hinting to #2
\item \lipsum[2] \dotfill \ref{item3} % this would be #1* description alternative one ... hinting to #3
\item\label{item2} \lipsum[3] \dotfill \ref{item4} % this would be #2 description two ... hinting to #4
\item \lipsum[4] \dotfill % \ref{item5} % this would be #2 description two ... hinting to #5
\item\label{item3} \lipsum[5] \dotfill % \ref{item10}
\item \lipsum[6] \dotfill
\item\label{item4} \lipsum[7] \dotfill
\item \lipsum[8] \dotfill
\end{enumerate}
\end{document}
我尝试过但对我没有用的东西(但请随意再试一次!):
\setlist[]{}
\newcounter{}
我将非常感激任何帮助,提前致谢!!
答案1
你的意思是这样的吗:
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{enumitem, etoolbox}
\setlist[1]{labelindent=\parindent}
\newlist{Bestimmungsschluessel}{enumerate}{1}
\setlist[Bestimmungsschluessel]{leftmargin=*, label=\arabic*, labelsep=10pt, format=\bfseries}
\newcounter{schlussel}
\setcounter{schlussel}{0}
\newcommand\iitem{%
\refstepcounter{schlussel}%
\ifnumodd{\value{schlussel}}{\iitemnostar}{\iitemstar}%
}
\makeatletter
\newcommand\iitemstar{%
\item[\@itemlabel\rlap{*}]}
\newcommand\iitemnostar{\item}
\makeatother
\begin{document}
\begin{Bestimmungsschluessel}
\iitem One \label{one}
\iitem One*
\iitem Two \label{two}
\iitem Two*
\iitem Three. See \ref{two}.
\iitem Three*. See \ref{one}.
\end{Bestimmungsschluessel}
\end{document}
如果您想要拥有多个可选参数和条件行为之类的东西,最好使用分隔参数,所以这\iitem final description of plant or animal
不是一个好方法。
但是使用xparse
,您可以轻松构建一个分隔参数:
\usepackage{xparse}
\NewDocumentCommand{\iitem}{omd()o}{%
% usage: \iitem[<label>]{<mandatory text>}(<Latin name>)[<label>]
\refstepcounter{schlussel}%
\ifnumodd{\value{schlussel}}{\iitemnostar}{\iitemstar}%
\space
\IfValueT{#1}{\label{#1}}%
#2%
\dotfill
\IfValueTF{#3}{\textsc{#3}\space}{\relax}%
\IfValueT{#4}{\bsrefstring \space \ref{#4}}%
}
基本上,其他一切保持不变,但您还需要修改使用方式\iitem
。
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{enumitem, etoolbox}
\usepackage{xparse}
\setlist[1]{labelindent=\parindent}
% Set up new list
\newlist{Bestimmungsschluessel}{enumerate}{1}
\setlist[Bestimmungsschluessel]{leftmargin=*, label=\arabic*, labelsep=10pt, format=\bfseries}
\newcounter{schlussel}
\setcounter{schlussel}{0}
\NewDocumentCommand{\iitem}{omd()o}{%
% usage: \iitem[<label>]{<mandatory text>}(<Latin name>)[<label>]
\refstepcounter{schlussel}%
\ifnumodd{\value{schlussel}}{\iitemnostar}{\iitemstar}%
\space
\IfValueT{#1}{\label{#1}}%
#2%
\dotfill
\IfValueTF{#3}{\textsc{#3}\space}{\relax}%
\IfValueT{#4}{\bsrefstring \space \ref{#4}}%
}
% An optional text string for the cross-references
\newcommand*{\bsrefstring}{Please see \S.\@}
\makeatletter
\newcommand{\iitemstar}{\item[\@itemlabel\rlap{*}]}
\newcommand\iitemnostar{\item}
\makeatother
\begin{document}
\begin{Bestimmungsschluessel}
% usage: \iitem[<label>]{<MANDATORY text>}(<Latin name>)[<ref>]
\iitem[labelone]{Text one}
\iitem{One*}(Plantus officinale (L.))
\iitem[labeltwo]{Text two, ref to labelone}[labelone]
\iitem{Two*, ref to labeltwo}[labeltwo]
\iitem[labelthree]{Text three, ref to labelone}[labelone]
\iitem{Text three*, ref to label three}(Other thing)[labelthree]
\end{Bestimmungsschluessel}
Please refer to labelone (\ref{labelone}), labeltwo (\ref{labeltwo}), and labeltree (\ref{labelthree}).
\end{document}
然而,一旦命令开始变得如此复杂,所谓的“键值”方法就会变得越来越有意义。