現在、enumitem を使用して、ドキュメント内のリスト用の環境を作成しました。次のとおりです。
\newenvironment{alternativas}[1][0]
{
\begin{enumerate}[label={\Alph*)}, itemsep=#1cm, topsep = 0.5cm, wide=0pt,labelwidth=.5cm,leftmargin=!]
}
{
\end{enumerate}
}
(質問に関してはそれほど重要ではないと思いますが)
そして、すべてのアイテム間のスペースを均等にするためにアイテムスペースを自動調整する方法を探していました。これが私がしない起こってほしいこと:
分数がより多くの高さを使用するため、ABC 間の間隔が CDE 間の間隔と異なり、奇妙に見えます。現在の修正方法は、環境内のオプション パラメータを使用して itemsep パラメータを手動で調整し、次のようになるようにすることです。
ただし、手動で調整するのは時間がかかり、この環境を使用するには経験の浅い人が必要です。itemsep をアイテム間の最大の間隔に自動的に設定する方法はありますか? たくさん検索しましたが、見つかりませんでした (私の英語が下手なせいかもしれません)。ありがとうございます!
答え1
私が提案する解決策は、各アイテムの高さと深さを測定して、最大の高さと深さを取得することです。必要に応じて、ベースライン スキップは最大の高さに最大深さを加えた値に設定されます。
\documentclass{article}
\usepackage{xparse,enumitem,amsmath}
\ExplSyntaxOn
\NewDocumentCommand{\alternatives}{m}
{
\blaz_alternativas:n { #1 }
}
\seq_new:N \l__blaz_alternativas_seq
\box_new:N \l__blaz_alternativas_item_box
\dim_new:N \l__blaz_alternativas_height_dim
\dim_new:N \l__blaz_alternativas_depth_dim
\cs_new_protected:Nn \blaz_alternativas:n
{
% first populate the sequence of items
\seq_set_split:Nnn \l__blaz_alternativas_seq { \\ } { #1 }
% now measure the heights and depths
\dim_zero:N \l__blaz_alternativas_height_dim
\dim_zero:N \l__blaz_alternativas_depth_dim
\seq_indexed_map_inline:Nn \l__blaz_alternativas_seq
{
% set the box to the current item
\hbox_set:Nn \l__blaz_alternativas_item_box { ##2 }
% measure the height if not the first item
\int_compare:nT { ##1 > 1 }
{
\dim_set:Nn \l__blaz_alternativas_height_dim
{
\dim_max:nn { \l__blaz_alternativas_height_dim }
{ \box_ht:N \l__blaz_alternativas_item_box }
}
}
% measure the depth if not the last item
\int_compare:nT { ##1 < \seq_count:N \l__blaz_alternativas_seq }
{
\dim_set:Nn \l__blaz_alternativas_depth_dim
{
\dim_max:nn { \l__blaz_alternativas_depth_dim }
{ \box_dp:N \l__blaz_alternativas_item_box }
}
}
}
\begin{enumerate}[label={\Alph*)},wide=0pt,labelwidth=.5cm,leftmargin=!,itemsep=0pt]
% set the baselineskip
\skip_set:Nn \baselineskip
{
\dim_max:nn { \baselineskip }
{ \l__blaz_alternativas_height_dim + \l__blaz_alternativas_depth_dim }
+ 2pt
}
% deliver the items
\seq_map_inline:Nn \l__blaz_alternativas_seq { \item ##1 }
\end{enumerate}
}
\ExplSyntaxOff
\begin{document}
\alternatives{ $1$ \\ $2$ \\ $3$ \\ $4$ \\ $5$ }
\alternatives{
$1$ \\
$\dfrac{3}{2}$ \\
$\dfrac{3}{4}$ \\
$4$ \\
$5$
}
\end{document}
\hphantom{$-$}
以下は、 で始まらない各項目の前に$-
、少なくとも 1 つが で始まっている場合に追加するバージョンです。
\documentclass{article}
\usepackage{xparse,enumitem,amsmath}
\ExplSyntaxOn
\NewDocumentCommand{\alternatives}{m}
{
\blaz_alternativas:n { #1 }
}
\seq_new:N \l__blaz_alternativas_seq
\box_new:N \l__blaz_alternativas_item_box
\dim_new:N \l__blaz_alternativas_height_dim
\dim_new:N \l__blaz_alternativas_depth_dim
\cs_new_protected:Nn \blaz_alternativas:n
{
% first populate the sequence of items
\seq_set_split:Nnn \l__blaz_alternativas_seq { \\ } { #1 }
% now measure the heights and depths
\dim_zero:N \l__blaz_alternativas_height_dim
\dim_zero:N \l__blaz_alternativas_depth_dim
\seq_indexed_map_inline:Nn \l__blaz_alternativas_seq
{
% set the box to the current item
\hbox_set:Nn \l__blaz_alternativas_item_box { ##2 }
% measure the height if not the first item
\int_compare:nT { ##1 > 1 }
{
\dim_set:Nn \l__blaz_alternativas_height_dim
{
\dim_max:nn { \l__blaz_alternativas_height_dim }
{ \box_ht:N \l__blaz_alternativas_item_box }
}
}
% measure the depth if not the last item
\int_compare:nT { ##1 < \seq_count:N \l__blaz_alternativas_seq }
{
\dim_set:Nn \l__blaz_alternativas_depth_dim
{
\dim_max:nn { \l__blaz_alternativas_depth_dim }
{ \box_dp:N \l__blaz_alternativas_item_box }
}
}
}
\begin{enumerate}[label={\Alph*)},wide=0pt,labelwidth=.5cm,leftmargin=!,itemsep=0pt]
% set the baselineskip
\skip_set:Nn \baselineskip
{
\dim_max:nn { \baselineskip }
{ \l__blaz_alternativas_height_dim + \l__blaz_alternativas_depth_dim }
+ 2pt
}
% check whether some items start with $-
\cs_set_protected:Nn \__blaz_alternativas_minus:n {##1} % do nothing by default
\seq_map_inline:Nn \l__blaz_alternativas_seq
{
\regex_match:nnT { \A \$\- } { ##1 }
{
\seq_map_break:n
{
\cs_set_eq:NN \__blaz_alternativas_minus:n \__blaz_alternativas_addminus:n
}
}
}
% deliver the items
\seq_map_inline:Nn \l__blaz_alternativas_seq { \item \__blaz_alternativas_minus:n {##1} }
\end{enumerate}
}
\cs_new_protected:Nn \__blaz_alternativas_addminus:n
{
\regex_match:nnF { \A \$\- } { #1 } { \hphantom{$-$} } #1
}
\ExplSyntaxOff
\begin{document}
\alternatives{ $1$ \\ $2$ \\ $3$ \\ $4$ \\ $5$ }
\alternatives{
$-1$ \\
$-\dfrac{3}{2}$ \\
$\dfrac{3}{4}$ \\
$4$ \\
$5$
}
\end{document}
答え2
ここでは、表形式に基づいたまったく異なるアプローチを紹介します。自動テーブル行番号付けcellspace
エントリの周りのスペースのパッケージ と組み合わせて使用します。列を右揃えにしているので、これも解決するようですフォローアップの質問:
\documentclass{article}
\usepackage[column=0]{cellspace}
\setlength\cellspacetoplimit{6pt}
\setlength\cellspacebottomlimit{\cellspacetoplimit}
\usepackage{array,etoolbox}
\preto\tabular{\setcounter{magicrownumbers}{0}}
\newcounter{magicrownumbers}
\newcommand\rownumber{\stepcounter{magicrownumbers}\Alph{magicrownumbers}}
\usepackage{amsmath}
\newenvironment{myalternatives}[1][0]
{\begin{tabular}{@{\makebox[3em][r]{\rownumber)~}} >{$}0r<{$}}}
{\end{tabular}}
\begin{document}
\begin{myalternatives}
1 \\
\dfrac{3}{2} \\
\dfrac{3}{4} \\
4 \\
5 \\
-6\\
\end{myalternatives}
\end{document}