용어집 기호를 사용하여 방정식 변수 설명 자동화

용어집 기호를 사용하여 방정식 변수 설명 자동화

-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}

여기에 이미지 설명을 입력하세요

관련 정보