人工言語で文書を再編集するには(ラテン語 正屈曲)、私は「フランス語」の句読点間隔が必要です副作用なし。
もっと具体的に言うと、二重句読点の前には小さな改行不可スペース -- : ; ! ?
-- を入れ、開き引用符の後または閉じ引用符 (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
\guillemotright
inputenc
コマンド\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}