垂直单元格居中问题

垂直单元格居中问题

我正在尝试创建一个包含绘图元素的数组(来自 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}

在此处输入图片描述

相关内容