我想创建一个自定义的“公理”环境来模仿以下内容:
我有一些要求:我希望它能将字母作为一个选项,这样我就可以用任何字母替换上面屏幕截图中的“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}