针对我关于空格的问题 内部不可破坏的(薄)空间« »,用于 tex4ht
我使用@michal.h21 提供的有效技巧编辑了我的消息
\ifx\HCode\undefined \else
\usepackage{newunicodechar}
\def\mythinspace{\HCode{<span style="white-space:nowrap"> </span>}}
\newunicodechar{«}{«\mythinspace\ignorespaces}
\newunicodechar{»}{\unskip\mythinspace»}
% \newunicodechar{;}{\mythinspace;}
% \newunicodechar{:}{\mythinspace:}
\fi
\begin{document}
\ifx\HCode\undefined \else
\Css{body{background-color:gainsboro;}}
\Css{.fine{
display: inline-block;
width:0.125em;}
}
\catcode`\!=\active%
\catcode`\:=\active%
\catcode`\;=\active%
\def\insertthinspace#1{%
\def#1{\unskip\mythinspace\detokenize{#1}}%
}
\insertthinspace! \insertthinspace: \insertthinspace;
\fi
这个技巧效果很好,但如果我在修改后的技巧中使用数字代码(例如 
薄空间)代替其名称, 
\def\mythinspace{\HCode{<span style="white-space:nowrap"> </span>}}
然后make4ht
输出错误:
(d:/texlive/texmf-dist/tex/latex/newunicodechar/newunicodechar.sty)
! Illegal parameter number in definition of \mythinspace.
<to be read again>
8
l.29 ...{\HCode{<span style="white-space:nowrap">
201;</span>}}
?
问题 1:是否可以输入数值定义中的名称\mythinspace
?
问题2:是否有可能将~
我.tex
用作薄的不可破坏空间的每一个变成一个
<span style="white-space:nowrap"> </span>}
在我的.html
???
例如,长划线也---
必须有一个不可破坏的空间。我尝试tilde
用
\catcode`\~=\active%
\def\~{\unskip\mythinspace\ignorespaces}%
但当然,tilde
当我需要时它不再显示:尝试编译下面的代码并激活波浪号的替换。
\textemdash~my text in long dash~---\\
---~asdmy text in long dash~\textemdash
\~{n}ana un tilde \~{}.
\char`\~
你会看到tilde
消失了。更糟糕的是,并.html
没有显示波浪符号被替换为thin non-breakable space
<!--l. 202--><p class="noindent" ><span
class="cmr-12">—</span><span
class="cmr-12"> my text in long dash</span><span
class="cmr-12"> —</span><br
class="newline" /><span
class="cmr-12">—</span><span
class="cmr-12"> asdmy text in long dash</span><span
class="cmr-12"> —</span>
</p>
<!--l. 205--><p class="noindent" ><span style="white-space:nowrap"> </span><span
class="cmr-12">nana un tilde</span><span style="white-space:nowrap"> </span><span
class="cmr-12">.</span>
</p>
<!--l. 207--><p class="noindent" ><span
class="cmr-12">˜</span>
</p>
那么,是否有可能将~
我.tex
使用过的每个薄而不可破坏的空间,变成
<span style="white-space:nowrap"> </span>}
在我的.html
同时保持了其正常使用方式~
,例如\~{o}
???
答案1
1)是的,但是您必须将其作为十六进制值输入:
\def\mythinspace{\HCode{<span class="fine">&\#x2009;</span>}}
#
字符必须使用 进行转义\#
。请注意,此数字实体稍后将替换为 HTML 中的实际 unicode 字符。您可以使用自定义 unicode.4hf 文件
2)~
已经是活跃角色,你可以使用以下命令重新定义它:
\def~{\unskip\mythinspace\ignorespaces}%
(所以不行\~
)
完整示例文档:
\documentclass[oneside,a4paper, 12pt]{article}
%\usepackage[french]{babel}
%\usepackage[style=french]{csquotes}%
\usepackage{alternative4ht}
\altusepackage{polyglossia}
\altusepackage{fontspec}
\setdefaultlanguage{french}
\ifx\HCode\undefined \else
\usepackage{newunicodechar}
\def\semicolon{\detokenize{;}}
\def\mythinspace{\HCode{<span class="fine">&\#x2009;</span>}}
\newunicodechar{«}{«\mythinspace\ignorespaces}
\newunicodechar{»}{\unskip\mythinspace»}
% \newunicodechar{;}{\mythinspace;}
% \newunicodechar{:}{\mythinspace:}
\fi
\begin{document}
\ifx\HCode\undefined \else
\Css{body{background-color:gainsboro;}}
\Css{.fine{
white-space:nowrap;
}
}
\Tag{TITLE+}{possibilities for unbreakable space inside « » in HTML}
\catcode`\!=\active%
\catcode`\:=\active%
\catcode`\;=\active%
\def\insertthinspace#1{%
\def#1{\unskip\mythinspace\detokenize{#1}}%
}
\def~{\unskip\mythinspace\ignorespaces}%
\insertthinspace! \insertthinspace: \insertthinspace;
%unusable solution by @michal.h21
%\def\guillemotleft{\HCode{« }}
%\def\guillemotright{\unskip\HCode{ »}}
\fi
; œ ; Œ ; É ; È ; Ê ; À ; Á ; Å ; Ç
%\euro{}
; \oe{} ; \OE{} ; \'{E} ; \`{E} ; \^{E} ; \'{A} ; \`{A} ; \AA{} ; \c{C}
ī \={\i}
My quotes with breakable spaces, once in a html:
« blabla ».
In lualatex, the french spaces for !, ;, : are set properly.
No need for a ~ as in ~!, ~; ~:.
\textemdash~my text in long dash~---\\
---~asdmy text in long dash~\textemdash
\~{n}ana un tilde \~{}.
\char`\~
\end{document}
结果: