
私は、N 個の集積回路のデータを単純な CSV ファイルに保存し、コンパイル時に該当するファイルで LaTeX ドキュメントを駆動したいと考えています。以下の私の MWE を見ると、私が実現したいことがおわかりいただけると思います。全体的なアイデアは、「単一の情報ソース」を用意し、ドキュメントを更新するためにこれらの CSV ファイル以上を編集しなくても済むようにすることです。
MWE:
\documentclass[]{book}
\usepackage{datatool}
\usepackage[siunitx]{circuitikz}
\usepackage{currfile}
\usepackage{pgfplotstable}
\pgfplotstableset{col sep=semicolon, string type}
\usepackage{filecontents}
\begin{document}
\begin{filecontents*}{\currfilebase_pinout.csv}
1;Q1;Output 1
2;Q2;Output 2
3;Q3;Output 3
4;Q4;Output 4
5;Q5;Output 5
6;Q6;Output 6
7;Q7;Output 7
8;GND;Ground
9;Q7S;bla
10;/MR;bla
11;SHCP;bla
12;STCP;bla
13;/OE;bla
14;DS;bla
15;Q0;Output 8
16;VCC;2-6V
\end{filecontents*}
\begin{figure}[ht]
\centering
\begin{circuitikz}
\draw (0,0) node[dipchip, num pins=16 ](C){\rotatebox{90}{\currfilebase}}; %num pins=... here I would be happy if datatool could give me the number of entries in the source file
% ------------------- FROM HERE -------------------
\node [left, font=\tiny] at (C.pin 1) {Q1};
\node [left, font=\tiny] at (C.pin 2) {Q2};
\node [left, font=\tiny] at (C.pin 3) {Q3};
\node [left, font=\tiny] at (C.pin 4) {Q4};
\node [left, font=\tiny] at (C.pin 5) {Q5};
\node [left, font=\tiny] at (C.pin 6) {Q6};
\node [left, font=\tiny] at (C.pin 7) {Q7};
\node [left, font=\tiny] at (C.pin 8) {GND};
\node [right, font=\tiny] at (C.pin 9) {Q7S};
\node [right, font=\tiny] at (C.pin 10) {/MR};
\node [right, font=\tiny] at (C.pin 11) {SHCP};
\node [right, font=\tiny] at (C.pin 12) {STCP};
\node [right, font=\tiny] at (C.pin 13) {/OE};
\node [right, font=\tiny] at (C.pin 14) {DS};
\node [right, font=\tiny] at (C.pin 15) {Q0};
\node [right, font=\tiny] at (C.pin 16) {VCC};
% ------------------- TO HERE ------------------- i would be happy if a macro could populate these data from the source file
\end{circuitikz}
\caption{\currfilebase\ pinout}
\end{figure}
\begin{table}[ht]
\centering
\pgfplotstabletypeset{\currfilebase_pinout.csv}
\caption{\currfilebase\ pinout explanation}
\end{table}
\end{document}
出力例:
答え1
わかりました。データツールを使用して解決しました。
\documentclass[]{book}
\usepackage[siunitx]{circuitikz}
\usepackage{currfile}
\usepackage{pgfplotstable}
\pgfplotstableset{col sep=semicolon, string type}
\usepackage{datatool}
\DTLsetseparator{;}
\usepackage{filecontents}
\begin{document}
\begin{filecontents*}{\currfilebase_pinout.csv}
1;Q1;Output 1
2;Q2;Output 2
3;Q3;Output 3
4;Q4;Output 4
5;Q5;Output 5
6;Q6;Output 6
7;Q7;Output 7
8;GND;Ground
9;Q7S;bla
10;/MR;bla
11;SHCP;bla
12;STCP;bla
13;/OE;bla
14;DS;bla
15;Q0;Output 8
16;VCC;2-6V
\end{filecontents*}
\DTLloaddb[noheader,keys={Pin,Label,Info}]{csvData}{\currfilebase_pinout.csv}
\DTLmaxforcolumn{csvData}{Pin}{\numberOfPins}
\begin{figure}[ht]
\centering
\begin{circuitikz}
\draw (0,0) node[dipchip, num pins=\numberOfPins ](C){\rotatebox{90}{\currfilebase}};
\DTLforeach{csvData}{\pinNumber=Pin, \label=Label}{
\DTLdiv{\checkValue}{\pinNumber}{\numberOfPins}
\ifthenelse{\DTLisgt{\checkValue}{0.5}}
{\node [right, font=\tiny] at (C.pin \pinNumber) {\label};}
{\node [left, font=\tiny] at (C.pin \pinNumber) {\label};}
}
\end{circuitikz}
\caption{\currfilebase\ pinout}
\end{figure}
\begin{table}[ht]
\centering
\pgfplotstabletypeset{\currfilebase_pinout.csv}
\caption{\currfilebase\ pinout explanation}
\end{table}
\end{document}