LINUX.ORG.RU

[latex] Вычислить ширину произвольной строки

 


0

1

Есть некая функция, использующая fancyhdr и позиционирующая определённый текст в верхнем правом углу страницы, вне всяких маржинов и колнтитулов:

 
\documentclass[10pt]{report} 
\usepackage[utf8]{inputenc} 
\usepackage[english,russian]{babel} 
\usepackage{fancyhdr} 
 
\begin{document} 
 
\newcommand{\setpartcopyright}[2]{ 
   \fancypagestyle{plain}{ 
      \fancyhf{} 
      \rhead{\setlength{\unitlength}{1in} 
      \begin{picture}(#1,0) 
         \put(1.5,1){#2} 
      \end{picture} 
      } 
   } 
} 
 
\chapter{abc} 
\setpartcopyright{1.5}{Copyright Ф.А.Милия} 
textextext 
 
\chapter{bvg} 
\setpartcopyright{2.7}{Copyright Э.В.Крузенштерн-ван-опоссум} 
textextext 
 
\end{document} 

И вместо ручного указания первого аргумента (1.5 и 2.7) хотелось бы автоматически его расчитовать исходя из ширины строки из второго аргумента. Как это можно реализовать?



Последнее исправление: itakingiteasy (всего исправлений: 2)

Нужно знать ширину фразы?

\newlength{\MyLength}
\settowidth{\MyLength}{ширина фразы которую нужно вычислить}

Стр. 68 моей книги :)

Evgueni ★★★★★
()
Ответ на: комментарий от Evgueni

А как потом из этого числа извлечь численную часть, без указания едениц измерения, чтобы использовать её потом в качестве аргумента \begin{picture}(#1,0) ?

itakingiteasy
() автор топика
Ответ на: комментарий от Evgueni

А вы сделайте \unitlength в размер \MyLength, а в picture честно подставьте 1.

Я не смог в этом разобраться, так что решил всё совсем по-другому, через TikZ:

\newcommand{\setpartcopyright}[1]{
	\fancypagestyle{plain}{
		\fancyhf{}
		\setlength{\copyrightlengthwidth}{\widthof{#1}}
		\setlength{\copyrightlengthheight}{\heightof{#1}}
		\begin{tikzpicture}[remember picture,overlay]
			\draw (current page.north east) +(1.5in-\copyrightlengthwidth,-0.1in-\copyrightlengthheight) node {#1};
		\end{tikzpicture}
		\cfoot{\thepage\setlength{\unitlength}{1in}
		\begin{picture}(0,0)
			\put(-1.5,-1){ftp://neverb.net/lib/lecture/math/basic\_math/}
		\end{picture}}
	}
}

itakingiteasy
() автор топика
Ответ на: комментарий от itakingiteasy

Фикс для справедливости

\newcommand{\setpartcopyright}[1]{
	\def\x{Copyright 2010 #1}
	\setlength{\copyrightlengthwidth}{\widthof{\x}}
	\setlength{\copyrightlengthheight}{\heightof{\x}}
	\begin{tikzpicture}[remember picture,overlay]
		\draw (current page.north east) ++(-\copyrightlengthwidth/2,-\copyrightlengthheight/2) ++(-0.1in,-0.1in) node {\x};
	\end{tikzpicture}
}

itakingiteasy
() автор топика
Ответ на: комментарий от itakingiteasy

Да, если кому-то интересно, то результат выглядит так:

\documentclass[10pt]{report}
\usepackage[utf8]{inputenc}
\usepackage[english,russian]{babel}
\usepackage{calc}
\usepackage{fancyhdr}
\pagestyle{fancy}

\begin{document}

\fancyhead{}
\fancyfoot{}

\renewcommand{\headrulewidth}{0.0pt}
\renewcommand{\footrulewidth}{0.0pt}

\newlength{\urllengthwidth}
\newlength{\copyrightlengthwidth}
\newlength{\copyrightlengthheight}

\newcommand{\setfooterurl}{  
	\cfoot{
		\def\workurl{ftp://neverb.net/lib/lecture/math/basic\_math/}
		\setlength{\urllengthwidth}{\widthof{\workurl}}	
		\setlength{\unitlength}{1in}
		\thepage
		\begin{picture}(0,0)
		\put(0,-1){
			\setlength{\unitlength}{\urllengthwidth/2}
			\put(-1,0){\workurl}
		}
		\end{picture}
	}
}

\setfooterurl

\newcommand{\setpartcopyright}[1]{
	\def\x{Copyright 2010 #1}
	\setlength{\copyrightlengthwidth}{\widthof{\x}}
	\setlength{\copyrightlengthheight}{\heightof{\x}}
	\fancypagestyle{plain}{  
      \fancyhf{}  
      \rhead{
      \setlength{\unitlength}{-\marginparwidth-\marginparsep+\copyrightlengthwidth-0.5in}
      \begin{picture}(1,0)  
      \setlength{\unitlength}{-1.3in+\copyrightlengthheight*2}
         \put(0,-1){\x}  
      \end{picture}  
      } 
	\setfooterurl
   }
}  
\chapter{abc}
\setpartcopyright{Ф.А. Милия}

\end{document}
Но есть одна странность: если включить \usepackage{tikz}, отступ по горизонтали становится больше на примерно 0.2 дюйма. С чем это связано и как это отловить - не знаю. Пока единственным решением при включении тикза я вижу только перехардкод -0.5in на -0.7in.

itakingiteasy
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.