我想使用第三方包中定义的环境,但无法修改。简化后的定义如下:
\newenvironment{myenv}[1]{
% some stuff here
\textbf{#1}
}{% some more stuff here
}
现在我想使用不带参数(或者带空参数)的环境。但是,行首仍有一些空格(源自环境定义中的换行符)。我想删除这些空格。
如何在不修改环境定义的情况下让环境的内容从行首开始?
这是一个简单的例子:
\documentclass{article}
% I cannot make changes from here ...
\newenvironment{myenv}[1]{
\textbf{#1}
}{}
% ... to here.
\begin{document}
\begin{myenv}{Argument}
Content
\end{myenv}
\begin{myenv}{}
Content Only
\end{myenv}
\end{document}
我希望第二行从与第一行相同的水平位置开始。
我当然可以使用某个固定大小的负片\hspace{}
,但我希望它适用于任意字体设置等。
顺便说一句,我不在乎解决方案是否丑陋,因为 LaTeX 代码将由脚本自动生成。
答案1
可以使用补丁来改变定义:
这里有两个问题
- 失踪
%
后\textbf{#1}
- 空
{}
导致间距,因为\textbf{}
我添加了一个\string%
和一个检查参数是否为空——\notblank{#1}{}{}
检查是否#1
为空,如果不是,则执行第二个参数中的代码。
\documentclass{article}
\usepackage{xpatch}%
% I cannot make changes from here ...
% Some statements by me (C.H.)
\newenvironment{myenv}[1]{% is missing
\textbf{#1}% is missing
}{}
% ... to here.
\xpatchcmd{\myenv}{\textbf{#1}}{\notblank{#1}{\textbf{#1}}{}\string%
}{\typeout{Success}}{\typeout{Failed!}}
\begin{document}
Compare
\textbf{Argument}
Content only
\begin{myenv}{Argument}
Content
\end{myenv}
\begin{myenv}{}
Content Only
\end{myenv}
\end{document}