具有类似坐标参数的环境

具有类似坐标参数的环境

我想定义一个接受坐标类参数的环境(1,2)。我考虑两种不同的调用方案:

  1. \begin{myenv}(mandatory coordinate)[optional](optional coordinate)

  2. \begin{myenv}[optional](mandatory coordinate)(optional coordinate)

我需要关于如何实现它们的建议。我使用TikZso 来表示我想要使用的可选参数pgfkeys,但我不知道如何使用括号指定参数。

答案1

这相当容易xparse

\usepackage{xparse}
\NewDocumentEnvironment{myenv}{ o r() d() }
 {<begin code>}
 {<end code>}

您可以测试第一个可选参数是否用

\IfValueTF{#1}
 {<code with optional argument expressed>}
 {<code with optional argument not expressed>}%

或者,如果使用 ,则两个分支可以交换\IfNoValueTF{#1}。对于#3(用括号分隔的坐标对),情况也类似。

有了这一系列参数,您就拥有一个可选参数(用括号括起来)、一个强制坐标参数和一个可选坐标参数。这种方式可能更简单。

如果要在未表达可选参数的情况下提供默认值,请使用类似

\NewDocumentEnvironment{myenv}{ O{default} r() D(){0,0} }

其中大写字母表示使用默认值(在下面的括号列表中指定)。在这种情况下,您不需要使用\IfValueTF\IfNoValueTF

答案2

在此处输入图片描述

\documentclass{article}
\makeatletter

\protected\def\myenva{\@ifnextchar[\myenva@A{\myenva@A[]}}
\def\myenva@A[#1]#2{\@ifnextchar({\myenva@B[{#1}]{#2}}{\myenva@B[{#1}]{#2}(0,0)}}
\def\myenva@B[#1]#2(#3,#4){%
  \par myenva[#1]\{#2\}(#3,#4)\par}

\protected\def\myenvb#1{\@ifnextchar[{\myenvb@A{#1}}{\myenvb@A{#1}[]}}
\def\myenvb@A#1[#2]{\@ifnextchar({\myenvb@B{#1}[{#2}]}{\myenvb@B{#1}[{#2}](0,0)}}
\def\myenvb@B#1[#2](#3,#4){%
  \par myenvb\{#1\}[#2](#3,#4)\par}


\makeatother

\begin{document}

\begin{myenva}{one}
\end{myenva}

\begin{myenva}[opt]{one}
\end{myenva}


\begin{myenva}{one}(9,9)
\end{myenva}

\begin{myenva}[opt]{one}(9,9)
\end{myenva}

\begin{myenvb}{one}
\end{myenvb}

\begin{myenvb}{one}[opt]
\end{myenvb}


\begin{myenvb}{one}(9,9)
\end{myenvb}

\begin{myenvb}{one}[opt](9,9)
\end{myenvb}

\end{document}

请注意,在两种情况下,这都使用相同的基本函数,[]在可选情况和(0,0)坐标情况下提供默认值。但是,如果您希望函数执行与不[]提供完全不同的事情,则不必强制执行,只需替换{\myenva@A[]}\myenva@C定义该命令以执行您想要的任何操作,而不是省略与提供等效的参数[]

答案3

不确定这是否是你想要的

\documentclass{article}
\parindent 0in\parskip 1em
\usepackage{readarray}
\begin{document}
\newenvironment{myenv}[1]{%
\getargsC{#1}%
\def\coordone{\argi}%
\if2\narg\def\coordtwo{\argii}\else\def\coordtwo{Undefined}\fi%
First: \coordone\\
Second: \coordtwo}{}

\begin{myenv}{(1,2)}\end{myenv}

\begin{myenv}{(1,2) (5,7)}\end{myenv}
\end{document}

在此处输入图片描述

相关内容