这是一个带有一个参数(例如标题)的小新命令 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
我从节点中删除了该名称,因为它没有任何用处。