
방금 pgfkeys
. 나는 \myset
(예를 들어)
\myset[big]{abc}
에 해당
\bigl\{abc\bigr\}
내 목표 중 하나는 나중에 다른 구분 기호를 사용하여 쉽게 변형을 만들 수 있는 방식으로 이 작업을 수행하는 것이었습니다. 특히 내 코드가 및 를 \pgfkeys
참조하는 것을 원하지 않았습니다 .\{
\}
근무처:이 TeX.SE 스레드그리고PGF 매뉴얼의 관련 섹션, 내가 생각해낸 내용은 다음과 같습니다.
\documentclass{article}
\usepackage{pgfkeys}
\pgfkeys{/delimitersizes/.is family, /delimitersizes,
default/.style = {auto},
auto/.style = {leftsize = auto, rightsize = auto},
big/.style = {leftsize = big, rightsize = big},
bigg/.style = {leftsize = bigg, rightsize = bigg},
Big/.style = {leftsize = Big, rightsize = Big},
Bigg/.style = {leftsize = Bigg, rightsize = Bigg},
leftsize/.style = {leftdictionary/#1/.get = \leftdelimitersize},
rightsize/.style = {rightdictionary/#1/.get = \rightdelimitersize},
leftdictionary/.cd,
big/.initial = \bigl,
bigg/.initial = \biggl,
Big/.initial = \Bigl,
Bigg/.initial = \Biggl,
auto/.initial = \left, }
\pgfkeys{/delimitersizes, rightdictionary/.cd,
big/.initial = \bigr,
bigg/.initial = \biggr,
Big/.initial = \Bigr,
Bigg/.initial = \Biggr,
auto/.initial = \right, }
\newcommand{\myset}[2][]{
\pgfkeys{delimitersizes, default, #1}
\leftdelimitersize\{#2\rightdelimitersize\} }
\begin{document}
$\myset[big]{abc}$
\end{document}
이는 예상대로 작동하지만 완성된 제품을 고려하면 상당한 양의 "코드 중복"이 있고 사용하기 전에 정보를 뒤섞는 것처럼 보입니다. 저는 이것이 다소 개방적인 질문이라는 것을 알고 있습니다. 하지만 사람들이 이 코드를 더 간결하고 능률적으로 만들기 위해 개선하는 방법을 제안할 수 있습니까?
답변1
이것은 더 간소화되었지만 이 경우 pgf를 사용해야 하는지는 확실하지 않습니다.
\documentclass{article}
\newcommand\myset[2][big]{\csname#1l\endcsname\{#2\csname#1r\endcsname\}}
\begin{document}
$\myset{abc}$ $\myset[Bigg]{xyz}$
\end{document}
답변2
내 생각엔 David가 그럴 권리가 있다고 생각하지만, 당신이 원한다면무엇와 같이 pgfkeys
, 여기 내가 좋아하는 스타일이 있습니다. 제대로 하는 데 너무 오랜 시간이 걸렸지만, 1년 전, 즉 연습을 중단하기 전에는 그렇지 못했을 것입니다. 이것은 또한 너무 단순한 일을 위해 이런 식으로 일을 하는 것에 대한 논쟁이기도 합니다.
\documentclass{standalone}
\usepackage{pgfkeys,pgffor}
\pgfkeys{/delimitersizes/.cd,
util/create/.style = {
util/name = #1,
util/dict =
{#1}
{\csname#1l\endcsname}
{\csname#1r\endcsname}
},
util/name/.style = {
#1/.style = {
leftsize = #1,
rightsize = #1
}
},
util/dict/.style n args = {3}{
leftdictionary/#1/.initial/.expand once = #2,
rightdictionary/#1/.initial/.expand once = #3
},
leftsize/.style = {
leftdictionary/#1/.get = \leftdelimitersize
},
rightsize/.style = {
rightdictionary/#1/.get = \rightdelimitersize
},
default/.style = auto,
util/create/.list = {big,bigg,Big,Bigg},
% Treat auto specially
util/name = auto,
util/dict = {auto}{\noexpand\left}{\noexpand\right}
}
\newcommand{\myset}[2][]{
\pgfkeys{/delimitersizes/.cd,default,#1}
\leftdelimitersize\{#2\rightdelimitersize\}
}
\begin{document}
$\myset[big]{abc}$
$\myset[Big]{abc}$
$\myset[bigg]{abc}$
$\myset[Bigg]{abc}$
\end{document}
기본적으로 키를 정의하는 작업을 수행하는 여러 유틸리티 키를 만듭니다.실제로사용하고 유틸리티 키를 반복해서 호출하십시오. 이것은 .list
코드 반복 감소 전략의 핵심인 항상 유용한 핸들러에 의해 촉진됩니다 . .loop를 통해 할당한 키를 호출하려는 경우 해당 할당은 전역적으로 수행되어야 하며 그렇지 않으면( \foreach
그룹에서 실행되므로) 할당이 손실됩니다.