我使用这个代码:
\begin{tabularx}{\textwidth}{c|X}
\emph{17:49} & Very long text...
\end{tabularx}
为了得到这个(我想使用 LaTeX 来保存个人日记,笔记应该是这样的):
我试图定义一个自定义环境(#1
是写下注释的时间):
\newenvironment{note}[1]
{
\begin{tabularx}{\textwidth}{c|X}
\emph{#1} &
}
{
\end{tabularx}
}
但它不起作用。以下是日志文件告诉我的内容:
Runaway argument?
! File ended while scanning use of \TX@get@body.
<inserted text>
\par
<*> test.tex
答案1
文档tabularx
指出
这种抓取环境主体的机制确实存在缺点(与 AMS 对齐环境相同),即您无法通过以下代码创建扩展环境
\newenvironment{foo}{\begin{tabularx}{XX}}{\end{tabularx}}
因为代码正在寻找字符串 \end{tabularx} 来停止扫描。从 2.02 版开始,可以通过在定义中直接使用 \tabularx 和 \endtabularx 来避免此问题:
\newenvironment{foo}{\tabularx{XX}}{\endtabularx}
扫描仪现在寻找当前环境的结束(本例中为 foo)。这种用法有一些限制,主要的是 \endtabularx 不能位于任何 { } 对内,以便 \endtabularx 之前的代码可以被提取并添加到表体中(在 2.09 版本之前,\endtabularx 必须是环境“结束代码”的第一个标记)。
因此,你可以将环境定义为
\newenvironment{note}[1]{%
\par\noindent
\tabularx{\textwidth}{c|X}%
\emph{#1} &%
}{%
\endtabularx%
}
我添加\par\noindent
了定义。\par
结束上一段并\noindent
确保条目没有缩进\parindent
(这会导致过度\hbox
)。
答案2
使用\NewEnviron
而不是\newenvironment
。
\NewEnviron{note}[1]{
\begin{tabularx}{\textwidth}{c|X}
\emph{#1} & \BODY
\end{tabularx}
}
完整示例:
\documentclass{article}
\usepackage{tabularx}
\usepackage{environ}
\NewEnviron{note}[1]{
\begin{tabularx}{\textwidth}{c|X}
\emph{#1} & \BODY
\end{tabularx}
}
\begin{document}
\begin{note}{text}
more text
\end{note}
\end{document}