매개변수별(예: 날짜별) 환경 자동 정렬

매개변수별(예: 날짜별) 환경 자동 정렬

나는 날짜와 같은 추가 데이터를 기반으로 "섹션"이나 환경을 조작하기 위한 일종의 쉬운 시스템을 원합니다. 예비 구글 검색을 했는데 말로 표현할 수 없어서 아무것도 나오지 못했는데 최선을 다해 예시를 만들어 보겠습니다. LaTeX가 bibtex와만 비교할 수 있기 때문에 일반적으로 이것을 허용하는지 확실하지 않습니다.

나는 "날짜"나 정렬할 수 있는 다른 기준에 대한 논쟁이 있는 저널 스타일과 매우 유사한 "항목" 또는 "섹션"을 가질 수 있기를 원합니다. 일부 의사코드:

\begin{entry}{1928}{3}{28}
  This is an entry.
\end{entry}

\begin{entry}{1777}{4}{30}
  This is another entry, but dated before the last one.
\end{entry}

그러면 목표는 컴파일할 때 항목이 자동으로 날짜별로 정렬되는 것입니다. 즉, 두 번째 항목(코드에 표시된 대로)이 첫 번째 항목 앞에 나타납니다.

이 작업을 수행하는 데 도움이 되는 라이브러리나 다른 것이 있습니까? 코드 순서에도 불구하고 bibtex가 정렬하는 방식과 비슷합니다. 섹션화를 통해 작동하든 환경을 통해 작동하든 이에 가까운 모든 것도 높이 평가됩니다. 목표는 날짜와 같은 일종의 "태그"를 기준으로 정렬하는 것입니다. 어떤 조언이라도 감사드립니다. 감사합니다!

답변1

유사한 섹션을 재정렬하려면 19280328.tex, 17770430.tex등의 하위 문서를 만든 다음 다음을 사용하여 기본 문서에 삽입합니다.

\input{19280328}
\input{17770430}
...

그러면 좋은 편집자라면 누구나 이 내용을 올바른 순서로 빠르게 단축할 수 있습니다.

설명과 같은 환경으로 표시할 작은 항목의 경우 패키지 중 하나가 될 수 있습니다 nomencl.

MWE

\documentclass{article}
\usepackage{nomencl} 
\makenomenclature
\def\nomname{Cronology}
\begin{document}
\nomenclature{1928/03/28}{This is an entry.}
\nomenclature{1777/04/30}{This is another entry, but dated before the last one.}
\settowidth{\nomlabelwidth}{0000/00/00xx}
\printnomenclature
\end{document}

이 파일을 저장한 후 test.tex,컴파일하려면 다음을 실행해야 합니다.

pdflatex test.tex
makeindex test.nlo -s nomencl.ist -o test.nls
pdflatex test.tex
pdflatex test.tex # really not needed for this simple example

답변2

당신이 사용할 수있는datatool일지 항목을 저장, 정렬 및 인쇄합니다.

date날짜에 대해 합리적인 YYYY-MM-DD 표현을 사용하고 있으므로 이를 데이터베이스 내부 라는 단일 필드로 결합했습니다 journal. 정렬은 를 사용하여 수행 \DTLsort{date}{journal}된 후 을 사용하여 데이터베이스를 순환하면서 인쇄가 수행됩니다 \DTLforeach.

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

\documentclass{article}

\usepackage{datatool,environ}

\dtlexpandnewvalue
\NewEnviron{entry}[1]{%
  \DTLnewrow{journal}% Add new row to database
  \DTLnewdbentry{journal}{date}{#1}% Add date entry
  \DTLnewdbentry{journal}{entry}{\BODY}% Add entry body
}

\DTLnewdb{journal}

\newcommand{\printentries}{%
  \section*{Journal}
  \DTLsort{date}{journal}%
  \DTLforeach{journal}{%
    \entrydate=date,
    \entrybody=entry%
  }{%
    \subsection*{\entrydate}
    \entrybody
  }
}

\begin{document}

\begin{entry}{2018-01-02}
This is an entry.
\end{entry}

\begin{entry}{2017-01-05}
This is another entry.
\end{entry}

\printentries

\end{document}

\DTLpar항목에 단락이 포함되는 경우 빈 줄/줄바꿈 대신 사용해야 합니다 . 예로서,

\begin{entry}{1234-56-78}
First paragraph.
\DTLpar
Second paragraph.
\end{entry}

관련 정보