多行文本位于垂直线两侧的中央

多行文本位于垂直线两侧的中央

我想要在垂直线的两侧添加更多行文本。文本行应垂直居中。通常,如果我只需要一侧一行文本,此代码效果很好。但是,如果我想要第二行并使用\\,则不起作用。我希望 MWE 中间的两个单词位于垂直线左侧和右侧的两行独立行中,垂直居中。我该如何解决这个问题?

\documentclass[12pt]{article}

\usepackage[ngerman]{babel}
\usepackage[a4paper, text={16.5cm, 25.2cm}, centering]{geometry}
\usepackage[sfdefault]{ClearSans}
\usepackage[utf8]{inputenc}
\setlength{\parskip}{1.2ex}
\setlength{\parindent}{0em}


\begin{document}

\begin{tabular}{l|}
plus \\
moins \\
aussi \\
\end{tabular}
+ adjectif
\begin{tabular}{l|}
\\
\\
\\
\end{tabular}
+que

\vspace{24pt}


\begin{tabular}{l|}
plus \\
moins \\
aussi \\
\end{tabular}
+ adjectif\\
+adverbe
\begin{tabular}{l|}
\\
\\
\\
\end{tabular}
+que

\vspace{24pt}

\begin{tabular}{l|}
Bien qu'\\
Quoiqu'\\
\end{tabular}
elle \textbf{soit} malade, elle continue de travailler.


\end{document}

在此处输入图片描述

答案1

您觉得这个怎么样?选择一个比 更好的名字foo

\documentclass{article}

\newenvironment{foo}
 {\def\\{\cr\noalign{\hskip1em\vrule\hskip1em}}%
  \def\obj##1{\hbox{\strut##1}}%
  \valign\bgroup&\vfill##\vfill\cr}
 {\crcr\egroup}

\begin{document}

\begin{foo}
\obj{plus} \obj{moins} \obj{aussi} \\
\obj{+ adjectif} \\
\obj{+ que}
\end{foo}

\bigskip

\begin{foo}
\obj{plus} \obj{moins} \obj{aussi} \\
\obj{+ adjectif} \obj{+ adverbe} \\
\obj{+ que}
\end{foo}

\bigskip

\begin{foo}
\obj{Bien qu'} \obj{Quoiqu'} \\
\obj{elle \textbf{soit} malade, elle continue de travailler.}
\end{foo}


\end{document}

在此处输入图片描述

使用嵌套的tabulars;代码更复杂,但语法更友好:列由 分隔\\,每列中的项目由 分隔&(如果愿意,可以切换它们)。

\documentclass{article}
\usepackage{xparse,environ}

\ExplSyntaxOn

\NewEnviron{foo}
 {
  \katharina_foo:V \BODY
 }

\seq_new:N \l__katharina_foo_columns_seq
\seq_new:N \l__katharina_foo_column_seq
\seq_new:N \l__katharina_foo_body_seq

\cs_new_protected:Nn \katharina_foo:n
 {
  \seq_set_split:Nnn \l__katharina_foo_columns_seq { \\ } { #1 }
  \seq_clear:N \l__katharina_foo_body_seq
  \seq_map_function:NN \l__katharina_foo_columns_seq \__katharina_foo_column:n
  \begin{tabular}
   {
    @{}
    l
    *{ \int_eval:n { \seq_count:N \l__katharina_foo_columns_seq - 1 } } { |l }
    @{}
   }
  \seq_use:Nn \l__katharina_foo_body_seq { & }
  \end{tabular}
 }
\cs_generate_variant:Nn \katharina_foo:n { V }

\cs_new_protected:Nn \__katharina_foo_column:n
 {
  \seq_set_split:Nnn \l__katharina_foo_column_seq { & } { #1 }
  \seq_put_right:Nx \l__katharina_foo_body_seq
   {
    \exp_not:n { \begin{tabular}{@{}l@{}} }
    \seq_use:Nn \l__katharina_foo_column_seq { \\ }
    \exp_not:n { \end{tabular} }
   }
 }
\ExplSyntaxOff

\begin{document}

\begin{foo}
plus & moins & aussi \\
+ adjectif \\
+ que
\end{foo}

\bigskip

\begin{foo}
plus & moins & aussi \\
+ adjectif & + adverbe \\
+ que
\end{foo}

\bigskip

\begin{foo}
Bien qu' & Quoiqu' \\
elle \textbf{soit} malade, elle continue de travailler.
\end{foo}

\end{document}

在此处输入图片描述

答案2

\\之间的工作方式与和之间的工作方式不同,因为您不在那里 内。它会中断当前行,这包括它之前的整个行,导致出现在 下方。+adjectif+adverbeplusmoinsaussitabulartabular+adverbeaussi

您使用tabular带有空条目的 来创建一条横跨三行的垂直线,但您也可以tabular使用只有一行的 来包裹整个内容以执行此操作。然后,您可以将tabular只有一列的 嵌套在其中以处理列,如下所示:

\documentclass[12pt]{article}

%% N.B. these lines are not necessary; they were copied from the question
\usepackage[ngerman]{babel}
\usepackage[a4paper, text={16.5cm, 25.2cm}, centering]{geometry}
\usepackage[sfdefault]{ClearSans}
\usepackage[utf8]{inputenc}
\setlength{\parskip}{1.2ex}
\setlength{\parindent}{0em}

\begin{document}

\pagestyle{empty}
\begin{tabular}{l|l|l}
    \begin{tabular}{@{}l@{}}
        plus \\ moins \\ aussi
    \end{tabular}
    &
    \begin{tabular}{@{}l@{}}
        +adjectif \\ +adverbe
    \end{tabular}
    &
    +autre chose
\end{tabular}

\end{document}

注意@{}内部 s 的列声明中的tabular。这些会抑制原本会插入列之间(以及第一列/最后一列之前/之后)的空格。

在此处输入图片描述

PS 您正在加载babel选项ngerman,但您的文本似乎是法语。这是一个错误,还是您正在用一种语言编写关于另一种语言的文本?

答案3

如果我正确理解了你的问题,你想要的是类似以下内容:

在此处输入图片描述

\documentclass[12pt]{article}

\usepackage[french,ngerman]{babel}
\usepackage[a4paper, text={16.5cm, 25.2cm}, centering]{geometry}
\usepackage[sfdefault]{ClearSans}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}% <- added
\usepackage{varwidth}% <- added
\setlength{\parskip}{1.2ex}
\setlength{\parindent}{0em}

\newcommand{\tcell}[1]{% sets up a box containing the text given as argument, vertically centered
\begin{varwidth}{\linewidth}% max width of the box will be \linewidth
  \strut#1\strut% the struts are neccessary to get the correct height and depth of the box (and hence the vertical lines)
\end{varwidth}}


\begin{document}

Deutscher Text.

\selectlanguage{french}
\begin{tabular}{l|l|l}
  plus &&\\
  moins & + adjectif & +que\\
  aussi &&
\end{tabular}

\begin{tabular}{l|l|l}
  \tcell{plus\\moins\\aussi} &
  \tcell{+ adjectif\\+ adverbe} &
  +que
\end{tabular}

\begin{tabular}{@{}l|l|l}% if you don't like the space on the left
\tcell{plus\\moins\\aussi} &
\tcell{+ adjectif\\+ adverbe} &
+que
\end{tabular}

\selectlanguage{ngerman}
Weiter in deutsch.

\vspace{\baselineskip}

\begin{otherlanguage}{french}
  \begin{tabular}{l|l}
    \tcell{Bien qu'\\Quoiqu'} & elle \textbf{soit} malade, elle continue de travailler.
  \end{tabular}

  \begin{tabular}{l|}
    Bien qu'\\
    Quoiqu'\\
  \end{tabular}
  elle \textbf{soit} malade, elle continue de travailler.
\end{otherlanguage}


\end{document}

我创建了新命令\tcell(您可以根据自己的喜好重命名),该命令会创建一个包含文本的 varwidth-minipage。为此需要加载 varwidth 包。它会根据文本调整 minipage 的宽度。您需要指定我 \linewidth在此处使用的最大宽度,在此之后文本将换行。

笔记:我修改了您加载的语言,因为您似乎想在文档中使用德语和法语。最后指定的语言是开始时加载的默认语言。您可以通过多种方式更改语言。我提供了两个示例。我强烈推荐LaTeX/国际化维基百科中的文章。另外,我添加了fontenc包,以正确显示所有口音。

相关内容