具有最小宽度的 makebox

具有最小宽度的 makebox

我曾经makebox创建填充文本,但是当框中的文本溢出时,它会与以下内容重叠。为了演示,在此处输入图片描述

我想要的是一个框,当文本短于给定的宽度时,它就像一个普通的 makebox 一样工作,但是,当文本溢出时,它应该像没有 makebox 一样工作,就像第四行一样。

要清楚的是,我想要的是这样的:

\newcommand{flexbox}[2]{%
  \ifthenelse{\lessthan{\widthof{#2}}{#1}}{%
    \makebox{#1}[l]{#2}
  }{%
    #2
  }
}

答案1

\documentclass{article}
\newlength{\mylen}
\newcommand{\myflexbox}[2][3em]{%
  \settowidth{\mylen}{#2}%
  \ifdim\mylen < #1
    \makebox[#1][l]{#2}%
  \else
    #2%
  \fi
}
\begin{document}
  \myflexbox{good} padding

  \myflexbox{notbad} padding

  \myflexbox{it overlaps!} padding

  it overlaps! padding

\end{document}

在此处输入图片描述

答案2

第一次尝试

尝试tabbing环境,下次请提供完整的示例(包括documentclass等)

第一行定义了制表符的位置。

\documentclass{article}

\begin{document}

 \begin{tabbing}
    longestlongest \= long  \kill % kill -> do not print this line
    good \> padding \\
    notbad \> padding \\
    it overlaps \> padding \\
 \end{tabbing}

\end{document}

在此处输入图片描述


第二次尝试

现在我使用tikz图片,但我不知道如何align=left在不使用的情况下将其左对齐()text with。也许有专家可以帮助我们。

\documentclass{article}
\usepackage{tikz}
\begin{document}

\parindent0mm

\section*{With Frame}   

\tikz[baseline=(O.base)]{\node(O) [baseline,draw,minimum width=15mm,inner sep = 0,align=left] {good};} padding\\
\tikz[baseline=(O.base)]{\node(O) [baseline,draw,minimum width=15mm,inner sep = 0,align=left] {notbad};} padding\\
\tikz[baseline=(O.base)]{\node(O) [baseline,draw,minimum width=15mm,inner sep = 0] {it does not overlap};} padding\\

\section*{No Frame (\texttt{draw} removed)} 

\tikz[baseline=(O.base)]{\node(O) [baseline,minimum width=15mm,inner sep = 0,align=left] {good};} padding\\
\tikz[baseline=(O.base)]{\node(O) [baseline,minimum width=15mm,inner sep = 0,align=left] {notbad};} padding\\
\tikz[baseline=(O.base)]{\node(O) [baseline,minimum width=15mm,inner sep = 0] {it does not overlap};} padding\\

\end{document}

我用了求助问题。

在此处输入图片描述

相关内容