它类似于这个问题,但它的两个答案在这里似乎都不起作用。
我定义标题格式如下:
\usepackage[explicit]{titlesec}
\titleclass{\part}{top} % make part like a chapter
\titleformat{\part}[display]
{\raggedleft}
{\MakeUppercase{\partname}~\thepart}
{1em}
{\MakeUppercase{#1}}
\usepackage[english,french]{babel}
因此,理想情况下,人们应该PARTIE I
在新的部分看到。但实际上人们会看到Première partie I
。
方法接受的答案对此没有影响。另一方面,使用以下 babel 设置,
\frenchsetup{PartNameFull=false}
结果将变成Partie I
,仍然不是大写。
我该如何修复此行为?或者有没有什么方法可以Première partie
不显示I
法语模式?
下面是 MWE。
\documentclass{article}
\usepackage[explicit]{titlesec}
\titleclass{\part}{top} % make part like a chapter
\titleformat{\part}[display]
{\raggedleft}
{\MakeUppercase{\partname}~\thepart}
{1em}
{\MakeUppercase{#1}}
\usepackage[english,french]{babel}
%% This produces "Partie"
% \frenchsetup{PartNameFull=false}%
%% These seem to have no effect
% \usepackage{etoolbox}
% \makeatletter
% \renewcommand\FB@emptypart{\def\thepart{\unskip}}
% \patchcmd{\@part}{\partname}{Partie}{}{}
% \makeatother
\begin{document}
\selectlanguage{french}
\part{Test}
\selectlanguage{english}
\part{Test}
\end{document}
添加:我应该提到polyglossia
没有这个问题,但另一方面,人们无法毫不费力地Première partie
通过其新提供的选项获得类似的东西frenchpart=true
——报告“补丁失败”。
答案1
法语 Babel 支持试图确保像“Première partie”这样的结构通过(本地)更改来隐藏数字,从而\partname~\thepart
自动翻译成“Première partie” 。这在您的示例中失败了,因为在调用之前使本地重新定义结束。可以通过移动到它的参数并保护它来避免这种情况:\thepart
\MakeUppercase
\thepart
\thepart
更改{\MakeUppercase{\partname}~\thepart}
为{\MakeUppercase{\partname~\protect\thepart}}
以获取“Première partie”。
您还可以本地重新定义\frenchpartname
以确保它适用于\MakeUppercase
:
改变
{\MakeUppercase{\partname}~\thepart}
到
{\renewcommand\frenchpartname{Partie}\MakeUppercase{\partname}~\thepart}
得到“PARTIE I”。
答案2
该命令\partname
被定义为执行一些在您的情况下不需要的复杂的事情。
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[english,french]{babel}
\usepackage{titlesec}
\titleclass{\part}{top} % make part like a chapter
\titleformat{\part}[display]
{\filleft}
{\MakeUppercase{\partname}~\thepart}
{1em}
{\MakeUppercase}
\addto\captionsfrench{\renewcommand{\partname}{Partie}}
\begin{document}
%\selectlanguage{french} % French is already default
\part{Test}
\selectlanguage{english}
\part{Test}
\end{document}
几点说明:titlesec
优先\filleft
使用\raggedleft
。 没有必要使用explicit
:最后一个强制参数中的最后一个标记\titleformat
最终会跟随着括号内的标题,因此它可以是一个单参数宏。
实际上,我通常不鼓励使用:最好定义一个单独的宏来执行我们想要的操作,而不是用代码explicit
弄乱参数。\titleformat