구성된 언어로 문서를 다시 편집하려면(라틴계 사인 플렉시온), "프랑스어" 구두점 간격이 필요합니다.부작용 없이.
더 구체적으로 말하면, 이중 구두점 앞에 작은 줄바꿈 방지 공백을 원하고, : ; ! ?
시작 뒤나 닫는 따옴표(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
및 라는 두 개의 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}