我正在尝试创建一个包含绘图元素的数组(来自 CircuiTikZ 包,但它是偶然的),其中一些写入多行。
因为我希望文本垂直和水平居中,所以我使用以下代码:
\documentclass[border=2mm]{standalone}
\usepackage{array,multirow,makecell,hhline}
\setcellgapes{1pt}
\makegapedcells
\newcolumntype{R}[1]{>{\raggedleft\arraybackslash }b{#1}}
\newcolumntype{L}[1]{>{\raggedright\arraybackslash }b{#1}}
\newcolumntype{C}[1]{>{\centering\arraybackslash }b{#1}}
\usepackage[utf8]{inputenc}
\usepackage[siunitx, european, straightvoltages, cute inductors]{circuitikz}
\begin{document}
\begingroup
\makegapedcells
\setcellgapes{3pt}
\tikzset{every picture/.style={baseline=-0.5ex}}
\begin{tabular}{|C{4cm}|C{4cm}|C{3cm}|}
\hline
Composant & Code & Image résultant\\
\hline
amplificateur opérationnel anglo-saxon & node[op amp]{} & \begin{circuitikz}
\draw (0,0) node[op amp]{};
\end{circuitikz} \\
\cline{1-3}
amplificateur opérationnel européen & node[en amp]{} & \begin{circuitikz}
\draw (0,0) node[en amp]{};
\end{circuitikz} \\
\cline{1-3}
amplificateur opérationnel entièrement différentiel & node[fd op amp]{} & \begin{circuitikz}
\draw (0,0) node[fd op amp]{};
\end{circuitikz} \\
\cline{1-3}
amplificateur d'instrumentation & node[inst amp]{} & \begin{circuitikz}
\draw (0,0) node[inst amp]{};
\end{circuitikz} \\
\cline{1-3}
amplificateur d'instrumentation avec résistance & node[inst amp ra]{} & \begin{circuitikz}
\draw (0,0) node[inst amp ra]{};
\end{circuitikz} \\
\cline{1-3}
\hhline{|=|=|=|}
\end{tabular}
\endgroup
\end{document}
我的问题是,对于某一行(第 4 行),文本不再垂直居中,而是放置在单元格的顶部(我还觉得其他行的垂直居中不太正确)。我该如何解决这个问题?
谢谢
答案1
您应该使用m
列而不是b
个。但是,makecell
似乎与m
列不兼容。
我建议你使用nicematrix
。
\documentclass[border=2mm]{standalone}
\usepackage{nicematrix,hhline}
\usepackage[siunitx, european, straightvoltages, cute inductors]{circuitikz}
\newcolumntype{C}[1]{>{\centering\arraybackslash }m{#1}}
\begin{document}
\begin{NiceTabular}{|C{4cm}|C{4cm}|C{3cm}|}[cell-space-limits=3pt]
\hline
Composant & Code & Image résultant\\
\hline
amplificateur opérationnel anglo-saxon & node[op amp]{} & \begin{circuitikz}
\draw (0,0) node[op amp]{};
\end{circuitikz} \\
\hline
amplificateur opérationnel européen & node[en amp]{} & \begin{circuitikz}
\draw (0,0) node[en amp]{};
\end{circuitikz} \\
\hline
amplificateur opérationnel entièrement différentiel & node[fd op amp]{} & \begin{circuitikz}
\draw (0,0) node[fd op amp]{};
\end{circuitikz} \\
\hline
amplificateur d'instrumentation & node[inst amp]{} & \begin{circuitikz}
\draw (0,0) node[inst amp]{};
\end{circuitikz} \\
\hline
amplificateur d'instrumentation avec résistance & node[inst amp ra]{} & \begin{circuitikz}
\draw (0,0) node[inst amp ra]{};
\end{circuitikz} \\
\hhline{|=|=|=|}
\end{NiceTabular}
\end{document}
您需要多次编译(因为nicematrix
使用 PGF/Tikz 节点)。
答案2
如果所有列都指定了固定宽度,则不需要任何基于\halign
基元的宏。\halign
能够根据每列中最宽的项目计算列宽,但这不是这里所需的功能。您可以直接使用\hbox
、、\vcenter
基\hrule
\vrule
元(无需\halign
):
\documentclass[border=2mm]{standalone}
\usepackage{circuitikz}
\begin{document}
\vbox{\hrule
\def\p#1#2#3{\hbox{\vrule\c{4cm}{#1}\c{4cm}{#2}\c{4cm}{#3}}\hrule}
\def\c#1#2{$\vcenter{\medskip\hsize=#1\parindent=0pt\leftskip=5pt plus1fill
\rightskip=\leftskip #2\par\medskip}$\vrule}
\p {Composant} {Code} {Image résultant}
\p {amplificateur opérationnel anglo-saxon} {node[op amp]}
{\begin{circuitikz}\draw (0,0) node[op amp]{};\end{circuitikz}}
\p {amplificateur opérationnel européen} {node[en amp]}
{\begin{circuitikz}\draw (0,0) node[en amp]{};\end{circuitikz}}
\p {amplificateur opérationnel entièrement différentiel} {node[fd op amp]}
{\begin{circuitikz}\draw (0,0) node[fd op amp]{};\end{circuitikz}}
\p {amplificateur d'instrumentation} {node[inst amp]}
{\begin{circuitikz}\draw (0,0) node[inst amp]{};\end{circuitikz}}
\p {amplificateur d'instrumentation avec résistance} {node[inst amp ra]}
{\begin{circuitikz}\draw (0,0) node[inst amp ra]{};\end{circuitikz}}
}
\end{document}
答案3
你不需要制作间隙细胞,指导 Ti 就足够了钾Z 向边界框添加一些内容。
\documentclass[a4paper]{article}
\usepackage{array,tabularx}
\usepackage[siunitx, european, straightvoltages, cute inductors]{circuitikz}
\begin{document}
\begingroup\renewcommand{\tabularxcolumn}{m}
%\tikzset{every picture/.style={baseline=-0.5ex}}
\tikzset{
every picture/.style={
execute at end picture={
\path (current bounding box.south west) rectangle
(current bounding box.north east)+(0,0.15);
},
},
}
\noindent
\begin{tabularx}{\textwidth}{
| >{\centering}X
| >{\centering}X
| >{\centering\arraybackslash}X |
}
\hline
Composant & Code & Image résultant\\
\hline
amplificateur opérationnel anglo-saxon &
node[op amp]{} &
\begin{circuitikz}
\draw (0,0) node[op amp]{};
\end{circuitikz} \\
\hline
amplificateur opérationnel \\ européen &
node[en amp]{} &
\begin{circuitikz}
\draw (0,0) node[en amp]{};
\path ++(0,1.1);
\end{circuitikz} \\
\hline
amplificateur opérationnel entièrement \\ différentiel &
node[fd op amp]{} &
\begin{circuitikz}
\draw (0,0) node[fd op amp]{};
\end{circuitikz} \\
\hline
amplificateur d'instrumentation &
node[inst amp]{} &
\begin{circuitikz}
\draw (0,0) node[inst amp]{};
\end{circuitikz} \\
\hline
amplificateur d'instrumentation \\ avec résistance &
node[inst amp ra]{} &
\begin{circuitikz}
\draw (0,0) node[inst amp ra]{};
\end{circuitikz} \\
\hline
\end{tabularx}
\endgroup
\end{document}