Comment utiliser la commande \ valign dans l'environnement enumerate?

Nov 17 2020

A partir de cette question Comment obtenir la hauteur d'un minipage pour régler la hauteur d'un autre? J'ai trouvé utile la réponse de @egreg. Y a-t-il un moyen

  1. la première colonne à aligner en haut?
  2. le tikzpicture à placer au centre par rapport à la première colonne?
\documentclass[a4paper,11pt]{article}

\usepackage{enumitem}
\usepackage{tikz}

\begin{document}

\begin{enumerate}
    \item
    \valign{#\cr
    \hsize=0.49\linewidth
        Text\newline
        Text\newline
        Text\newline
        Text\newline
    \cr
    \noalign{\hfill}
    \hsize=0.49\linewidth
    \centering
        \begin{tikzpicture}
                    \draw[->] (-0.75,0) -- (pi,0) node[below] {$x$};
                    \draw[->] (0,-0.5) -- (0,2) node[left] {$y$};
                    \fill (0,0) circle[radius=0.025] node[below left] {$O$};
        \end{tikzpicture}
    \cr
}
    \item
    \valign{#\cr
    \hsize=0.49\linewidth
        Text\newline
        Text\newline
        Text\newline
        Text\newline
        Text\newline
        Text\newline
        Text\newline
        Text\newline
        Text\newline
        Text\newline
        Text\newline
        Text\newline
    \cr
    \noalign{\hfill}
    \hsize=0.49\linewidth
    \centering
    \begin{tikzpicture}
        \draw[->] (-0.75,0) -- (pi,0) node[below] {$x$};
        \draw[->] (0,-0.5) -- (0,2) node[left] {$y$};
        \fill (0,0) circle[radius=0.025] node[below left] {$O$};
    \end{tikzpicture}
    \cr
}
\end{enumerate}

\end{document}

Réponses

egreg Nov 18 2020 at 00:21

Vous pouvez utiliser adjustbox:

\documentclass[a4paper,11pt]{article}

\usepackage{enumitem}
\usepackage{adjustbox}
\usepackage{tikz}

\usepackage{lipsum} % for mock text

\begin{document}

\begin{enumerate}
    \item
    \adjustbox{valign=t}{\valign{#\cr
      \hsize=0.49\linewidth
        \lipsum[4][1-2]
    \cr
    \noalign{\hfill}
    \hsize=0.49\linewidth
    \centering
        \begin{tikzpicture}
                    \draw[->] (-0.75,0) -- (pi,0) node[below] {$x$};
                    \draw[->] (0,-0.5) -- (0,2) node[left] {$y$};
                    \fill (0,0) circle[radius=0.025] node[below left] {$O$};
        \end{tikzpicture}
    \cr
}}
    \item
    \adjustbox{valign=t}{\valign{#\cr
    \hsize=0.49\linewidth
        \lipsum[4][1-2] \lipsum[4][1-2]
        \lipsum[4][1-2] \lipsum[4][1-2]
        \lipsum[4][1-2] \lipsum[4][1-2]
    \cr
    \noalign{\hfill}
    \hsize=0.49\linewidth
    \centering
    \begin{tikzpicture}
        \draw[->] (-0.75,0) -- (pi,0) node[below] {$x$};
        \draw[->] (0,-0.5) -- (0,2) node[left] {$y$};
        \fill (0,0) circle[radius=0.025] node[below left] {$O$};
    \end{tikzpicture}
    \cr
}}
\end{enumerate}

\end{document}

1 Skillmon Nov 17 2020 at 23:22

Ce qui suit aligne les nombres avec la première ligne de la colonne de gauche tandis que les deux colonnes sont verticalement centrées l'une par rapport à l'autre. Pour ce faire, il commence par composer la colonne de gauche avec l'alignement sur la ligne de base de la première ligne via l' \vtopintérieur d'une boîte. Ensuite, le \valignest déplacé via \raisebox. -\heightdéplacera le contenu complètement en dessous de la ligne de base, et \dp\valignalign@boxle déplacera vers le haut de sorte que la ligne de base soit sur le même point que pour le \vtopseul.

Pour centrer verticalement les deux colonnes l'une par rapport à l'autre, j'utilise \vfil#\vfil\crpour le \valignpréambule. Puisque fondamentalement le même code est utilisé deux fois, je le mets dans une macro.

\documentclass[a4paper,11pt]{article}

\usepackage{enumitem}
\usepackage{tikz}

\makeatletter
\newsavebox\valignalign@box
\newcommand\valignalign[4]
  {%
    \setbox\valignalign@box\vtop{\hsize=#1\linewidth#2\par}%
    \raisebox{\dimexpr-\height+\dp\valignalign@box\relax}{%
        \valign{\vfil##\vfil\cr
          \hsize=#1\linewidth
          \unvbox\valignalign@box
          \cr
          \noalign{\hfil}%
          \hsize=#3\linewidth
          #4%
          \cr
    }}%
  }
\makeatother

\begin{document}

\begin{enumerate}
  \item
    \valignalign
      {.49}
      {%
        Text\newline
        Text\newline
        Text\newline
        Text\newline
      }
      {.49}
      {%
        \centering
        \begin{tikzpicture}
          \draw[->] (-0.75,0) -- (pi,0) node[below] {$x$};
          \draw[->] (0,-0.5) -- (0,2) node[left] {$y$};
          \fill (0,0) circle[radius=0.025] node[below left] {$O$};
        \end{tikzpicture}%
      }%
  \item
    \valignalign
      {.49}
      {%
        Text\newline
        Text\newline
        Text\newline
        Text\newline
        Text\newline
        Text\newline
        Text\newline
        Text\newline
        Text\newline
        Text\newline
      }
      {.49}
      {%
        \centering
        \begin{tikzpicture}
          \draw[->] (-0.75,0) -- (pi,0) node[below] {$x$};
          \draw[->] (0,-0.5) -- (0,2) node[left] {$y$};
          \fill (0,0) circle[radius=0.025] node[below left] {$O$};
        \end{tikzpicture}%
      }%
\end{enumerate}

\end{document}