强制缩进直至换行

强制缩进直至换行

我一直在努力解决 LateX 中的文本格式问题,但我不知道如何轻松解决它。我有一个大文档,其格式如下:

名称 1:blablablablablablablablablablablablablablab
blablablablablablablablablablab \\(输入)
名称 2:blablablablablablablablablablablablab
blablablablablablablablablablablablablablablablab
blablablabla \\(输入)

ETC。

这真的是难以阅读的,我正在寻找某种可以转换我的文本(无需编辑文本)的全局设置:

名称 1:              blablablablablablablablablablablablablablabblablablablablablab
             \\(输入)
名称 2:blablablablablablablablablablablablablablabblablablablablablablablablablablablablablab              \\(输入)

所以我实际上喜欢做的是为每个太长的句子创建缩进。这可以做到吗?

答案1

您可以尝试以下宏。\specbegin...之间的所有\specend内容看起来与您的描述完全一样,即您不需要对文本进行任何更改。所有文本的缩进都是按最长的名称计算的。

\newbox\specbox
\newdimen\maxname
\def\specbegin{\begingroup
   \setbox\specbox=\vbox{}%
   \maxname=0pt
   \def\p ##1{\ifx\specend##1\specend\else \expandafter\pp\expandafter##1\fi}
   \def\pp ##1: ##2\\{%
      \setbox0=\hbox{##1: }%
      \ifdim\maxname>\wd0 \else \maxname=\wd0 \fi
      \setbox\specbox=\vbox{\hbox{##2\unskip}\nointerlineskip\box0
                            \unvbox\specbox}%
      \p 
   }
   \p
}
\def\specend{
   \loop
      \setbox\specbox=\vbox{\unvbox\specbox
         \global\setbox0=\lastbox \global\setbox1=\lastbox
      }
      \unless\ifvoid0
         \noindent \hangindent=\maxname
         \hbox to\maxname{\box0\hss}\unhbox1\endgraf
      \repeat
   \endgroup
}

\specbegin
Name1: bla bla blabla blab labla blabl abla blab labla
bla blab labl ablab labl ab lab labl abla
bla blab labl ablab labl ab lab labl abla
bla blab labl ablab labl ab lab labl abla \\
Name2: blabl abla bla bla blab labl ablab lab lablabla
bl ablab labl ablabl abl abla blabl ablab labl ablablab
bla bla bla bla \\
Long Name3: blabl abla bla bla blab labl ablab lab lablabla
bl ablab labl ablabl abl abla blabl ablab labl ablablab
bl ablab labl ablabl abl abla blabl ablab labl ablablab
bla bla bla bla \\
Name4: blabl abla bla bla blab labl ablab lab lablabla
bl ablab labl blabl ablab labl ablablab
bl ablab labl ablabl abl abla blabl ablab labl ablablab
bla bla bla bla \\
\specend

宏对文本进行两次迭代。第一次:测量最长的“名称”,并将所有文本存储到 中\specbox。第二次:从 中恢复文本\specbox,并将其与适当的 一起使用\hangindent

答案2

或许:

\documentclass[]{article}

\makeatletter
\newenvironment{desclike}
{%
  \def\\##1{%
    \ifx##1\end%
    \else%
      \expandafter\@desclike%
    \fi##1}
  \def\@desclike##1:{%
    \if\relax\detokenize{##1}\relax%
    \else%
      \item[##1:]%
    \fi}%
  \begin{description}%
  \\%
}{%
  \end{description}
}
\makeatother

\begin{document}
\begin{desclike}
Name1: blablablablablablablablablablablablabla
blablablablablablablablablablabla \\ 
Name2: blablablablablablablablablablablablabla
blablablablablablablablablablablablablablablab
blablablabla \\
\end{desclike}
\end{document}

像这样,它将“Name1:”更改为粗体,但这可以通过更改描述标签格式来实现。

相关内容