https://zhuanlan.zhihu.com/p/51494365 这个例子运行不了 缺少\settototalheight的定义? ***multilingualTitles-examples.tex*** ```tex \documentclass{ctexart} % see https://zhuanlan.zhihu.com/p/41721110 \input multilingualTitles-code \newtheorem{example}{Example}[section] % definitions \begin{document} \begin{example}{Empty input} \multilingualTitles {} {} \end{example} \begin{example}{Short titles} \multilingualTitles {啦啦啦} {lalala} \end{example} \begin{example}{Long titles, auto line break with shorter line width} \multilingualTitles {很长长长长长长长长长长长长长长长长长的标题} {Very Looong Looong Looong Looong Looong Looong Title} \end{example} \begin{example}{Short title along with long title 1} \multilingualTitles {很一二三四五一二三四五一二三四五的标题} {Very Looong Looong Looong Looong Looong Looong Title} \end{example} \begin{example}{Short title along with long title 2} \multilingualTitles {很一二三四五一二三四五一二三四五一的标题} {Very Looong Looong Looong Looong Title} \end{example} \begin{example}{Long Titles, manual linebreak} \multilingualTitles {很长长长长长长\\长长长长长长长长长长的标题} {Very Looong Looong Looong\\ Looong Looong Title} \end{example} \begin{example}{Titles with math formulae} \multilingualTitles {啦啦啦 $x^n + y^n = z^n$ 啦啦啦} {lalala $\sin x$ lalala} \end{example} \end{document} ``` ***multilingualTitles-code.tex*** ```tex \makeatletter \renewcommand{\arraystretch}{1.2} % inner temp length \newlength\@tempTitleHt \newlength\@tempTitleMaxWd % length used as parameters, "Wd" is a shorthand for "Width" \newlength\titleSingleLineMaxWd \newlength\titleMultiLineMaxWd \newlength\titleLRExtraWd \newlength\titleSepWd \setlength\titleSingleLineMaxWd{0.6\textwidth} \setlength\titleMultiLineMaxWd{0.5\textwidth} \setlength\titleLRExtraWd{.5em} \setlength\titleSepWd{.5em} % main macro, using a simple table \newcommand{\multilingualTitles}[2]{% \par {\noindent\centering \begin{tabular}{r @{\hspace{\titleSepWd}} p{\titleSingleLineMaxWd}} 中文标题 & \titleBox{#1} \\ & \\[-10pt] Title in English & \titleBox{#2} \end{tabular}\par}% } % draw a fixed-width underline \newcommand{\titleUnderline}{% \rule[-.3em]{\titleSingleLineMaxWd + 2\titleLRExtraWd}{.5pt}} % title content typesetter \newcommand\titleBox[1]{% \setlength\@tempTitleMaxWd\titleSingleLineMaxWd % Measure the total height of #1 subject to \titleSingleLineMaxWd. % Here \@titleBox is necessary when #1 contains "\\". \settototalheight\@tempTitleHt{\@titleBox{#1}}% \ifdim\@tempTitleHt=0pt% % case 1: #1 causes empty output \titleUnderline \else % Change to LR mode, for inserting a zero-width box right after. \leavevmode % note: Use \normalbaseineskip instead of \baselineskip, % since the latter is set to 0pt inside tabular env. \ifdim\@tempTitleHt>\normalbaselineskip % case 2: #1 is fit for multilines, or contains `\\`, hence % \titleMultiLineMaxWd is used instead, and the total % height of #1 subject to new max width is re-measured. \setlength\@tempTitleMaxWd\titleMultiLineMaxWd \settototalheight\@tempTitleHt{\@titleBox{#1}}% % \rlap{\smash{...}} typesets content of its argument normally % but sets it into a zero sized box. Here \@titleBox set % (possiblly) multi-line text into a single box, since \smash % only takes in argument spreading one line. % % Every line of title content needs an underline, hense we do % a loop to typeset one underline for every line the title % content actually spreads. \rlap{\smash{\@titleBox{% \@whiledim\@tempTitleHt>0pt% \leavevmode % \do{% \rlap{\titleUnderline}\\% \addtolength\@tempTitleHt{-\normalbaselineskip}% }% }}}% % Insert h-offset to manually center the title content. \hspace{\dimexpr\titleLRExtraWd + .5\titleSingleLineMaxWd - .5\titleMultiLineMaxWd\relax}% \@titleBox{\centering #1}% \else % case 3: #1 is fit for one line \rlap{\titleUnderline}% \hspace{\titleLRExtraWd}% \@titleBox{\centering #1}% \fi \fi } % common operations on every title content \newcommand{\@titleBox}[1]{% \parbox[t]{\@tempTitleMaxWd}{#1}} \makeatother ```

1 回答1

0
`\settototalheight` 是宏包 `calc` 定义的,加载即可。 专栏文章已作相应更新,感谢反馈。
  • 已解决,谢谢! – 188****9323 2020-02-13 20:06 回复

你的回答

请登录后回答

你的回答将会帮助更多人,请务必认真回答问题。