用空论点进行对齐

用空论点进行对齐

这是一个带有一个参数(例如标题)的小新命令 exo。

如果没有这个参数,对齐就不好。

是否有可能改善这一点在此处输入图片描述

\documentclass[a4paper]{article}
\usepackage[T1]{fontenc}
\usepackage{lipsum}
\usepackage{tikz}

\newcounter{counter}

\newenvironment{exo}[1]{%
   \refstepcounter{counter} 
   \begin{tikzpicture}[trim left, trim right = (dot), baseline]
   \coordinate (dot) at (0,0) ;
   \node[minimum size = 5mm,
         rounded corners = 1mm, 
         fill = blue!20,
         align = center,
         left = 5mm, 
         anchor = base east] (foo) {\thecounter} ;
   \end{tikzpicture}%
   {\bfseries #1}%
   }%
   {}
   

\setlength{\parindent}{0cm}

\begin{document}

%%
\begin{exo}{Un titre}

\lipsum[2]
\end{exo}
%%

\medskip

%%
\begin{exo}{}
\lipsum[2]
\end{exo}
%%

\end{document}   

答案1

您的第一个示例是:

\begin{exo}{Un titre}

\lipsum[2]
\end{exo}

文本“Un titre”以粗体打印,然后是空格(从第一行末尾开始)。第二行是空的,并生成\par,即文本“Un titre”作为第一段。下一段由\lipsum[2]无缩进的文本开始。如果您在此处删除空行:

\begin{exo}{Un titre}
\lipsum[2]
\end{exo}

你得到粗体“Un titre”,接下来空间从行尾开始,下一个文本从\lipsum[2]同一行的这个空格开始。在我看来,这是理想的行为。

你的第二个例子:

\begin{exo}{}
\lipsum[2]
\end{exo}

不创建粗体文本,然后从行尾插入空格,然后文本紧随其后。 您可以通过在行尾\lipsum[2]添加以下内容来禁用此空格:%

\begin{exo}{}%
\lipsum[2]
\end{exo}

或者您可以将测试添加到宏中“如果参数为空则忽略空格”:

\newenvironment{exo}[1]{%
   \refstepcounter{counter} 
   \begin{tikzpicture}[trim left, trim right = (dot), baseline]
   \coordinate (dot) at (0,0) ;
   \node[minimum size = 5mm,
         rounded corners = 1mm, 
         fill = blue!20,
         align = center,
         left = 5mm, 
         anchor = base east] (foo) {\thecounter} ;
   \end{tikzpicture}%
   {\bfseries #1}%
   \ifx^#1^\ignorespaces\fi   %%% <- this line is added
   }%
   {}

答案2

我将标题设为可选参数,并在这样的环境上方和下方添加垂直间距。

由于您似乎希望标题单独放在一行,因此使用\par\nopagebreak就可以完成这项工作,而不必在环境文本的开头添加空行。

\documentclass[a4paper]{article}
\usepackage[T1]{fontenc}
\usepackage{lipsum}
\usepackage{tikz}

\newcounter{counter}

\NewDocumentEnvironment{exo}{o}{%
  \par\addvspace{\topsep}
  \refstepcounter{counter}%
  \begin{tikzpicture}[trim left, trim right = (dot), baseline]
    \coordinate (dot) at (0,0) ;
    \node[
      minimum size = 5mm,
      rounded corners = 1mm, 
      fill = blue!20,
      align = center,
      left = 5mm, 
      anchor = base east
     ] {\thecounter} ;
   \end{tikzpicture}%
   \IfValueT{#1}{\textbf{#1}\par\nopagebreak}%
   \ignorespaces
}%
{\par\addvspace{\topsep}}

\setlength{\parindent}{0cm}

\begin{document}

\begin{exo}[Un titre]
\lipsum[2]
\end{exo}

\begin{exo}
\lipsum[2]
\end{exo}

\end{document}

在此处输入图片描述

foo我从节点中删除了该名称,因为它没有任何用处。

相关内容