자동 목록/테이블 렌더링

자동 목록/테이블 렌더링

데이터 목록을 자동으로 렌더링하는 솔루션을 찾고 있습니다. 현재 시나리오에서 내 입력 데이터는 일련 번호가 포함된 3개 열 목록에 표시되어야 하는 문자열 목록입니다.

+--------------+-------------+------------+
| 1  xyzxyz    | 2  sadsdasd | 3  sadasdf |
| 4  dfasdfas  | 3  23ea3ad  | 4  898sd   |
|                   .....                 |
+-----------------------------------------+

지금은 고정된 수의 항목(제 경우에는 30개)을 갖는 것으로 충분하므로 값이 있는 30개의 서로 다른 매크로를 정의한 다음 모든 것이 하드코딩된 템플릿에서 참조합니다.

물론 이는 매우 정적이므로 tex 입력이 다음과 같이 데이터를 정의하는 더 나은 솔루션을 찾고 있습니다.

\putItem{xyzxyz}
\putItem{sadsdasd}
\putItem{dfasdfas}
\putItem{23ea3ad}
\putItem{898sd}
...

누구든지 좋은 생각이 있나요?

고마워

답변1

\documentclass{article}

\newcommand\putItem[1]{\refstepcounter{enumi}\makebox[.3\textwidth][l]{\theenumi. #1}\hfill\ignorespaces}
\begin{document}

\begin{flushleft}
\putItem{xyzxyz}
\putItem{sadsdasd}
\putItem{dfasdfas}
\putItem{23ea3ad}
\putItem{898sd} 
\putItem{xyzxyz}
\putItem{sadsdasd}
\putItem{dfasdfas}
\putItem{23ea3ad}
\putItem{898sd}
\end{flushleft}

\end{document}

답변2

여기에는근소한간단한 쉼표로 구분된 목록을 지정할 수 있다는 점에서 David Carlisle의 솔루션보다 개선되었습니다.

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

노트:

  • 다른 열거 환경 내에서 사용이 허용되는 경우 사용자 정의 카운터를 사용하십시오.
  • 카운터는 의 각 호출에 대해 나머지입니다 \ListTable.

암호:

\documentclass{article}
\usepackage{pgffor}
\usepackage{xstring}

\newcounter{MyCounter}
\newcommand\putItem[1]{\refstepcounter{MyCounter}\makebox[.3\textwidth][l]{\theMyCounter. #1}\hfill\ignorespaces}
\begin{document}

\newcommand{\DefaultNumberOfColumns}{3}%
\newcommand{\ListTable}[2][\DefaultNumberOfColumns]{%
    % #1 = optional number of columns, defaults to \DefaultNumberOfColumns
    % #2 = common separated list
    \setcounter{MyCounter}{0}%
    \noindent
    \edef\ListMembersExpanded{#2}%
        \foreach \x in \ListMembersExpanded {%
            \IfStrEq{\x}{}{}{% Need to eliminate any empty enteries (allows for trailing comma)
                \putItem{\x}%
            }%
        }%
}%

\ListTable{%
    xyzxyz,
    sadsdasd,
    dfasdfas,
    23ea3ad,
    898sd,
    xyzxyz,
    sadsdasd,
    dfasdfas,
    23ea3ad,
    898sd,
}%

\end{document}

답변3

내 답변을 바탕으로datatool을 사용하여 여러 데이터베이스의 콘텐츠를 하나의 테이블에 넣는 방법은 무엇입니까?, 나는 이것을 생각해 냈습니다. 현재 이 MWE는 현재 다음을 포함하는 data.txt 파일에서 데이터를 읽습니다.

dfkdsfs
sdf
dsfdsfgsdfg
ds4543
rg
ere
r
ewrf
sfs
edfds
swdf
sdfdsfdsfdsf
rtg
435
rtgre
t546
tgr
ret
4trswe
dfdf
fdfsdf
435435rsggf
dsfds
gff
vcvx
gfgfd
asdfdsf
rt
34
32e3
~

\readdef{data.txt}{\tmpa}외부 파일을 다음으로 교체 하면 외부 파일을 생략할 수 있습니다.

\def\tmpa{dfkdsfs sdf dsfdsfgsdfg ds4543 rg ere r ewrf sfs edfds swdf
sdfdsfdsfdsf rtg 435 rtgre t546 tgr ret 4trswe dfdf fdfsdf 435435rsggf
dsfds gff vcvx gfgfd asdfdsf rt 34 32e3 ~
}

마지막 행의 는 ~필러입니다(이에 대해서는 나중에 다시 설명하겠습니다). 또한 데이터 항목에 공백이 없다고 가정하는데, 이는 OP 설명에서 추론한 것입니다. 매크로는 3개의 열이 있는 \readArrayij{\tmpa}{first}{3}으로 식별된 배열로 데이터를 읽습니다 first. 부분 행은 삭제되므로 부분 행이 손실되지 않도록 데이터 끝에 공백과 줄 바꿈을 추가한 이유는 다음과 같습니다.

이 구조는 Herbert의 \tabtoks접근 방식을 사용합니다(`\whiledo`를 사용하여 프로그래밍 방식으로 표 형식의 행을 만드는 방법은 무엇입니까?) 데이터를 표 형식에 한 번에 3개 요소씩 추가합니다. 이 경우 인덱스 식별자를 프런트 엔드에 추가합니다.

\documentclass{article}
\usepackage{readarray}
\newcounter{index}
\newcounter{mycell}
  % Based on:
  % https://tex.stackexchange.com/questions/7590/
  % how-to-programmatically-make-tabular-rows-using-whiledo
  \makeatletter
  \newcounter{tabindex}
  \newtoks\@tabtoks
  \newcommand\addtabtoks[1]{%
    \@tabtoks\expandafter{\the\@tabtoks\stepcounter{tabindex}#1}}
  \newcommand*\resettabtoks{\@tabtoks{}}
  \newcommand*\synctabindex[1]{\setcounter{tabindex}{\value{#1}}}
  \newcommand*\printtabtoks{\the\@tabtoks}
  \makeatother
\begin{document}
\readdef{data.txt}{\tmpa}
\readArrayij{\tmpa}{first}{3}

%
\resettabtoks
\setcounter{index}{0}
\setcounter{mycell}{0}
\synctabindex{index}
\whiledo{\value{index} < \numexpr\firstROWS\relax}{%

  \addtabtoks{%
    \stepcounter{mycell}
    \themycell: \arrayij{first}{\thetabindex}{1} &
    \stepcounter{mycell}
    \themycell: \arrayij{first}{\thetabindex}{2} &
    \stepcounter{mycell}
    \themycell: \arrayij{first}{\thetabindex}{3} 
    \ifthenelse{\equal{\thetabindex}{\nrows}}{\\\hline}{\\\hline}%
  }
  \addtocounter{index}{1}%
}
\begin{tabular}{|l|l|l|}
  \hline
  \printtabtoks
\end{tabular}
\end{document}

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

관련 정보