
-package 의 도움으로 방정식의 설명 테이블을 자동화하려고 합니다 glossaries
. 난 이미 찾았어이것질문이지만 한편으로는 그것은 나에게 효과가 없었고 다른 한편으로는 (현재 코드와 비교할 때) 상당히 복잡해 보입니다.
이것이 내가 지금까지 가지고 있는 것입니다:
\documentclass[parskip=half]{scrartcl}
\usepackage[T1]{fontenc}
\usepackage[nomain, symbols]{glossaries}
\usepackage{blindtext}
\usepackage{etoolbox}
\usepackage{multicol}
% \usepackage{showframe}
\newglossaryentry{alpha}{name={Alpha}, symbol={\ensuremath{\alpha}}, description={first symbol}}
\newglossaryentry{beta}{name={Beta}, symbol={\ensuremath{\beta}}, description={second symbol}}
\newglossaryentry{gamma}{name={Gamma}, symbol={\ensuremath{\gamma}}, description={third symbol}}
\makeglossaries
\newcommand{\addVarDesc}[1]{
\renewcommand*\do[1]{\glsadd{##1}\makebox[0.5cm][r]{\glssymbol{##1}} ${}={}$ \glsname{##1}\\}
\noindent with:\quad%
\begin{minipage}[t]{.9\linewidth}
\begin{multicols}{2}
\docsvlist{#1}
\end{multicols}
\end{minipage}\par\medskip
}
\newcommand{\addVarDescTab}[1]{
\renewcommand*\do[1]{\glsadd{##1}\glssymbol{##1} & \glsname{##1}\\}
\noindent with:\quad%
\begin{tabular}[t]{l@{${}={}$}l}
\docsvlist{#1}
\end{tabular}\par\medskip
}
\begin{document}
\printglossaries
\section{With multicols}
\blindtext[1]
\begin{equation}
\alpha = \beta + \gamma
\end{equation}
\addVarDesc{alpha, beta, gamma}
\blindtext[2]
\section{With tabular}
\blindtext[1]
\begin{equation}
\alpha = \beta + \gamma
\end{equation}
\addVarDescTab{alpha, beta, gamma}
\blindtext[2]
\end{document}
그 결과는 다음과 같습니다.
보시다시피, 다중 변수는 완전히 잘못 배치되었습니다. 게다가 항목을 동일하게 정렬하는 것이 더 어렵습니다. 하지만 이 버전에서는 열 수의 유연성이 마음에 듭니다.
반면 항목 정렬에서는 표 형식 버전이 더 깔끔해 보입니다. 그러나 나는 수평으로 더 많은 공간을 낭비합니다.
외모를 개선하는 방법에 대한 아이디어가 있습니까? 제가 염두에 둔 것 중 하나는 테이블을 두 테이블로 나란히 나누는 것이었습니다. 하지만 명령으로 이것을 구현하는 방법을 모르겠습니다 \docsvlist
.
어떤 아이디어라도 높이 평가됩니다!
답변1
방정식과 설명 사이에 과도한 공간이 생기지 않도록 디스플레이 내부에 설명을 유지하겠습니다.
또한 왼쪽에서 오른쪽(영어)으로 읽습니다. 취득하는 것이 가능할 것
alpha gamma
beta
하지만 난 그럴 생각이 없어.
나는 expl3
매우 편리한 많은 기능을 가지고 그것을 해결합니다. 먼저 항목의 인덱스와 함께 매핑될 수 있는 시퀀스로 목록을 저장하므로 문제 \\
(행 끝에서)인지 또는 &
다음 항목의 본문을 저장하는 변수에 항목을 추가할 때 결정할 수 있습니다 tabular
.
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[nomain, symbols]{glossaries}
\usepackage{xparse}
\usepackage{lipsum}
\newglossaryentry{alpha}{
name={Alpha},
symbol={\ensuremath{\alpha}},
description={first symbol}
}
\newglossaryentry{beta}{
name={Beta},
symbol={\ensuremath{\beta}},
description={second symbol}
}
\newglossaryentry{gamma}{
name={Gamma},
symbol={\ensuremath{\gamma}},
description={third symbol}
}
\makeglossaries
\ExplSyntaxOn
\NewDocumentCommand{\addVarDesc}{O{2}m}
{% #1 = number of columns (default 2), #2 = list of keys
\wulle_vardesc:nn { #1 } { #2 }
}
\seq_new:N \l__wulle_vardesc_vars_seq
\tl_new:N \l__wulle_vardesc_body_tl
\cs_new_protected:Nn \wulle_vardesc:nn
{
\\\notag
\begin{minipage}{\displaywidth}
\seq_set_from_clist:Nn \l__wulle_vardesc_vars_seq { #2 }
\tl_clear:N \l__wulle_vardesc_body_tl
\seq_indexed_map_inline:Nn \l__wulle_vardesc_vars_seq
{
\tl_put_right:Nn \l__wulle_vardesc_body_tl
{
\glsadd{##2}\makebox[0.5cm][r]{\glssymbol{##2}} ${}={}$ \glsname{##2}
}
\int_compare:nTF { \int_mod:nn { ##1 } { #1 } = 0 }
{
\tl_put_right:Nn \l__wulle_vardesc_body_tl { \\ }
}
{
\tl_put_right:Nn \l__wulle_vardesc_body_tl { & }
}
}
with:~\begin{tabular}[t]{@{}*{#1}{l}@{}} \l__wulle_vardesc_body_tl \end{tabular}
\end{minipage}
}
\ExplSyntaxOff
\begin{document}
\printglossaries
\lipsum[1][1-3]
\begin{gather}
\alpha = \beta + \gamma
\addVarDesc{alpha, beta, gamma}
\end{gather}
\lipsum[2][1-3]
\begin{gather}
\alpha = \beta + \gamma
\addVarDesc[3]{alpha, beta, gamma}
\end{gather}
\lipsum[3][1-3]
\begin{gather}
\alpha = \beta + \gamma
\addVarDesc[1]{alpha, beta, gamma}
\end{gather}
\lipsum[4][1-3]
\end{document}