
인라인 if-else 문을 어떻게 수행합니까?
\draw[draw = #1, fill = \if black#1 white \else black \fi, line width = 0.1mm]
(#2, #3) circle [radius = 0.25cm];
기반으로 해보려고 했는데이 답변, 예를 들어 성공하지 못했습니다.
\begingroup
\def\color{#1}
\def\black{black}
\draw[draw = #1, fill = \ifx\color\black white \else black \fi, line width = 0.1mm]
(#2, #3) circle [radius = 0.25cm]; % chktex 1
\endgroup
다른 많은 방법을 시도했지만 아무 것도 작동하지 않는 것 같습니다.
다음은 최소한의 완전한 예입니다.
\documentclass{article}
\usepackage{tikz}
% Parameters
%
% 1: dimension (in cm)
% 2: board size (square)
%
% Example: A 19x19 board with size 10cm x 10cm: `\gogrid{10}{19}'
\newcommand{\goGrid}[2]{
\pgfmathsetmacro{\step}{#1 / (#2 - 1)} % chktex 1
\draw[step=\step] (0, 0) grid (#1, #1);
}
\newcommand{\drawStone}[3]{
\draw[draw = #1, fill = \if black#1 white \else black \fi, line width = 0.1mm]
(#2, #3) circle [radius = 0.25cm];
}
\begin{document}
\begin{tikzpicture}
\goGrid{10}{19}
\drawStone{white}{2 * 10cm / 18}{3 * 10cm / 18}
\end{tikzpicture}
\end{document}
(TeX에는 if 문을 수행하는 방법이 수십 가지가 있는데 왜 모두 매우 까다로워 보이는가? TT)
답변1
L3 레이어에서 조건을 빌릴 수 있습니다.
\documentclass{article}
\usepackage{tikz}
% Parameters
%
% 1: dimension (in cm)
% 2: board size (square)
%
% Example: A 19x19 board with size 10cm x 10cm: `\gogrid{10}{19}'
\newcommand{\goGrid}[2]{
\pgfmathsetmacro{\step}{#1 / (#2 - 1)} % chktex 1
\draw[step=\step] (0, 0) grid (#1, #1);
}
\ExplSyntaxOn
\cs_new_eq:NN \myIfStrEqTF \str_if_eq:nnTF
\ExplSyntaxOff
\newcommand{\drawStone}[3]{
\draw[draw = #1, fill = \myIfStrEqTF{black}{#1}{white}{black}, line width = 0.1mm]
(#2, #3) circle [radius = 0.25cm];
}
\begin{document}
\begin{tikzpicture}
\goGrid{10}{19}
\drawStone{white}{2 * 10cm / 18}{3 * 10cm / 18}
\end{tikzpicture}
\end{document}
답변2
훨씬 더 간단 -black
합니다 . white
그리고 그 반대입니다.
\documentclass{article}
\usepackage{tikz}
% Parameters
%
% 1: dimension (in cm)
% 2: board size (square)
%
% Example: A 19x19 board with size 10cm x 10cm: `\gogrid{10}{19}'
\newcommand{\goGrid}[2]{%
\pgfmathsetmacro{\step}{#1 / (#2 - 1)} % chktex 1
\draw[step=\step] (0, 0) grid (#1, #1);%
}
\newcommand{\drawStone}[3]{% -#1 is the complementary color
\draw[draw = #1, fill = -#1, line width = 0.1mm]
(#2*\step, #3*\step) circle [radius = 0.25cm];
}
\begin{document}
\begin{tikzpicture}
\goGrid{10}{19}
\drawStone{white}{2}{3}
\drawStone{black}{4}{5}
\end{tikzpicture}
\end{document}
나는 또한 단순화했습니다 \drawStone
.
답변3
여기서는 테스트가 필요하지 않습니다. 보색을 선택하기만 하면 됩니다.
\documentclass{article}
\usepackage{tikz}
\newcommand\notwhite{black}
\newcommand\notblack{white}
% Parameters
%
% 1: dimension (in cm)
% 2: board size (square)
%
% Example: A 19x19 board with size 10cm x 10cm: `\gogrid{10}{19}'
\newcommand{\goGrid}[2]{%
\pgfmathsetmacro{\step}{#1 / (#2 - 1)} % chktex 1
%
\draw[step=\step] (0, 0) grid (#1, #1);%
}
\newcommand{\drawStone}[3]{%
\draw[draw = #1, fill = \UseName{not#1}, line width = 0.1mm]
(#2, #3) circle [radius = 0.25cm];
}
\begin{document}
\begin{tikzpicture}
\goGrid{10}{19}
\drawStone{white}{2 * 10cm / 18}{3 * 10cm / 18}
\end{tikzpicture}
\end{document}
답변4
새로운 것이 많이 사용되지 않는 경우 트릭을 수행하는 더 번거로운 방법은 다음과 같습니다.
\documentclass{article}
\usepackage{tikz}
% Parameters
%
% 1: dimension (in cm)
% 2: board size (square)
%
% Example: A 19x19 board with size 10cm x 10cm: `\gogrid{10}{19}'
\newcommand{\goGrid}[2]{
\pgfmathsetmacro{\step}{#1 / (#2 - 1)} % chktex 1
\draw[step=\step] (0, 0) grid (#1, #1);
}
% Paraphernalia ;-)
\newcommand\Exchange[2]{#2#1}%
\newcommand\FirstOfTwo[2]{#1}%
\newcommand\SecondOfTwo[2]{#2}%
\newcommand{\drawStone}[3]{%
\begingroup
\edef\tempa{\unexpanded{#1}}%
\def\tempb{black}%
\expandafter\endgroup
\ifx\tempa\tempb\expandafter\FirstOfTwo\else\expandafter\SecondOfTwo\fi
{\Exchange{white}}%
{\Exchange{black}}%
{\draw[draw = #1, fill = }, line width = 0.1mm]
(#2, #3) circle [radius = 0.25cm];
}
\begin{document}
\begin{tikzpicture}
\goGrid{10}{19}
\drawStone{white}{2 * 10cm / 18}{3 * 10cm / 18}
\end{tikzpicture}
\end{document}
(TeX에는 if 문을 수행하는 방법이 수십 가지가 있는데 왜 모두 매우 까다로워 보이는가? TT)
조판 언어 TeX의 프로그래밍 패러다임이 사람들에게 익숙한 대부분의 프로그래밍 언어의 프로그래밍 패러다임과 다르기 때문에 매우 까다로워 보입니다.
TeX/LaTeX를 배울 때 너무 초기 단계에서 다른 언어(예: C++, Java 또는 Scheme) 프로그래밍에 대한 지식을 TeX/LaTeX로 옮기려고 하지 마십시오.
처음에는 Donald E. Knuth의 TeXbook에 소개된 용어를 따르세요. TeX의 기본 개념이 다르기 때문에 해당 용어가 등장하고 이에 따라 설명/설명에는 다른 어휘가 필요합니다.
다른 언어로 프로그래밍에 대한 지식을 전달하려면 TeX이 어떻게 작동하는지 알고 이를 적절하게 전달하는 방법을 알아야 합니다.
예를 들어 "토큰"/"토큰화" 및 "확장"과 같은 개념에 익숙해져야 합니다. 그리고 TeX에서는 서로 다른 실행 수준이 서로 얽혀 있다는 사실을 숙지해야 합니다. TeXbook에서는 TeX 프로그램이 눈과 눈을 가진 짐승으로 보이는 비유를 통해 학습자의 주의를 환기시키는 사실입니다. 다양한 소화 단계(입, 식도, 위 등)가 있는 소화관.