这两个包之间似乎不兼容。
看看这两个 MWE:
正确的那一个
\documentclass{article}
\usepackage{tasks}
%\usepackage[french]{babel}
\begin{document}
\begin{tasks}(3)
\task aaa
\task! fff
\task bbb
\task ccc
\task ddd
\task eee
\end{tasks}
\end{document}
错误的
\documentclass{article}
\usepackage{tasks}
\usepackage[french]{babel}
\begin{document}
\begin{tasks}(3)
\task aaa
\task! fff
\task bbb
\task ccc
\task ddd
\task eee
\end{tasks}
\end{document}
此帖子旨在报告此不兼容问题
有人对如何解决这个问题有什么好主意吗?
答案1
我不会将此称为“解决”,但您可以使用etoolbox
的\AtBeginEnvironment
钩子来停用环境!
内部tasks
:
\documentclass{article}
\usepackage{tasks}
\usepackage[french]{babel}
\usepackage{etoolbox}
\AtBeginEnvironment{tasks}{\catcode`\!12}
\begin{document}
\begin{tasks}(3)
\task aaa
\task! fff
\task bbb
\task ccc
\task ddd
\task eee
\end{tasks}
\end{document}
如果要保持活动状态!
,则可以使用更强力的方法并更改用于表示整行任务的字符。例如+
:
\documentclass{article}
\usepackage{tasks}
\usepackage[french]{babel}
\ExplSyntaxOn
\cs_gset_protected:Npn \__tasks_read_item:www
{
\peek_meaning_remove:NTF + % <-- Character to activate a full-line task
{
\bool_set_true:N \l__tasks_item_full_line_bool
\__tasks_read_item_aux:ww
}
{
\peek_meaning_remove:NTF *
{
\bool_set_true:N \l__tasks_item_rest_of_line_bool
\__tasks_read_item_rest_of_line:ww
}
{ \__tasks_read_item_aux:ww }
}
}
\ExplSyntaxOff
\begin{document}
\begin{tasks}(3)
\task aaa
\task+ fff
\task bbb
\task ccc
\task ddd
\task eee
\end{tasks}
\end{document}
经过一番挖掘:
jfbu 建议使用\expandafter\task\string!
或定义\taskexclam
为\task <the character !>
。
这些不起作用,因为tasks
使用\task
虚拟控制序列来分割环境的收集内容。因此内部如下:
\begin{tasks}(3)
\task aaa
\expandafter\task\string! fff
\task bbb
\taskexclam ccc
\task eee
\end{tasks}
转换为列表:
{ aaa \expandafter }
{ \string! fff }
{ bbb \taskexclam ccc }
{ eee }
这使得\expandafter
技巧变得毫无用处,并且\string!
只会写入!
。\taskexclam
也执行得太晚了,所以没有效果。
tasks
一种遵循' 规则并保留法语中含义的方法是在加载之前!
复制的字符定义,然后使用新名称:!
babel
\documentclass{article}
\let\exclam=!
\usepackage[french]{babel}
\usepackage{tasks}
\begin{document}
\begin{tasks}(3)
\task aaa
\task\exclam fff
\task bbb
\task ccc
\task ddd
\task eee
\end{tasks}
\end{document}