![`textpos` で予期しないボックス サイズが発生する](https://rvso.com/image/286954/%60textpos%60%20%E3%81%A7%E4%BA%88%E6%9C%9F%E3%81%97%E3%81%AA%E3%81%84%E3%83%9C%E3%83%83%E3%82%AF%E3%82%B9%20%E3%82%B5%E3%82%A4%E3%82%BA%E3%81%8C%E7%99%BA%E7%94%9F%E3%81%99%E3%82%8B.png)
アップデート私は以下の発見に基づいてLaTeXスタイルファイルを公開しました。 CXLTX 絶対位置、(初期の)一部CXLTX スタイルコレクションこれにより、ページ上でワンライナーを正確に配置しやすくなります。プルリクエスト: 素晴らしい!
私はCSSに従ってテキストを配置しようとしてposition: absolute
いて、テキスト位置基本的にうまく機能するパッケージです。ドキュメントでは(p4)「環境によって配置されるボックスは、\textblock
その中のテキストブロック(またはその他の素材)にぴったりと収まる」と書かれていますが、
\documentclass[a5paper]{memoir}
\usepackage{polyglossia}
\setdefaultlanguage{english}
\setlength{\parskip}{\baselineskip}
\setlength{\parindent}{0pt}
\usepackage[absolute]{textpos}
\setlength{\TPHorizModule}{0.1mm}
\setlength{\TPVertModule}{0.1mm}
\textblockorigin{0mm}{0mm}
% not needed, but makes for easier measuring:
\usepackage[top-left]{pagegrid}
\begin{document}
\TPshowboxestrue
\begin{textblock}{150}[1,0](500,000)\flushright helo\end{textblock}
\begin{textblock}{150}[1,0](500,200)\flushright world\end{textblock}
\begin{textblock}{150}[1,0](500,400)\flushright gX\end{textblock}
\begin{textblock}{150}[1,0](700,400)\flushright .\end{textblock}
\end{document}
\setlength{\parskip}{0pt}
\setlength{\parskip}{-\baselineskip}
私が得たのは
つまり、ボックスの右端は 500 (10 分の 1 mm) に正しく配置され、上端はそれぞれ 0、200、400 に正しく配置され、ボックスの下端は宣伝どおりにディセンダにしっかりと巻き付いていますが、ボックスの高さはまだ 8 mm です。宣伝どおりに巻き付けるにはどうすればよいですか?
答え1
これは簡単です...質問を書き留めると、問題解決につながることがあります。記録のために:
私は、何かを に入れるということは、textpos
textblock
ページや に入れるのと少し似た動作をするminipage
、つまり段落の「スキップ」は暗黙的に省略されるだろうと誤って想定していました。
そうではありません。
まず、設定
\setlength{\parskip}{0pt}
箱の高さを下げ、
\setlength{\parskip}{-\baselineskip}
結果は次の通りです:
これは直感に反するのですが、ゼロ段落間のスペースすべき「段落の上に空白なし」と同じですよね?
注記現実の世界では、\parskip
ここで示したような驚くべき値をグローバルに設定するのではなく、環境内でローカルに表示するようにしますtextblock
(そして、それを新しいマクロとしてキャストするかもしれません)。
アップデートフォローアップとして、テキストの絶対配置を簡素化する便利なマクロを定義しました。以下がそのマクロです。
\newdimen\textposstrutheight
\newdimen\textposstrutwidth
\newdimen\textposstrutdepth
\newdimen\textposstrutlength
\textposstrutwidth=0.5mm
\textposstrutheight=2.7mm
\textposstrutdepth=2.8mm
\textposstrutlength=\dimexpr\textposstrutheight+\textposstrutdepth
\newcommand{\textposstrut}{{\color{blue}\vrule height\textposstrutheight width\textposstrutwidth depth\textposstrutdepth}}
\newcommand{\placeflushright}[4]{%
\begin{textblock}{#1}[1,0.5](#2,#3)\flushright{\textposstrut}#4\end{textblock}%
}
今、あなたが
\begin{textblock}{150}[1,0.5](500,000)\flushright\textposstrut helo\end{textblock}
\begin{textblock}{150}[1,0.5](500,200)\flushright\textposstrut world\end{textblock}
\begin{textblock}{150}[1,0.5](500,400)\flushright\textposstrut gX\end{textblock}
\begin{textblock}{150}[1,0.5](700,400)\flushright\textposstrut .\end{textblock}
\placeflushright{150}{300}{400}{gX}
(上記の質問に示されているのと同じドキュメント設定内で)
ここでgX
、左下の は、テキストが実際に正しく配置されていることを示しています ( の右端のベースラインは、ドキュメントの端から測定されてX
います)。( 30mm, 40mm )
ここで定義されているストラットには、デモンストレーションのために目に見える幅があることに注意してください。また、その高さと深さは、ここで使用されている特定のフォント寸法と一致するように慎重に調整されています。別のフォントに切り替えると、との両方を\textposstrutheight
再depth
定義する必要がある可能性があります。