\newcommand とブール文

\newcommand とブール文

\newcommand インスタンスの作成は上達していますが、知識が足りない部分に到達してしまい、このサイトやマニュアルを読んでも役に立ちません。

基本的に、縦長の長方形を 3 つの部分に分割する新しいコマンドを作成したいと思います。ここまでは順調ですが、各部分がブール値で埋められるかどうかを制御できます。コマンドは次のようになります (私が想像したものですが、実現可能かどうかはわかりません)。

\command{1, 0, 1};ここで、最初と 3 番目の部分は色 (黒など) で塗りつぶされ、2 番目の部分は白のままになります。あるいは、\command{1}{0}{1};同じ結果になる可能性もあります。この場合、3 つの引数が使用されますが、上記のように引数をコンマで区切る方法がわかりません。

結果は次のようになります。

ここに画像の説明を入力してください

これを動的にしたいことに注意してください。つまり、 とすると0,1,1、塗りつぶされる部分は 2 番目と 3 番目になります。どのレベルにも到達できなかったため、提供できるコードはありませんが、すべてのコードを書き直す必要がないように、開始例を示します (ここでは不要と思われる設定は無視してください。ドキュメントの他の部分で使用されます)。

\documentclass[10pt]{article}
\usepackage[a4paper, margin=3mm]{geometry}
\usepackage[utf8]{inputenc}
\usepackage{rotating}
\usepackage{amsmath}
\usepackage{pgfplots}
\usepackage{tikz}

\usetikzlibrary{fit, arrows,backgrounds,patterns,shapes,shapes.multipart,positioning,calc,decorations.markings}

\begin{document}

    \begin{tikzpicture}
            \centering


    \end{tikzpicture}

\end{document}

答え1

xparseここでは と を使用する方法を示しますl3prop。 を使用すると、l3propさらに多くの変更が可能になります。

おそらく tikz 部分は改善できるでしょう ;-)

\documentclass[10pt]{article}
\usepackage{tikz}
\usepackage{xparse,expl3}

\ExplSyntaxOn
\prop_new:N \l_alenanno_color_prop
\prop_put:Nnn \l_alenanno_color_prop {0} {white}
\prop_put:Nnn \l_alenanno_color_prop {1} {black}

\NewDocumentCommand {\command} { > { \SplitArgument { 2 } { , } } m }
 {
  \alenanno_command_aux:nnn #1 
 }

\cs_new:Npn \alenanno_command_aux:nnn #1 #2 #3
 {
  \begin{tikzpicture}
   \draw[fill=\prop_get:Nn \l_alenanno_color_prop { #1 }] (0,0) rectangle (1,1);
   \draw[fill=\prop_get:Nn \l_alenanno_color_prop { #2 }] (0,1) rectangle (1,2);
   \draw[fill=\prop_get:Nn \l_alenanno_color_prop { #3 }] (0,2) rectangle (1,3);
  \end{tikzpicture}
 }

\ExplSyntaxOff


\begin{document}
\command{1,0,1} \command{0,0,1} \command{0,1,1}
\end{document}

ここに画像の説明を入力してください


ここでは以下を使用したソリューションを示します\node

\documentclass[10pt]{article}
\usepackage{tikz}
\tikzset{mynodestyle/.style={minimum height=1cm,minimum width=1cm,outer sep=0pt,rectangle,draw=black}}
\usepackage{xparse,expl3}

\ExplSyntaxOn
\prop_new:N \l_alenanno_color_prop
\prop_put:Nnn \l_alenanno_color_prop {0} {white}
\prop_put:Nnn \l_alenanno_color_prop {1} {black}

\NewDocumentCommand {\command} { > { \SplitArgument { 2 } { , } } m }
 {
  \alenanno_command_aux:nnn #1 
 }

\cs_new:Npn \alenanno_command_aux:nnn #1 #2 #3
 {
  \begin{tikzpicture}
   \node[mynodestyle, fill=\prop_get:Nn \l_alenanno_color_prop { #2 }] (P) {};
   \node[mynodestyle, fill=\prop_get:Nn \l_alenanno_color_prop { #1 },anchor=south] at (P.north) {};
   \node[mynodestyle, fill=\prop_get:Nn \l_alenanno_color_prop { #3 },anchor=north] at (P.south) {};
  \end{tikzpicture}
 }
\ExplSyntaxOff


\begin{document}
\command{1,0,1} \command{0,0,1} \command{0,1,1} \command{0,0,0}
\end{document}

\ExplSyntaxOn...内部の\ExplSyntaxOffすべてのスペースは無視されることを知っておくことが重要です。これは次のように説明されています。ExplSyntaxOn と ExplSyntaxOff は何をしますか?したがって、次のようなTikZオプションは使用できません。minimum withこの動作を一時的に無効にするには、次のようにします。ExplSyntaxOn/Off内のテキストまたは屋外で設定してください。

egreg が述べたように、スペースを必要とする TikZ オプションを使用する場合は、記号 を使用できます~。つまり、次のようになります。

\draw[fill=\prop_get:Nn \l_alenanno_color_prop { #3 },rounded~corners] (0,2) rectangle (1,3);

答え2

これを Tikz で作成するには、MWE でさらにサポートが必要でしたが、テスト部分は次のようになります:-)

ここに画像の説明を入力してください

\documentclass[10pt]{article}


\def\command#1{\xcommand#1\relax}
\def\xcommand#1,#2,#3\relax{%
\begin{tabular}{|l|}
\relax\ifnum#1>0 \leaders\vline\fi\hskip 1em\mbox{}\\
\relax\ifnum#2>0 \leaders\vrule\fi\hskip 1em\mbox{}\\
\relax\ifnum#3>0 \leaders\vrule\fi\hskip 1em\mbox{}%
\end{tabular}}

\begin{document}

\command{1,0,1}

\bigskip

\command{0,1,0}


\end{document}

答え3

なぜ電子を無駄にしてカンマリストを使用するのでしょうか? は010同じ情報を伝えます。これが短い解決策です。カンマにこだわる場合は、@tforに変更します@for。解決策は拡張可能で、必要な数の 0 または 1 を使用します。

\documentclass{article}
\usepackage{xcolor}
\fboxsep0pt
\makeatletter
\def\roll#1{%
\def\boxblack{\rule{1cm}{1cm}}%
\def\boxwhite{{\color{white}\rule{1cm}{1cm}}}%
\fbox{\parbox{1cm}{%
\@tfor\next:=#1\do{%
   \ifnum\next=0\boxblack\else\boxwhite\fi%
\par
}}}}
\makeatother
\begin{document}
\roll{01010}
\end{document}

ここに画像の説明を入力してください

問題を一般化することが常に最善であることを示すために、解決策を投稿しました。また、よりシンプルな解決策が存在する場合は、重いライブラリを避けるのが最善だと私は考えています。

関連情報