Por que o Adjustbox precisa de um ajuste de raise=-0.3ex com enumitem?

Por que o Adjustbox precisa de um ajuste de raise=-0.3ex com enumitem?

O MWE abaixo produz os resultados desejados. Mas existe uma maneira melhor de obter esse alinhamento em vez de raise=-0.3ex:

insira a descrição da imagem aqui

Sem o raise=-0.3ex, o número do item não fica alinhado com o texto:

insira a descrição da imagem aqui

Código:

\documentclass{article}
\usepackage{enumitem}
\usepackage[export]{adjustbox}

\fboxsep=0pt

\newadjustboxenv{MyAdjustbox}{valign=t, raise=-0.3ex}%

\begin{document}
    \begin{enumerate}
    \item 
        \begin{MyAdjustbox}
        \fbox{%
            \begin{minipage}[t]{\linewidth}
                Some text that takes up several lines, so we need to adjust the
                item number to align with the top baseline.
            \end{minipage}%
       }%
       \end{MyAdjustbox}%
   \end{enumerate}%
\end{document}

Responder1

Acho que há duas questões distintas. A principal surge da utilização de um minipageambiente.

  • A primeira linha do material dentro do fbox não possui material mais alto que letras maiúsculas. Como esse material está contido em um minipage, o espaço em branco vertical não utilizado necessário para símbolos como (e )é removido. Em contraste, o símbolo de enumeração énãoencerrado em a minipagee, portanto, sua linha de base é escolhida sem remover o implícito \strut. Se alguém inserir um \strutna primeira linha do \fbox, a maior parte da necessidade de ajuste vertical será removida.

  • Para alinhar totalmente as linhas de base do “1”. partícula antes de \fboxe o material dentro de minipage, também é necessário fazer um ajuste (trocadilho intencional) para a espessura da regra (dada pelo parâmetro \fboxrule; valor padrão:, \arrayrulewidthgeralmente 0.4pt) que envolve o fbox. E, como o valor de \fboxsepé diferente de zero em geral, sugiro usar o seguinte código

    \newadjustboxenv{MyAdjustbox}{valign=t, raise=\fboxrule+\fboxsep}
    

    em vez de

    \newadjustboxenv{MyAdjustbox}{valign=t, raise=-0.3ex}
    

Com esses dois ajustes (mais um trocadilho – ai!), recebo esta captura de tela:

insira a descrição da imagem aqui

\documentclass{article}
\usepackage{enumitem}
\usepackage[export]{adjustbox}

\fboxsep=0pt

\newadjustboxenv{MyAdjustbox}{valign=t, raise=\fboxrule+\fboxsep}

\begin{document}
    \begin{enumerate}
    \item 
    \begin{MyAdjustbox}
       \fbox{%
       \begin{minipage}{\linewidth}\strut%
       Some text that takes up several lines, so we need 
       to adjust the item number to align with the top 
       baseline.
      \end{minipage}%
      }%
   \end{MyAdjustbox}%
   \end{enumerate}%
\end{document}

Responder2

A opção valign=tde adjustboxnão recupera a linha de base superior interna como a [t]opção de minipágina ou tabular faz.adjustbox calcula uma altura que leva em consideração o tamanho da fonte do texto atual: por padrão, valign=tdefine a altura como a altura do arquivo \strutbox.

Isso significa que dependendo do texto da primeira linha ele pode ser muito alto ou muito baixo em relação ao número. Você pode "consertar" o primeiro caso com o código do Mico, mas para o segundo caso não há solução fácil.

Na minha opinião adjustboxé o ambiente errado para essas caixas. É útil para alinhar imagens que não possuem linha de base intrínseca, mas não para caixas de texto.

\documentclass{article}
\usepackage{enumitem}
\usepackage[export]{adjustbox}

\newadjustboxenv{MyAdjustbox}{valign=t}

\begin{document}
    \begin{enumerate}
    \item
        \begin{MyAdjustbox}%too high
             \begin{minipage}[t]{\linewidth}
                aaaa
             \end{minipage}%
       \end{MyAdjustbox}
    \item  \begin{MyAdjustbox}%too low
             \begin{minipage}[t]{\linewidth}
              $\int\limits_1^3 f(x) $
             \end{minipage}%
       \end{MyAdjustbox} 
   \end{enumerate}
\end{document}

insira a descrição da imagem aqui

informação relacionada