如何分隔一行内的项目,使得分隔符自动不会出现在任一端,并且项目不会断线?

如何分隔一行内的项目,使得分隔符自动不会出现在任一端,并且项目不会断线?

在我的简历中,有如下列表:

巫术 \tdot 流体动力学 \tdot 应用熊驯服 \tdot 微积分 \tdot [...]

其中 \tdot 是 \textperiodcentered 字符以及一些 hspace。这种分隔类型对换行完全不敏感,因此如果一行中的空格用完,那么根据机会

  • 一个项目可能会被拆分,甚至用连字符连接,

  • 或者可能有 \tdot 位于一行的末尾或下一行的开头

这两个放在一起不会留下任何歧义,你总是知道一个项目在哪里结束,另一个项目在哪里开始。然而,它们也有点丑陋。这是一张图片:

排版示例,突出显示问题区域

有没有办法让它们都消失?这意味着

  • 定义不会断开的单词组

  • 有一个分隔符,知道不要出现在自动换行符之前或之后

编辑:这里是关于它最初如何完成的 MWE。

\documentclass{report}
\makeatletter
\makeatother

\newcommand{\entrylabel}[1]{\mbox{#1}\hfil}

\newenvironment{CV}
  {\begin{list}{}
{\renewcommand{\makelabel}{\entrylabel}
\setlength{\labelwidth}{77pt}
\setlength{\leftmargin}{84pt}
  }}
  {\end{list}
}

\newcommand{\tdot}{\hspace{0.4em}\textperiodcentered\hspace{0.6em}}

\begin{document}

\pagestyle{empty}

\begin{CV}
\item[Experimental] mechanics \tdot fluid dynamics \tdot thermodynamics \tdot waves \tdot electromagnetism \tdot optics \tdot atomic physics \tdot nuclear physics \tdot particle physics \tdot astrophysics \tdot astroparticle physics, methods and detectors \tdot cosmology \tdot neutrino astronomy \tdot accelerator physics and technology \tdot statistics and data analysis
\end{CV}

\end{document}

答案1

以下示例将项目放入宏中\titem,而不是使用分隔符宏\tdot。这样更容易将条目放入,\mbox以防止项目内部出现换行符。

如果将分隔点设置为“leaders”,则在换行时会丢失分隔点。这通常用于目录中重复的内容,例如虚线。但也可以指定一次重复。由于 TeX 将此构造视为水平粘合,因此它会在新行的开头消失:

\documentclass{article}
\usepackage[hmargin=20mm]{geometry}

\makeatletter
\newcommand*{\titem}[1]{%
  \mbox{#1}%
  \@ifnextchar\titem{%
    \hspace{0pt plus 1em}%
    \sbox0{\,\textperiodcentered\,}%
    \cleaders\copy0\hskip\wd0 %
    \hspace{0pt plus 1em}%
  }{}%
}
\makeatother

\begin{document}
  \noindent
  Experimental\qquad
  \begin{minipage}[t]{110mm}
    \titem{mechanics}
    \titem{fluid dynamics}
    \titem{thermodynamics}
    \titem{waves}
    \titem{electromagnetism}
    \titem{optics}
    \titem{atom physics}
    \titem{nuclear physics}
    \titem{particle physics}
    \titem{astrophysics}
    \titem{astroparticle physics}
    \titem{methods and detectors}
    \titem{cosmology}
    \titem{neutrino astronomy}
    \titem{accelerator physics and technology}
    \titem{statistics and data analysis}
  \end{minipage}
\end{document}

结果

当然,现在 TeX 的换行变得更加困难。点周围的间距可能非常小,也可能非常大,具体取决于项目的长度。

变体为\raggedright

\documentclass{article}
\usepackage[hmargin=20mm]{geometry}

\makeatletter
\newcommand*{\titem}[1]{%
  \mbox{#1}%
  \@ifnextchar\titem{%
    \sbox0{\space\textperiodcentered\space}%
    \cleaders\copy0\hskip\wd0 %
  }{}%
}
\makeatother

\begin{document}
  \noindent
  Experimental\qquad
  \begin{minipage}[t]{110mm}
    \raggedright
    \titem{mechanics}
    \titem{fluid dynamics}
    \titem{thermodynamics}
    \titem{waves}
    \titem{electromagnetism}
    \titem{optics}
    \titem{atom physics}
    \titem{nuclear physics}
    \titem{particle physics}
    \titem{astrophysics}
    \titem{astroparticle physics}
    \titem{methods and detectors}
    \titem{cosmology}
    \titem{neutrino astronomy}
    \titem{accelerator physics and technology}
    \titem{statistics and data analysis}
  \end{minipage}
\end{document}

结果

应用于更新后问题的 MWE:

\documentclass{report}

\newcommand{\entrylabel}[1]{\mbox{#1}\hfil}

\newenvironment{CV}
  {\begin{list}{}
{\renewcommand{\makelabel}{\entrylabel}
\setlength{\labelwidth}{77pt}
\setlength{\leftmargin}{84pt}
  }}
  {\end{list}
}

\makeatletter
\newcommand*{\titem}[1]{%
  \mbox{#1}%
  \@ifnextchar\titem{%
    \hspace{0.4em plus 1fil}%
    \sbox0{\textperiodcentered}%
    \cleaders\copy0\hskip\wd0 %
    \hspace{0.6em plus 1fil}%
  }{}%
}
\makeatother

\begin{document}

\pagestyle{empty}

\begin{CV}
\item[Experimental]
\titem{mechanics}
\titem{fluid dynamics}
\titem{thermodynamics}
\titem{waves}
\titem{electromagnetism}
\titem{optics}
\titem{atomic physics}
\titem{nuclear physics}
\titem{particle physics}
\titem{astrophysics}
\titem{astroparticle physics, methods and detectors}
\titem{cosmology}
\titem{neutrino astronomy}
\titem{accelerator physics and technology}
\titem{statistics and data analysis}
\end{CV}

\end{document}

结果

答案2

以下是另一种方法:

\documentclass{article}
\usepackage{xstring}

\newcommand{\entrylabel}[1]{\mbox{#1}\hfil}

\newenvironment{CV}
  {\begin{list}{}
{\renewcommand{\makelabel}{\entrylabel}
\setlength{\labelwidth}{77pt}
\setlength{\leftmargin}{84pt}
  }}
  {\end{list}
}

\newlength{\DLwidth}

\newcommand{\DLbase}[1]% #1 = comma delimited keywords
{\StrCut{#1}{,}\DLleft\DLright%
\loop% extract keywords from list
\StrCut{\DLright}{,}\DLnext\DLright%
\settowidth{\DLwidth}{\DLleft\DLdot\DLnext}%
\ifdim\DLwidth<\linewidth\edef\DLleft{\DLleft\DLdot\DLnext}%
\else\DLleft\DLline%
\edef\DLleft{\DLnext}%
\fi%
\if\DLright\relax\else\repeat%
\DLleft}

\makeatletter
\def\DotList{\@ifstar\DLragged\DLflush}
\makeatother

\def\DLflush#1{% flush right version
\def\DLdot{\hfil$\cdot$\hfil}%
\def\DLline{\linebreak[4]}%
\DLbase{#1}}

\newcommand{\DLragged}[1]% ragged right version
{\def\DLdot{ $\cdot$ }%
\def\DLline{\newline}%
\DLbase{#1}}

\begin{document}
\begin{CV}
  \item[Flushright]{\DotList{mechanics,fluid dynamics,thermodynamics,waves,electromagnetism,%
  optics,atom physics,nuclear physics,particle physics,astrophysics,%
  astroparticle physics,methods and detectors,cosmology,neutrino astronomy,%
  accelerator physics and technology,statistics and data analysis}}

  \item[Raggedright]{\DotList*{mechanics,fluid dynamics,thermodynamics,waves,electromagnetism,%
  optics,atom physics,nuclear physics,particle physics,astrophysics,%
  astroparticle physics,methods and detectors,cosmology,neutrino astronomy,%
  accelerator physics and technology,statistics and data analysis}}
\end{CV}
\end{document}

点列表

相关内容