自定义列表式环境

自定义列表式环境

我想创建一个自定义的“公理”环境来模仿以下内容:

在此处输入图片描述

我有一些要求:我希望它能将字母作为一个选项,这样我就可以用任何字母替换上面屏幕截图中的“P”。我还希望环境的宽度能够填充剩余的水平空间。最后,我想自动添加带有计数器的第一行,我可以使用以下代码创建下一个屏幕截图: 在此处输入图片描述

\begin{definition}
    A \emph{poset} is a set in which a binary relation $x \le y $ is defined, which
satisfies for all $x, y, z $ the following conditions:\\

\begin{tabular}{  m{1em}  m{.5\textwidth} m{1cm}  } 
  P1. & For all $x$, $x \le x$. & (Reflexivity) \\ 
  P2. & If $x \le y$ and $y \le x$, then $x = y$ & (Antisymmetry) \\ 
  P3. & If $x \le y$ and $y \le z$, then $x \le z$ & (Transitivity)\\ 
\end{tabular}
\end{definition}

当然,这是手动完成的,没有计数器。文本对齐不正确,没有填满可用空间。我希望尽可能自动化。我必须承认,在 LaTeX 中使用表格方面,我非常陌生。任何帮助都将不胜感激。

答案1

您可以使用 获得所需的表格格式tabularx,使用X中间列的列规范来填充最大可用空间,并r使用右对齐列的列规范。

为标签定义一个空命令,为数字定义一个计数器。然后axiomata为公理列表创建一个环境 ( ),该环境接受标签的可选参数。将计数器清零,并将标签设置为可选参数(如果存在)。然后设置您的tabularx

在该环境中,该axiom命令需要两个参数,并根据这些参数创建一个由三个单元格组成的表格行:首先是标签和数字(增加计数器),然后是第一个和第二个参数。

\documentclass{article}

\usepackage{amsthm}
\theoremstyle{definition}
\newtheorem{definition}{Definition}[section]

\usepackage{tabularx}
\usepackage{xparse}
\newcounter{axiomNum}
\NewDocumentCommand{\axiomMark}{}{}

\NewDocumentEnvironment{axiomata}{ o }
{%
    \par\vspace{1ex}%
    \IfValueTF{#1} {\RenewDocumentCommand{\axiomMark}{}{#1}} {}%
    \setcounter{axiomNum}{0}%
    \noindent\tabularx{\textwidth}{l X r}
}
{%
    \endtabularx
}

\NewDocumentCommand{\axiom}{ m m }{%
    \stepcounter{axiomNum}
    \axiomMark\theaxiomNum. & #1 & #2\tabularnewline
}

\begin{document}
\begin{definition}
    A \emph{poset} is a set in which a binary relation $x \le y $ is
    defined, which
    satisfies for all $x, y, z $ the following conditions:

    \begin{axiomata}[P]
        \axiom{For all $x$, $x \le x$.} {(Reflexivity)}
        \axiom{If $x \le y$ and $y \le x$, then $x = y$.} {(Antisymmetry)}
        \axiom{If $x \le y$ and $y \le z$, then $x \le z$.} {(Transitivity)}
    \end{axiomata}

\end{definition}
\end{document}

在此处输入图片描述

答案2

您可以使用tabularx使用 将\hfill内容推到右侧。但是,这不允许列表跨越页面边界。您还可以propertylist使用以下方式定义自己的列表式环境(例如enumitem

在此处输入图片描述

\documentclass{article}

\usepackage{enumitem,tabularx}

\newlist{propertylist}{enumerate}{1}
\setlist[propertylist]{%
  label={\propertylistprefix\arabic*.},
  ref={\propertylistprefix\arabic*},
  nosep,
  labelindent=0pt,
  labelsep=0pt,
  align=left,
  leftmargin=!}
\newcommand{\propertylistprefix}{P}% Default prefix

\begin{document}

\noindent
\begin{tabularx}{\linewidth}{@{} l @{~} X @{}} 
  P1. & For all $x$, $x \leq x$.                      \hfill  (Reflexivity) \\ 
  P2. & If $x \leq y$ and $y \leq x$, then $x = y$    \hfill (Antisymmetry) \\ 
  P3. & If $x \leq y$ and $y \leq z$, then $x \leq z$ \hfill (Transitivity) 
\end{tabularx}

\bigskip

\begin{propertylist}
  \item For all $x$, $x \leq x$.                      \hfill  (Reflexivity)
  \item If $x \leq y$ and $y \leq x$, then $x = y$    \hfill (Antisymmetry)
  \item If $x \leq y$ and $y \leq z$, then $x \leq z$ \hfill (Transitivity) 
\end{propertylist}

\bigskip

\renewcommand{\propertylistprefix}{L}% Change prefix
\begin{propertylist}
  \item For all $x$, $x \leq x$.                      \hfill  (Reflexivity)
  \item If $x \leq y$ and $y \leq x$, then $x = y$    \hfill (Antisymmetry)
  \item If $x \leq y$ and $y \leq z$, then $x \leq z$ \hfill (Transitivity) 
\end{propertylist}

\end{document}

相关内容