フランス語のスペース(バベルやポリグロッシアなし)

フランス語のスペース(バベルやポリグロッシアなし)

人工言語で文書を再編集するには(ラテン語 正屈曲)、私は「フランス語」の句読点間隔が必要です副作用なし

もっと具体的に言うと、二重句読点の前には小さな改行不可スペース -- : ; ! ?-- を入れ、開き引用符の後または閉じ引用符 (guillemet) の前には、通常の改行不可スペース --«とを入れます»

答え1

pdflatex文字のカテゴリ コードを変更するソリューションを使用できます。

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
% saving original quotes representation
\let\gll\guillemotleft
\let\glr\guillemotright
% new quotes representation
\def\frenchguillemotleft{\gll~}
\def\frenchguillemotright{~\glr}
{
    \catcode`\:=\active
    \catcode`\;=\active
    \catcode`\?=\active
    \catcode`\!=\active
    \gdef\frenchpunct{%
        \catcode`\:=\active \def:{\thinspace\char`\: }
        \catcode`\;=\active \def;{\thinspace\char`\; }
        \catcode`\?=\active \def?{\thinspace\char`\? }
        \catcode`\!=\active \def!{\thinspace\char`\! }
        \let\guillemotleft\frenchguillemotleft
        \let\guillemotright\frenchguillemotright
    }
}
\def\nofrenchpunct{%
    \catcode`\:=12
    \catcode`\;=12
    \catcode`\?=12
    \catcode`\!=12
    \let\guillemotleft\gll
    \let\guillemotright\glr
}
\begin{document}
french: french; french? french!
«french»

\frenchpunct
french: french; french? french!
«french»

\nofrenchpunct
french: french; french? french!
«french»
\end{document}

ここに画像の説明を入力してください

コマンドは、\frenchpunct文字、をアクティブにし:て、目的の動作(文字の前の細いスペースの改行不可)に従って定義します。また、このコマンドはコマンドを再定義し、それらはパッケージによって宣言されます。;?!\guillemotleft\guillemotrightinputenc

コマンド\nofrencpunctはすべて元に戻します。

述べる:上記の\frenchpunctコマンドはローカルです。したがって、{}グループを抜けると、その効果は失われます。すべての前に\nofrenchpunct追加することによってのみキャンセルされるグローバル コマンドが必要な場合(またはのエイリアスである を使用)、および定義で次のようにします。\global\def\gdef\global\def\catcode\let\frenchpunct

\gdef\frenchpunct{%
    \global\catcode`\:=\active \gdef:{\thinspace\char`\: }
    \global\catcode`\;=\active \gdef;{\thinspace\char`\; }
    \global\catcode`\?=\active \gdef?{\thinspace\char`\? }
    \global\catcode`\!=\active \gdef!{\thinspace\char`\! }
    \global\let\guillemotleft\frenchguillemotleft
    \global\let\guillemotright\frenchguillemotright
}

以下についても同様にします\nofrenchpunct:

\def\nofrenchpunct{%
    \global\catcode`\:=12
    \global\catcode`\;=12
    \global\catcode`\?=12
    \global\catcode`\!=12
    \global\let\guillemotleft\gll
    \global\let\guillemotright\glr
}

答え2

これは LuaLaTeX ベースのソリューションです。これは、french_punctuation_spacingすべての作業を実行する と呼ばれる Lua 関数と、それぞれ Lua 関数をアクティブ化および非アクティブ化する および\FrenchPunctuationSpacingOnと呼ばれる 2 つの LaTeX ユーティリティ マクロで構成されて\FrenchPunctuationSpacingOffいます。

ここに画像の説明を入力してください

% !TEX TS-program = lualatex
\documentclass{article}
\usepackage{luacode}  % for 'luacode' environment
\begin{luacode}
function french_punctuation_spacing ( s )
  s = s:gsub ( "[:;!?]" , "\\,%0" )
  s = s:gsub ( "«" , "«~" )
  s = s:gsub ( "»" , "~»" )
  return s
end
\end{luacode}
\newcommand\FrenchPunctuationSpacingOn{\directlua{%
  luatexbase.add_to_callback ( "process_input_buffer",
  french_punctuation_spacing , "frenchpunctuationspacing" )}}
\newcommand\FrenchPunctuationSpacingOff{\directlua{%
  luatexbase.remove_from_callback ( "process_input_buffer",
  "frenchpunctuationspacing" )}}

%\usepackage{fontspec} % optional

\begin{document}
bonjour: monde; oui? non! «aujourd'hui»

\FrenchPunctuationSpacingOn % activate the Lua function
bonjour: monde; oui? non! «aujourd'hui»

\FrenchPunctuationSpacingOff % deactivate the Lua function
bonjour: monde; oui? non! «aujourd'hui»
\end{document}

関連情報