我正在尝试创建一个二分对象,该对象\textwidth
最多具有一个,并且不会从右侧溢出,但具有作为参数给出的分隔符的宽度。
我尝试通过使用第一个可选参数缩放左侧,然后从右侧减去相同数量来实现此目的。问题是,这无法编译。错误消息含糊地提到需要\relax
一个数字,但我不明白为什么它不起作用。
\newcommand{\bipart}[3][0.06]
{
\noindent
\begin{minipage}[h]{#1\textwidth} %fine
#2
\end{minipage}
\vrule \hspace{0.15in}
\begin{minipage}[h]{(0.85-#1)\textwidth} %fails
#3
\end{minipage}
\vspace{0.15in}
\normalsize
}
一个解决方法是添加另一个可选参数并始终自己进行计算,但是我不喜欢这样做,除其他外,因为我需要重新编号参数。
答案1
“裸露的” LaTeX 无法理解(0.85-#1)\textwidth
,你必须帮助它。
\documentclass[draft]{article}
\usepackage{xfp}
\usepackage{lipsum}% for context
\ExplSyntaxOn
\cs_new_eq:NN \dimeval \dim_eval:n
\ExplSyntaxOff
\newcommand{\bipart}[3][0.06]{%
\par
\addvspace{\topsep}
\noindent
\begin{minipage}{#1\textwidth} %fine
#2
\end{minipage}%
\hspace{0.15in}%
\vrule
\hspace{0.15in}%
\begin{minipage}{\dimeval{\fpeval{1-#1}\textwidth-0.3in-0.4pt}}
#3
\end{minipage}
\par
\addvspace{\topsep}
}
\begin{document}
\lipsum[1][1-3]
\bipart{a}{\lipsum[2][1-3]}
\lipsum[3]
\end{document}
我改变了算法:垂直线两边各有 0.15 英寸(左边有一个标准的单词间空间,右边有 0.15 英寸)。
另一个的宽度minipage
计算为“乘以#1
0.3in \textwidth
(填充)减去 0.4pt(规则)的补数”。
我还在顶部和底部添加了垂直空间,而不仅仅是底部。