排版逗号,除非在换行符之前

排版逗号,除非在换行符之前

我正在尝试创建一个模板(.sty文件),它将排版

[value of macro 1], [value of macro 2]

如果此表达式不超过行的长度,并且

[value of macro 1]
[value of macro 2]

否则在居中环境中。我的第一个想法是使用\mbox来防止字段本身的换行,但这给我带来了一个问题,那就是如何让 LaTeX 在换行时忽略逗号。然后我尝试使用

\newcommand{\@macroa}{\mbox{[value of macro1]}}
\newcommand{\@macrob}{\mbox{[value of macro2]}}
\newcommand{\@macroc}{\mbox{[value of macro1], [value of macro2]}}
\discretionary{\@macroa}{\@macrob}{\@macroc}

哪种方法可以满足我的要求,但有一个重要的警告 - 如果出现换行符,文本不再居中,但现在会排版为

|                       [value of macro1]|
|[value of macro 2]                      |

我不知道如何插入适当的胶水而不导致 LaTeX 引发错误Improper discretionary list.......


哎哟,我已经弄清楚我的错误了——毕竟我当时不在中心环境中,而是使用了\hfils。更改为 为\centering我解决了这个问题。我想下次在写问题之前我应该​​再看一遍源代码……但是,我想我还是把它留在这里吧,因为谷歌没有为这个用例提供有用的结果,所以也许有一天它会对别人有用。我很抱歉!

答案1

您可以将逗号排版为胶水(使用\xleaders);由于胶水在换行符处消失,因此逗号也会消失。

\documentclass{article}

\newcommand{\disappearingcomma}{%
  \leavevmode
  \sbox0{,}%
  \xleaders\copy0\hskip\wd0\relax
  \space
}

\newcommand{\macroa}{Value of macro A}
\newcommand{\macrob}{Value of macro B}
\newcommand{\macroab}{\mbox{\macroa}\disappearingcomma\mbox{\macrob}}

\begin{document}

\begin{minipage}{6cm}
\centering
\macroab
\end{minipage}\vrule
\begin{minipage}{4cm}
\centering
\macroab
\end{minipage}

\end{document}

在此处输入图片描述

答案2

正如@PhelypeOleinik 在评论中指出的那样,宏名称\@macro1\@macro2和是无效的——在多字符 TeX 和 LaTeX 宏名称中不允许使用 到 的数字。因此,我建议您\@macro3改用、和。09\@macroa\@macrob\@macroc

在此处输入图片描述

\documentclass{article}
\usepackage[utf8]{inputenc} % 
\makeatletter
\newcommand{\@macroa}{\mbox{[value of macro A]}}
\newcommand{\@macrob}{\mbox{[value of macro B]}}
\newcommand{\@macroc}{\mbox{[value of macro A], [value of macro B]}}
\newcommand\blurb{\discretionary{\@macroa}{\@macrob}{\@macroc}}
%% Or, far more succinctly, David Carlisle's excellent suggestion: 
%%   \newcommand\blurb{\@macroa\discretionary{}{}{\hbox{, }}\@macrob}
%% With this approach, it's not necessary to define '\@macroc'.
\makeatother

\setlength\parindent{0pt}
%\setlength\textwidth{1mm} % uncomment to get a very narrow measure

\begin{document}
\blurb
\end{document}

相关内容